Solidity

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

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

История

Язык был предложен в августе 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];
  }

};

Доступные платформы разработки

Примечания

  1. Release 0.8.4 — 2021.
  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. Архивировано 18 апреля 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.
  • Siraj Raval. Decentralized Applications. — «Apress», 2016. — С. 118. — ISBN 978-1-491-92454-9.
  • Акст Р. Что такое Смарт-контракт. или Ethereum за час. — 2017. — С. 19. — ISBN 978-5-4485-2907-8.
  • Равал С. Децентрализованные приложения. Технология Blockchain в действии. — 2017. — С. 240. — ISBN 978-5-496-02988-9.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.