Solidity

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Solidity
Solidity logo.svg
Класс языка контрактно-ориентированный
Выпуск
Испытал влияние JavaScript, C++
Лицензия GNU GPL 3
Сайт github.com/ethereum/solidity

Solidity — объектно-ориентированный, предметно-ориентированный язык программирования[2] самовыполняющихся контрактов для платформы Ethereum.

История[править | править код]

Язык был предложен в августе 2014 года Гэйвином Вудом (Gavin Wood[3]). В дальнейшем разработка языка была выполнена под руководством Кристиана Райтвизнера (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 ERC20, 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);
    _;
  }
//  
}

Пример программы на языке 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];
  }

};

Доступные платформы разработки[править | править код]

Смарт-контракты разрабатывают и тестируют в браузерной IDE Remix. После этого смарт-контракт нужно деплоить в блокчейн Ethereum, то есть подключится к Ethereum testnet.

Примечания[править | править код]

  1. Release 0.7.0 — 2020.
  2. Solidity — Solidity 0.2.0 documentation. readthedocs.io.
  3. Benoit Schweblin. StackEdit Viewer. stackedit.io.
  4. RJ Catalano, one of the core developers, see VoR0220 on github
  5. Ethereum's Solidity Now Available in Microsoft Visual Studio. CCN: Financial Bitcoin & Cryptocurrency News. Дата обращения 1 мая 2016.
  6. http://rethink-iot.com/2016/04/01/hyperledger-blockchain-code-almost-comes-together-for-iot/ Архивная копия от 16 августа 2016 на Wayback Machine, accessed 23 April 2016.
  7. Microsoft Adds Ethereum to Windows Platform For Over 3 Million Developers. CoinDesk. Дата обращения 1 мая 2016.
  8. Allison, Ian Microsoft adds Ethereum language Solidity to Visual Studio. International Business Times (30 марта 2016). Дата обращения 11 мая 2016.

Литература[править | править код]

  • Chris Dannen. introducing Ethereum and Solidity: Foundations of Cryptocurrency and Blockchain Programming for Beginners. — 2017. — С. 256. — ISBN 978-5-8459-1349-4.
  • Акст Р. Что такое Смарт-контракт. или Ethereum за час. — 2017. — С. 19. — ISBN 978-5-4485-2907-8.
  • Равал С. Децентрализованные приложения. Технология Blockchain в действии. — 2017. — С. 240. — ISBN 978-5-496-02988-9.

Ссылки[править | править код]