Soliditet | |
---|---|
Sprog klasse | kontraktorienteret |
Dukkede op i | 2014 |
Frigøre |
|
Blev påvirket | JavaScript , C++ |
Licens | GNU GPL 3 |
Internet side | github.com/ethereum/solidity |
Solidity er et objektorienteret , domænespecifikt programmeringssprog [2] af selvudførende kontrakter til Ethereum -platformen .
Sproget blev foreslået i august 2014 af Gavin Wood [3] . Yderligere udvikling af sproget blev udført under ledelse af Christian Reitwiessner af Solidity-teamet som en del af Ethereum -projektet . Det er et af fire sprog, sammen med Serpent, LLL og Mutan, designet til at blive oversat til bytekoden på den virtuelle Ethereum -maskine . Er blevet udbredt med fremkomsten af blockchain-teknologier , især den Ethereum- baserede teknologistack, for at skabe smart kontraktsoftware .
Et statisk skrevet JavaScript-lignende programmeringssprog designet til at udvikle selvudførende kontrakter , der kører på den virtuelle Ethereum -maskine (EVM). Programmer oversættes til EVM bytecode. Giver udviklere mulighed for at skabe selvstændige applikationer, der indeholder forretningslogik, hvilket resulterer i irreversible blockchain -transaktionsposter .
Brugen af ECMAScript-syntaks, som tilsigtet af Wood, skulle hjælpe sproget til at blive adopteret af faktiske webudviklere. Men i modsætning til ECMAScript modtog sproget statisk indtastning af variabler og dynamiske typer returværdier. Sammenlignet med sprogene Serpent og Mutan kompileret til den samme bytekode, har sproget vigtige forskelle. Komplekse kontraktvariabler understøttes, herunder vilkårlige hierarkiske tilknytninger og strukturer. Kontrakter understøtter nedarvning, herunder multipel- og C3-linearisering . En binær programmeringsgrænseflade (ABI) understøttes, som har mange typesikre funktioner i hver kontrakt (optrådte efterfølgende også i Serpent). Specificeret et kodedokumentationssystem til brugerdefineret forklaring af rækkefølgen af opkald, kaldet Ethereum Natural Specification Format. I Solidity erklæres kontrakter i stedet for de sædvanlige klasser. Der er biblioteker til at skrive smarte kontrakter såsom: Open Zeppelin, Truffle. Biblioteker giver dig mulighed for at oprette din egen mønt (token) baseret på færdige skabeloner, med alle specifikationer (ERC20) og sikkerhedstjek (safemath-bibliotek).
Kontrakter i soliditet kan arve hinanden. Det betyder, at funktionerne og variablerne i den kontrakt, som vi arver fra, vil være tilgængelige i den kontrakt, der arver. Soliditet, ligesom C++, har multiple (rudeformet) arv.
kontrakt StandardToken er ER7C5F , BasicToken { mapping ( adresse => mapping ( adresse => uint256 )) tilladt ; // } kontrakt MintableToken er StandardToken , Ownable { hændelse Mint ( adresse indekseret til , uint256 beløb ); begivenhed MintFinished (); bool public mintingFinished = falsk ; modifier canMint () { require ( ! mintingFinished ); _ ; } // }Eksempelprogram i Solidity-sprog [4] :
kontrakt GavCoin { mapping ( adresse => uint ) saldi ; uint konstant totalCoins = 100000000000 ; /// Giver skaberen af kontrakten med 1m GAV. function GavCoin (){ saldi [ msg . afsender ] = totalCoins ; } /// Send $((valueInmGAV / 1000).fixed(0,3)) GAV fra kontoen til $(message.caller.address()), til en konto, der kun er tilgængelig for $(to.address()). function send ( adresse til , uint256 valueInmGAV ) { if ( balancer [ msg . sender ] >= valueInmGAV ) { balances [ to ] += valueInmGAV ; saldi [ meddelelse . afsender ] -= værdiInmGAV ; } } /// getter- funktion for balancefunktionen balance ( adresse hvem ) konstant returnerer ( uint256 balanceInmGAV ) { balanceInmGAV = saldi [ hvem ]; } };