Хочу всё знать. Язык Solidity

Язык для создания смарт-контрактов.
14 сентября 2017326451Илья Бубнов133717

В продолжении темы блокчейна и криптовалюты поговорим о языках, которые применяются в этой отрасли. Большинство из них - общеизвестные представители: Java, C/C++, Python, Ruby и т.д. С их помощью описываются общие интерфейсы и протоколы. Однако есть узкоспециальные задачи, где использование популярных языков неэффективно. Примером являются смарт-контракты и язык Solidity для платформы Ethereum.

Эфир и смарт-контракт

Эфириум — децентрализованная платформа, виртуальная машина для размещения онлайн-сервисов. Базируется она на технологии блокчейна, её преимущество в замене стандартных юридических сделок смарт-контрактами.

Смарт-контракт — договор, описанный математическими методами, не предполагающий двоякой трактовки. Таким образом, неисполнение одной из сторон условий контракта неизбежно приводит к штрафным санкциям без возможности перевести дело в правовое поле.

Теперь перейдем непосредственно к языку.

Краткая справка

Solidity — JavaScript-подобный объектно-ориентированный язык для разработки смарт-контрактов. Является кроссплатформенным, но на практике используется преимущественно на Ethereum.

Был создан в 2014 году командой программистов под руководством Кристиана Райтвизнера на основе идеи Гевина Вуда. Похожесть синтаксиса на JavaScript — расчет на быструю адаптацию разработчиков, которые до этого на нем разрабатывали подобные протоколы. Solidity поддерживает наследование, в том числе множественное, в том числе с С3 линеаризацией.

В рейтинге TIOBE язык появился лишь в прошлом месяце, стартовав со 167 места.

Синтаксис

В сравнении с JS есть пара существенных отличий:

  • Solidity — статически типизированный язык, динамическими являются только возвращаемые типы.
  • Полноценной версии языка не вышло (текущая — 0.4.16), поэтому многие функциональность пока в урезанном виде, а количество багов достаточно велико.

Однако с поставленными задачами Solidity справляется, а визуально это все тот же ECMAScript:

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];
 }
}

Среды разработки и редакторы

Несмотря на узкий профиль применения, Solidity доступен для большого числа IDE и редакторов. Вот список:

Некоторые поддерживают язык из коробки, к другим надо прикрутить его в виде плагина.

Как изучать

Официальных книг по Solidity пока не выходило, поэтому обучаться языку лучше всего по официальному релизу. Также есть платный образовательный 3-часовой курс на Udemy.

Для тех, кто пока не силен в английском, но очень хочет быть в теме, дорога одна — на Хабрахабр (1, 2, 3). Также есть подробный туториал на проекте Голос, правда, пока только один урок.

Кроме того, тема привлекает всё новых авторов, вебинары и статьи в личных блогах появляются достаточно часто. Периодически проверяйте популярные платформы и будете в курсе развития и применения языка.

Перспективы

Solidity — один из четырех языков для EVM (три других: Serpent, LLL и Mutan) и, пожалуй, самый проработанный. Капитализация Ethereum достигла 4 миллиардов долларов США всего за 2 года. Исходя из этих фактов, Solidity ждёт светлое будущее, как для самого языка, так и для разработчиков, которые его изучат.