Внимание, это розыгрыш! Пишем простой смарт-контракт
Писать умные контракты для Ethereum — не такая сложная задача, как может показаться. Чтобы рассказать тебе, как это делать, мы решили провести небольшой эксперимент. В этой статье описана разработка умного контракта, который разыгрывает трехмесячную подписку на «Хакер». Уcтановив клиент и запустив контракт, ты сможешь принять участие!
- Сегодня в эфире. Краткий экскурс в Ethereum
- Интервью: Виталик Бутерин о себе и о создании Ethereum
- Внимание, это розыгрыш! Пишем простой смарт-контракт
- Ставим Ethereum на Raspberry Pi
- Распределенное автономное ограбление. Как хакер разорил автоматическую корпорацию DAO
Начать лучше всего именно с запуска готового контракта — так будет намного проще понять, что к чему. Код ты можешь скачать с сeрвера Х и заглянуть внутрь. Он состоит из двух частей: одна — интерфейс на 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
, то доступ к переменной будет только внутри кoнтракта либо у унаследовaнного контракта.
Теперь описываем модификаторы (modifier
) функций. Они служат для проверки входных данных.
Извини, но продолжение статьи доступно только подписчикам
Подписка позволит тебе читать ВСЕ платные материалы сайта, включая эту статью, без каких-либо ограничений. Мы принимаем банковские карты, Яндекс.Деньги и оплату со счетов мобильных операторов. Подробнее о проекте
1 год2700 Р Экономия 1400 рублей! |
1 месяц400 Р |
Уже подписан?
Читайте также
- Ошибка в API Facebook предоставляла доступ к фото 6,8 млн пользователей
- Одного ноутбука оказалось достаточно для компрометации всей корпоративной сети
- Депутаты Госдумы разработали план по обеспечению работы Рунета на случай отключения от Сети
- Морские суда часто подвергаются кибератакам
- 25 декабря состоится встреча сообщества специалистов по кибербезопасности АСУ ТП / RUSCADASEC
- Уязвимость в приложении Logitech позволяла удаленно инициировать нажатие клавиш