Хочу всё знать. Язык Solidity
В продолжении темы блокчейна и криптовалюты поговорим о языках, которые применяются в этой отрасли. Большинство из них - общеизвестные представители: 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 и редакторов. Вот список:
- Remix;
- IntelliJ IDEA;
- Microsoft Visual Studio;
- Sublime Text;
- Etheratom;
- Solium;
- Emacs;
- Vim Syntastic;
- Ethereum Studio;
- Atom Solidity Linter.
Некоторые поддерживают язык из коробки, к другим надо прикрутить его в виде плагина.
Как изучать
Официальных книг по Solidity пока не выходило, поэтому обучаться языку лучше всего по официальному релизу. Также есть платный образовательный 3-часовой курс на Udemy.
Для тех, кто пока не силен в английском, но очень хочет быть в теме, дорога одна — на Хабрахабр (1, 2, 3). Также есть подробный туториал на проекте Голос, правда, пока только один урок.
Кроме того, тема привлекает всё новых авторов, вебинары и статьи в личных блогах появляются достаточно часто. Периодически проверяйте популярные платформы и будете в курсе развития и применения языка.
Перспективы
Solidity — один из четырех языков для EVM (три других: Serpent, LLL и Mutan) и, пожалуй, самый проработанный. Капитализация Ethereum достигла 4 миллиардов долларов США всего за 2 года. Исходя из этих фактов, Solidity ждёт светлое будущее, как для самого языка, так и для разработчиков, которые его изучат.