Solidity

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

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

История

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

Пример программы на языке Solidity[5]:

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

Ссылки

  • 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