Писать умные контракты для Ethereum — не такая сложная задача, как может показаться. Чтобы рассказать тебе, как это делать, мы решили провести небольшой эксперимент. В этой статье описана разработка умного контракта, который разыгрывает трехмесячную подписку на «Хакер». Установив клиент и запустив контракт, ты сможешь принять участие!

Начать лучше всего именно с запуска готового контракта — так будет намного проще понять, что к чему. Код ты можешь скачать с сервера Х и заглянуть внутрь. Он состоит из двух частей: одна — интерфейс на JSON, вторая — собственно код контракта на языке Solidity.

А теперь разберем наш контракт по частям.

 

Погружение

Вот самое начало:

contract HackerLottery {
  struct Participant {
    string nickname;
    string email;
  }

  Participant[] public participantsProfile;
  mapping(address => uint) participantsIDs;
  address public owner;
  string public lotteryName;
  string public lotteryDescription;
  uint public registeredTo;
  int public winnerID;
}

int и uint — это типы для целых чисел со знаком и без знака. Они могут иметь размер от 8 до 256 бит с шагом 8 бит (uint32 — целое число без знака длиной 32 бита). Собственно, uint и int — псевдонимы для uint256 и int256 соответственно. В таких переменных мы храним время, до которого продлится розыгрыш (unix time), а также идентификатор победителя.

address — тип длиной 20 байт (160 бит), который предназначен для работы с адресами. Мы храним адрес создателя контракта, чтобы только он имел возможность вызывать некоторые функции.

string — массив, динамично изменяемая строка в юникоде. В lotteryName и lotteryDescription мы храним название и описание лотереи.

mapping — словарь, содержит пары ключ — значение. В participatnsIDs мы храним адреса и уникальные идентификаторы участников для того, чтобы с указанного аккаунта можно было зарегистрироваться только один раз.

struct — с помощью структур мы можем создавать свои кастомные переменные, в данном случае мы храним в массиве participantsProfiles никнейм и почту каждого участника.

public — позволяет читать значение внешнему контракту или клиенту. Если указать private, то доступ к переменной будет только внутри контракта либо у унаследованного контракта.

Теперь описываем модификаторы (modifier) функций. Они служат для проверки входных данных.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


1 комментарий

  1. Pefym

    19.09.2017 at 15:18

    где можно почитать как запустить этот замечательный контракт в реальный блокчейн?

Оставить мнение

Check Also

10 научно-фантастических комиксов для тех, кто не читает комиксы и не любит супергероев

В то время как фильмы по комиксам бьют все возможные рекорды кассовых сборов, сами комиксы…