Solidity
# Solidity

Solidity ist eine objektorientierte, anwendungsspezifische höhere Programmiersprache zum Entwickeln von Smart Contracts für Blockchain-Plattformen wie Ethereum oder Tron, die von C++, Python und JavaScript beeinflusst ist.

## Geschichte

Die erste Spezifikation von Solidity wurde im August 2014 von Gavin Wood ausgearbeitet. Die weitere Entwicklung übernahm die Ethereum Foundation unter Leitung von Christian Reitwiessner. Solidity ist die 4. für die Ethereum Virtual Machine (EVM) entwickelte Sprache – nach der Go-ähnlichen Sprache Mutan, LLL – einer Lisp-artigen Sprache – sowie der Python-ähnlichen Sprache Serpent. Solidity ist die bedeutendste und am stärksten entwickelte dieser Sprachen. Mutan wurde 2015 zugunsten von Solidity abgesetzt und auch LLL wird wenig verwendet. Serpent wird aufgrund von Sicherheitsproblemen nicht mehr weiterentwickelt und wurde durch den Nachfolger Vyper ersetzt.

## Beschreibung

Solidity ist eine auf JavaScript basierende, statisch typisierte Programmiersprache, die entwickelt wurde, um Smart Contracts für die Ethereum Virtual Machine (EVM) zu programmieren. Solidity-Contracts können in Bytecode kompiliert werden, der von der EVM ausgeführt werden kann, um dann (zum Beispiel über die Ethereum-Geth-Konsole) in die Ethereum-Blockchain hochgeladen zu werden. Es gibt mehrere Methoden, um Solidity-Code zu kompilieren, zum Beispiel über den Online-Compiler, den Kommandozeilen-Solidity-Compiler solc oder den in die Ethereum-IDE Mix eingebauten Compiler.

Die Solidity-Syntax ist stark an die ECMAScript-Syntax angelehnt, um Webentwicklern den Einstieg in die Smart-Contract-Entwicklung zu erleichtern; im Unterschied zu ECMAScript ist sie aber statisch typisiert und unterstützt variadische Rückgabewerte. Im Vergleich mit den zuvor bestehenden, vergleichbaren Sprachen (LLL, Serpent, Mutan) unterstützt Solidity komplexe Variablentypen wie hierarchische Mappings und Structs, die auch verschachtelt werden können, sowie Vererbung für Contracts. Es wurde auch ein Application Binary Interface (ABI) spezifiziert, sodass eine Interaktion externer Applikationen und Libraries (zum Beispiel Web3.js) mit Ethereum-Contracts möglich ist.

Beispielcode für einen in Solidity geschriebenen Contract:

## Kritik

Solidity geriet besonders nach dem medial stark aufgegriffenen Hack von The DAO, aber auch durch das Entdecken weiterer Exploits, wegen ernsthafter Sicherheitsprobleme in die Kritik. Es wird unter anderem kritisiert, dass Solidity zu permissiv ist und auf JavaScript-ähnlichen Konzepten basiert, anstatt auf wissenschaftlicher Forschung zum Thema Formale Sprachen für Contracts aufzubauen.

## Bekannte Anwendungen

* Uniswap ist in Solidity geschrieben.
