Solidity
Solidity — об'єктно-орієнтована та предметно-орієнтована мова програмування[2] розумних контрактів для платформи Ethereum.
Solidity | |
---|---|
Парадигма | об'єктно-орієнтована |
Дата появи | 2014 |
Останній реліз | 0.8.4 (21 квітня 2021)[1] |
Система типізації | статична |
Під впливом від | JavaScript, C++ |
Ліцензія | GNU General Public License, version 3.0d |
Репозиторій вихідного коду | github.com/ethereum/solidity |
Вебсайт | solidity.readthedocs.io |
Історія
Мова була запропонована в серпні 2014 року Гейвіном Вудом (Gavin Wood[3]). Надалі розробка мови була виконана під керівництвом Крістіана Райтвизнера (Christian Reitwiessner) командою Solidity в рамках проєкту Ethereum. Це одна з чотирьох мов (три інші: Serpent, LLL і Mutan), спроєктованих для трансляції в байт-код віртуальної машини Ethereum. Отримала широке поширення з появою технологій блокчейну, зокрема стека технологій на основі Ethereum, для створення програмного забезпечення розумних контрактів.
Опис
Solidity — статично типізована JavaScript-подібна мова програмування, створена для розробки розумних контрактів, які працюють на віртуальній машині Ethereum (EVM). Програми на мові Solidity транслюються в байткод EVM. Solidity дозволяє розробникам створювати самодостатні програми, що містять бізнес-логіку, результуючу в транзакційні записи блокчейну.
Використання синтаксису ECMAScript за задумом Вуда має допомогти прийняттю мови дійсними веброзробниками. Однак, на відміну від ECMAScript, мова отримала статичну типізацію змінних і динамічні типи значень. Порівняно з компільованими в такий же байт-код мовами Serpent і Mutan, мова Solidity має важливі відмінності. Підтримуються комплексні змінні контрактів, включаючи довільні ієрархічні відображення (mappings) і структури. Контракти підтримують спадкування, включаючи множинне і C3-лінеаризацію. Підтримується бінарний інтерфейс програмування (ABI), що має безліч типобезпечних функцій в кожному контракті (пізніше з'явився також і у Serpent). Специфікована система документування коду, для пояснення послідовності викликів, що отримала назву «Специфікації природною мовою Ethereum» (Ethereum Natural Format Specification).
Приклад програми на мові Solidity[4]:
contract GavCoin
{
mapping(address=>uint) balances;
uint constant totalCoins = 100000000000;
/// Endows creator of contract with 1m GAV.
function GavCoin(){
balances[msg.sender] = totalCoins;
}
/// Send $((valueInmGAV / 1000).fixed(0,3)) GAV from the account of $(message.caller.address()), to an account accessible only by $(to.address()).
function send(address to, uint256 valueInmGAV) {
if (balances[msg.sender] >= valueInmGAV) {
balances[to] += valueInmGAV;
balances[msg.sender] -= valueInmGAV;
}
}
/// getter function for the balance
function balance(address who) constant returns (uint256 balanceInmGAV) {
balanceInmGAV = balances[who];
}
};
Доступні платформи розробки
- Microsoft Visual Studio[5][6]
- ConsenSys Enterprise[7]
Примітки
- Release 0.8.4 — 2021.
- Solidity — Solidity 0.2.0 documentation // readthedocs.io.
- StackEdit Viewer / Benoit Schweblin // Stackedit.io.
- RJ Catalano, one of the core developers, see VoR0220 on github
- Ethereum's Solidity Now Available in Microsoft Visual Studio // CCN: Financial Bitcoin & Cryptocurrency News. — Дата звернення: 1 травня 2016.
- Microsoft Adds Ethereum to Windows Platform For Over 3 Million Developers // CoinDesk. — Дата звернення: 1 травня 2016.
- Microsoft adds Ethereum language Solidity to Visual Studio / Ian Allison. — International Business Times, 2016. — 30 March.