Solidity — объектно-ориентированный, предметно-ориентированный язык программирования самовыполняющихся контрактов для платформы Ethereum.
История Язык был предложен в августе 2014 года Гэйвином Вудом (Gavin Wood). В дальнейшем разработка языка была выполнена под руководством Кристиана Райтвизнера (Christian Reitwiessner) командой Solidity в рамках проекта Ethereum. Это один из четырёх языков, наряду с Serpent, LLL и Mutan, спроектированных для трансляции в байт-код виртуальной машины Ethereum. Получил широкое распространение с появлением технологий блокчейна, в частности стека технологий на основе Ethereum, для создания программного обеспечения умных контрактов.
Описание Статически типизированный JavaScript-подобный язык программирования, создан для разработки самовыполняющихся контрактов, исполняющихся на виртуальной машине Ethereum (EVM). Программы транслируются в байткод EVM. Позволяет разработчикам создавать самодостаточные приложения, содержащие бизнес-логику, результирующую в неотменяемые транзакционные записи блокчейна.
Использование синтаксиса ECMAScript по замыслу Вуда должно помочь принятию языка действительными веб-разработчиками. Однако, в отличие от ECMAScript, язык получил статическую типизацию переменных и динамические типы возвращаемых значений. По сравнению с компилируемыми в такой же байт код языками Serpent и Mutan язык имеет важные отличия. Поддерживаются комплексные переменные контрактов, включая произвольные иерархические отображения (mappings) и структуры. Контракты поддерживают наследование, включая множественное и C3-линеаризацию. Поддерживается бинарный интерфейс программирования (ABI), имеющий множество типобезопасных функций в каждом контракте (впоследствии появился также и в Serpent). Специфицирована система документирования кода для пользовательского пояснения последовательности вызовов, получившая название «Спецификации на естественном языке Ethereum» (Ethereum Natural Specification Format) В Solidity вместо привычных классов объявляются контракты (contract). Существуют библиотеки для написания смарт-контрактов такие как: Open Zeppelin, Truffle. Библиотеки позволяют создать свою монету (токен) на основе готовых шаблонов, со всеми спецификациями (ERC20) и проверками на безопасность (библиотека safemath).
Контракты в solidity могут наследоваться друг на друга. Это значит, что функции и переменные контракта, от которого мы наследуемся, будут доступны в контракте, который наследует. В solidity, как и в C++, есть множественное (ромбовидное) наследование. contract StandardToken is ER7C5F, BasicToken {
mapping (address => mapping (address => uint256)) allowed; // } contract MintableToken is StandardToken, Ownable {
event Mint(address indexed to, uint256 amount);
event MintFinished();
bool public mintingFinished = false;
modifier canMint() { require(!mintingFinished); _;
// } Пример программы на языке 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];
Доступные платформы разработки Remix Microsoft Visual Studiohttp://rethink-iot.com/2016/04/01/hyperledger-blockchain-code-almost-comes-together-for-iot/ , accessed 23 April 2016. ConsenSys Enterprise
Примечания
Литература
Ссылки Solidity home and documentation Solidity source code Solidity browser-based compiler Руководство по Solidity Смарт-контракты Ethereum в основном пишутся на solidity writing Solidity test Getting started with Solidity development using Truffle Build Secure Smart Contracts in Solidity web3.js — Ethereum JavaScript API Remix documentation
Категория:Предметно-ориентированные языки программирования Категория:Ethereum