Solidity — об'єктно-орієнтована та предметно-орієнтована мова програмування розумних контрактів для платформи Ethereum.

Історія Мова була запропонована в серпні 2014 року Гевіном Вудом. Надалі розробка мови була виконана під керівництвом Крістіана Райтвизнера (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).

Приклад програми на мові SolidityRJ Catalano, one of the core developers, see VoR0220 on github: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 ConsenSys Enterprise

Примітки

Посилання Solidity home and documentation Solidity source code Solidity browser-based compiler