«Как написать смарт контракт?» — этот вопрос с развитием технологии умных контрактов все чаще и чаще начинает интересовать не только технических специалистов, но и тех, кто хотел бы научиться использовать данную технологию в своих целях. С сегодняшнего дня мы запускаем цикл статей, в которых будем рассматривать те или иные способы создания смарт-контрактов. Сразу следует оговориться, что для освоения данной процедуры потребуются некоторые базовые знания языка программирования JavaScript.
Прежде чем начать разговор о смарт-контрактах, необходимо узнать и понять, что такое умные контракты и как их можно использовать, для этого достаточно ознакомиться с одной из наших статей на эту тему.
Смарт контракты etherium могут составляться на различных языках, но мы будем использовать solidity, который считается одним из наиболее популярных языков, применяемых для подобных задач.
Прочитав первую статью из цикла, вы:
- Узнаете, что такое solidity.
- Познакомитесь с рабочей средой Remix.
- Попробуете составить свой первый смарт-контракт.
- Научитесь запускать смарт-контракт в тестовой среде.
В качестве основной рабочей среды будем использовать Remix, так как он является довольно простым для освоения и работает прямо из браузера.
Элементы в окне располагаются следующим образом: слева – файлы, справа – инструменты, по центру – рабочая область, куда вписывается код.
Первый смарт-контракт, который мы напишем, будет иметь приветственный характер и по традиции выведет надпись: «Hello, world!»
1 2 3 4 5 6 7 8 9 | pragma solidity ^0.4.13; contract HelloWorld { function getData() constant returns (string) { return «Hello, world!»; } } |
Введите вышеуказанный код в среду Remix, затем следуйте несложным правилам:
- Перейдите на вкладку «compile» в правой панели.
- Нажмите «start compile»
- Перейдите на вкладку «run»
- В поле «Environment» выберете «JavaScript VM» (название тестовой среды, в которой будут выполняться контракты).
- В списке контрактов выберете тот, который будете заливать. В данной ситуации – HelloWorld.
- Нажмите «create», чтобы создать контракт Ethereum.
Все эти действия необходимо выполнять каждый раз, когда вы хотите создать новый контракт.
После вышеописанных действий правая панель должна принять следующий вид:
Теперь контракт готов к выполнению. Нажмите на «getData» и на экране появится следующее:
Итак, на экране мы видим строку приветствия, которую указали ранее: «Hello, world!»
Таким образом, мы прошли первый этап и теперь знаем, как написать смарт контракт и запустить его.
Обратимся к коду и более подробно разберем его сущность.
В самой первой строчке кода указывается язык и его версия: solidity 0.4.13.
1 | pragma solidity ^0.4.13; |
Тем, кто знаком с ООП в кодинге, программирование смарт-контракта напомнит прописывание класса:
1 2 3 4 5 | contract Имя_контракта { код контракта } |
Сам код контракта содержит всего одну функцию, которая возвращает строку. Соответственно, она описывается следующим образом:
1 2 3 4 | function имя_функции(входные_параметры) constant returns (тип_возвращаемого_значения) { код_функции return значение; } |
Отметим, что само слово constant указывать не обязательно, но если функция не влияет на внутреннее состояние контракта, то рекомендуется это сделать.
Если же функция ничего не возвращает, то можно убрать все, что прописано после ее названия:
1 2 3 | function имя_функции(входные_параметры) { код_функции } |
Если же функция ничего и не принимает на вход, то мы также можем убрать входные параметры:
1 2 3 | function имя_функции() { код_функции |
Также контракты могут содержать переменные.
Без значения:
1 | тип_переменной имя_переменной; |
Со значением:
1 | тип_переменной имя_переменной = значение_переменной; |
Более подробно о типах переменных будем говорить по мере возникновения такой необходимости.
Теперь сделаем так, чтобы контракт сохранял строку приветствия в переменной wellcomeString с типом string. Для этого дополняем код следующим образом:
1 2 3 4 5 6 7 8 9 10 11 | pragma solidity ^0.4.13; contract HelloWorld { string wellcomeString = «Hello, world!»; function getData() constant returns (string) { return wellcomeString; } } |
Немного отредактируем наш контракт таким образом, чтобы строку приветствия можно было изменять.
После этого у нас должна появиться новая функция «setData», принимающая на вход новую строку приветствия и присваивает ее wellcomeString.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | pragma solidity ^0.4.13; contract HelloWorld { string wellcomeString = «Hello, world!»; function getData() constant returns (string) { return wellcomeString; } function setData(string newData) { wellcomeString = newData; } } |
Теперь можно заливать контракт в сеть. На правой панели рабочей области должно появиться две кнопки: «getData» и «setData». Они соответствуют функциям, прописанным в коде.
Напишите в строке рядом с setData какое-нибудь слово в двойных кавычках. Например «wellcome» и нажмите на кнопку setData, а после — getData. Если все вышеописанные действия были осуществлены правильно, то getData вернет вашу строку.
На этом вводный урок, посвященный тому, как написать смарт контракт, завершён. На последующих уроках (то есть в следующих статьях) мы подробнее рассмотрим процесс написания более сложных контрактов.