Pevnost | |
---|---|
Jazyková třída | orientovaný na smlouvu |
Objevil se v | 2014 |
Uvolnění | |
Byl ovlivněn | JavaScript , C++ |
Licence | GNU GPL 3 |
webová stránka | github.com/ethereum/solidity |
Solidity je objektově orientovaný , doménově specifický programovací jazyk [2] samovykonatelných smluv pro platformu Ethereum .
Jazyk navrhl v srpnu 2014 Gavin Wood [3] . Další vývoj jazyka prováděl pod vedením Christiana Reitwiessnera tým Solidity v rámci projektu Ethereum . Je to jeden ze čtyř jazyků, spolu s Serpent, LLL a Mutan, navržený k překladu do bajtkódu virtuálního stroje Ethereum . Rozšířil se s příchodem technologií blockchain , zejména technologického zásobníku založeného na Ethereu , k vytvoření softwaru pro inteligentní smlouvy .
Staticky typovaný programovací jazyk podobný JavaScriptu určený k vývoji samoobslužných smluv , které běží na virtuálním stroji Ethereum (EVM). Programy jsou přeloženy do EVM bytecode. Umožňuje vývojářům vytvářet samostatné aplikace obsahující obchodní logiku, která vede k nevratným záznamům blockchainových transakcí .
Použití syntaxe ECMAScript, jak zamýšlel Wood, by mělo pomoci jazyk přijmout skutečnými webovými vývojáři. Na rozdíl od ECMAScript však jazyk obdržel statické typování proměnných a dynamické typy návratových hodnot. Ve srovnání s jazyky Serpent a Mutan kompilovanými do stejného bajtového kódu má jazyk důležité rozdíly. Jsou podporovány komplexní smluvní proměnné, včetně libovolných hierarchických mapování a struktur. Smlouvy podporují dědičnost, včetně vícenásobné a C3 linearizace . Je podporováno binární programovací rozhraní (ABI), které má v každé smlouvě mnoho typově bezpečných funkcí (následně se objevilo i v Serpentu). Specifikoval systém dokumentace kódu pro vlastní vysvětlení sekvence volání, nazvaný Ethereum Natural Specification Format.V Solidity se místo obvyklých tříd deklarují smlouvy. Existují knihovny pro psaní chytrých kontraktů jako: Open Zeppelin, Truffle. Knihovny vám umožňují vytvořit si vlastní coin (token) na základě hotových šablon, se všemi specifikacemi (ERC20) a bezpečnostními kontrolami (knihovna safemath).
Solidní smlouvy mohou po sobě dědit. To znamená, že funkce a proměnné smlouvy, ze které dědíme, budou dostupné ve smlouvě, která dědí. Solidity, stejně jako C++, má vícenásobnou dědičnost (ve tvaru diamantu).
kontrakt StandardToken je ER7C5F , BasicToken { mapování ( adresa => mapování ( adresa => uint256 )) povoleno ; // } contract MintableToken is StandardToken , Ownable { událost Mint ( adresa indexovaná na , částka uint256 ); událost MintFinished (); bool public mintingFinished = false ; modifikátor canMint () { required ( ! mintingFinished ); _ ; } // }Ukázkový program v jazyce Solidity [4] :
kontrakt GavCoin { mapování ( adresa => uint ) zůstatky ; uint konstanta totalCoins = 100000000000 ; /// Poskytne tvůrci smlouvy 1 mil. GAV. function GavCoin (){ zůstatky [ msg . odesílatel ] = celkemCoins ; } /// Odešle $((valueInmGAV / 1000).fixed(0,3)) GAV z účtu $(message.caller.address()) na účet přístupný pouze $(to.address()). function send ( adresa do , uint256 hodnotaInmGAV ) { if ( zůstatky [ odesílatel zprávy ] >= hodnotaInmGAV ) { zůstatky [ do ] + = hodnotaInmGAV ; zůstatky [ msg . odesílatel ] -= hodnotaInmGAV ; } } /// funkce getter pro funkci rovnováhy balance ( adresa kdo ) konstanta vrací ( uint256 balanceInmGAV ) { balanceInmGAV = zůstatky [ kdo ]; } };