Писать умные контракты для 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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

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


Check Also

Крипта без эмоций. Ищем здравый смысл в криптовалютной шумихе

Криптовалюты то входят в моду, то кажутся полным разочарованием. Кто-то делает на них милл…

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

  1. Аватар

    Pefym

    19.09.2017 at 15:18

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

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