Solidity

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Solidity ist eine objektorientierte, anwendungsspezifische höhere Programmiersprache mit einer JavaScript-ähnlichen Syntax zum Entwickeln von Smart Contracts für die Ethereum-Blockchain-Plattform.[1]

Geschichte[Bearbeiten | Quelltext bearbeiten]

Die erste Spezifikation von Solidity wurde im August 2014 von Gavin Wood ausgearbeitet.[2] 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 den Go-ähnlichen Sprache Mutan, LLL - einer Lisp-artigen Sprache - sowie der Python-ähnlichen Sprache Serpent. Solidity ist die bedeutendste und am stärksten weiterentwickelte dieser Sprachen. Mutan wurde 2015 zugunsten von Solidity abgesetzt[3] und auch LLL wird wenig verwendet.[4] Serpent wird weiterentwickelt, könnte aber ebenfalls von Solidity ersetzt werden.[5]

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Solidity ist eine auf JavaScript basierende statisch typisierte Programmiersprache, die entwickelt wurde um Smart Contracts für die Ethereum Virtual Machine (EVM) zu programmieren.[1] 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,[6] den Kommandozeilen-Solidity-Compiler solc oder den in die Ethereum-IDE Mix eingebauten Compiler.[7]

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 bestehenden 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, um externen Applikationen und Libraries (zum Beispiel Web3.js) die Interaktion mit Ethereum-Contracts zu ermöglichen.[8]

Beispielcode für einen in Solidity geschriebenen Contract:[9]

contract TestCoin {
    // Das Schlüsselwort "public" erlaubt es auch anderen Smart Contracts, die Variable auszulesen.
    // Diese Variable hat den Typ "address" und steht für die Adresse eines Ethereum Accounts.
    address public minter;
    mapping (address => uint) public balances;

    // Events erlauben es Ethereum-Clients, auf Ereignisse des Contracts zu reagieren.
    event Sent(address from, address to, uint amount);

    // Die Funktion mit demselben Namen wie der Smart Contract ist der Konstruktor.
    // Diese Funktion wird ein einziges Mal bei der Erstellung des Contracts aufgerufen.
    function TestCoin() {
        minter = msg.sender;
    }

    // Mit dieser Funktion kann der "minter" Ethereum Account anderen Accounts einen beliebigen
    // Betrag des "TestCoin" überweisen.
    function mint(address receiver, uint amount) {
        if (msg.sender != minter) return;
        balances[receiver] += amount;
    }

    // Diese Funktion erlaubt es Ethereum-Accounts, sich gegenseitig TestCoin zu überweisen.
    function send(address receiver, uint amount) {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        Sent(msg.sender, receiver, amount);
    }
}

Kritik[Bearbeiten | Quelltext bearbeiten]

Solidity geriet besonders nach dem medial stark aufgegriffenen Hack von The DAO, aber auch durch das Entdecken weiterer Exploits, in Kritik ernsthafte Sicherheitsprobleme zu haben.[10][11] 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.[12][13]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. a b Solidity — Solidity 0.2.0 documentation. In: solidity.readthedocs.io. Abgerufen am 9. September 2016.
  2. Benoit Schweblin: StackEdit Viewer. In: stackedit.io. Abgerufen am 9. September 2016.
  3. Mutan FAQ. Abgerufen am 11. September 2016.
  4. Is LLL still used as language? In: ethereum.stackexchange.com. Abgerufen am 11. September 2016.
  5. Solidity FAQ. Abgerufen am 11. September 2016.
  6. Solidity realtime compiler and runtime. In: ethereum.github.io. Abgerufen am 12. September 2016.
  7. Mix IDE. Abgerufen am 12. September 2016.
  8. Ethereum Contract ABI. Abgerufen am 12. September 2016.
  9. Introduction to Smart Contracts. Abgerufen am 12. September 2016.
  10. The DAO's Community: The DAO - Home. In: daohub.org. Abgerufen am 12. September 2016.
  11. heise online: Nach dem DAO-Hack: Ethereum glückt der harte Fork. In: heise online. Abgerufen am 12. September 2016.
  12. Muneeb Ali: Solarstorm: A security exploit with Ethereum’s Solidity language, not just the DAO. In: Blockstack Blog. 20. Juni 2016, abgerufen am 12. September 2016.
  13. Why Solidity isn’t solid. In: Blockstack Blog. 20. Juni 2016, abgerufen am 12. September 2016.