Создаем первый смарт-контракт на Ethereum менее чем за 60 минут

Блокчейн представляет собой децентрализованную систему, существующую благодаря множеству объединенных в сеть компьютеров. Поэтому одно из его главных достоинств — то, что вы можете не платить посредникам и экономить свое время и нервы.

У блокчейна есть свои недостатки, но он быстрее, надежнее и безопаснее традиционных систем, и поэтому банки и правительственные организации все чаще используют эту технологию для своих нужд. Принцип работы блокчейна показан на инфографике:

Принцип работы блокчейна

В 1994 году Ник Сабо, специалист в области права и криптограф, понял, что с помощью децентрализованного реестра можно заключать «умные контракты», которые также называют самоисполняемыми, цифровыми или смарт-контрактами.

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

Что такое умные контракты?

Умные контракты позволяют обмениваться деньгами, собственностью, акциями или другими активами, не прибегая к услугам посредников.

Для того, чтобы заключить обычную сделку, нужно пойти к юристу или нотариусу, заплатить и дождаться оформления документов. Умные контракты работают как торговые автоматы: вы просто бросаете в автомат (то есть в реестр) биткоин, и хранившийся у третьего лица контракт, водительские права или любая другая услуга, которую вы заказывали, падает на ваш счет.

Кроме того, в отличие от традиционных соглашений, умные контракты не только содержат информацию об обязательствах сторон и штрафах за их нарушение, но и сами автоматически обеспечивают выполнение всех условий договора.

Умный контракт (англ. Smart contracts) — электронный алгоритм, описывающий набор условий, выполнение которых влечет за собой некоторые события в реальном мире или цифровых системах. Для реализации умных контрактов требуется децентрализованная среда, полностью исключающая человеческий фактор, а для возможности использования в умном контракте передачи стоимости требуется криптовалюта. Определение Википедии.

Работа смарт контрактов - упрощенная схема

На недавнем блокчейн-саммите в Вашингтоне Виталик Бутерин, 23-летний программист и создатель проекта Ethereum, объяснил, что в умном контракте актив или валюта переводятся в программу, которая следит за соблюдением заложенного набора условий.

В определенный момент эта программа подтверждает выполнение условия контракта и автоматически определяет, должен ли указанный актив перейти к одному из участников сделки или немедленно вернуться к другому участнику (а может быть, условия несколько сложнее). Все это время документ хранится и дублируется в децентрализованном реестре, что обеспечивает его надежность и не позволяет ни одной из сторон менять условия соглашения.

Рассмотрим конкретный пример смарт контракта

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

Пример умного контракта

Образец умного контракта, написанного на платформе Ethereum. Источник: www.ethereum.org/token

Здесь говорится, что создатель контракта должен получить 10 тыс. биткоинов. Этот контракт позволяет любому, у кого достаточно средств на счете, перевести биткоины другим людям.

Что такое хайпы на смарт контрактах

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

Принцип их работы выглядит следующим образом:

Админ создает smart contract и прописывает в нем, как будут распределяться средства. Обычно небольшая часть из них уходит создателю, немного больше тратится на рекламу, а остальное постепенно возвращается инвесторам. Вкладчики переводят средства на кошелек, привязанный к контракту, и через определенный период получают обратно начисленные проценты.

Хайпы на смарт контрактах мало похожи на традиционные проекты. Отличия видны невооруженным взглядом:

  1. Нет легенды. Админ прямо заявляет, что проект — hyip. Ставка делается на честность, ведь за распределением средств может смотреть каждый.
  2. Примитивный интерфейс. Иногда он и вовсе отсутствует, поскольку в нем нет необходимости. Все операции осуществляются путем взаимодействия двух криптовалютных кошельков.
  3. Принимают только криптовалюту. Причем только ту, что позволяет платформа. Чаще всего проекты используют блокчейн эфириума, поэтому платежи принимают тоже в нем.

Плюсы и минусы

Преимущества:

  1. Надежность. Блокчейн Ethereum, на котором создана большая часть контрактов, невозможно взломать. Получается, что касса хайпа защищена от хакеров и мошенников.
  2. Прозрачность. Статистика в традиционном хайпе может не отражать реальной картины происходящего. Скорее всего, она просто «нарисована» админом. Блокчейн же позволяет просматривать транзакции: любой инвестор способен наблюдать за тем, как пополняется касса проекта.
  3. Автономность. Проект ни от кого не зависит. Даже админ не может соскамить хайп, украв из него все деньги.
  4. Стабильность. Условия распределения средств прописаны заранее. Владелец хайпа не сможет изменить тарифные планы или расходы на рекламу. Это исключает «закидон» и обеспечивает плавное развитие проекта.

Недостатки:

  1. Прозрачность. Да, это не только плюс, но и минус. Даже кратковременный отток капитала может спровоцировать панику среди вкладчиков. Деньги перестанут поступать в проект, а появившиеся негативные отзывы лишь усугубят положение.
  2. Слабое развитие. Обычно процент рекламных отчислений фиксирован, и со временем средств на проведение PR-кампании будет не хватать. Однако даже если админ запланирует увеличение процентной ставки, дополнительные платежки у него подключить не получится. Этот факт отсекает огромный пласт платежеспособной аудитории.
  3. Требовательность к опыту админа. После создания контракта изменить его условия уже нельзя. Если администратор допустил ошибку и установил неправильные инвестиционные планы, то скам наступит очень быстро.
  4. Риск нарваться на дыры в коде. Они могут быть как случайными, так и специально встроенными. В первом случае средства могут увести хакеры, а во втором потихоньку воровать деньги будет сам админ.

Практическое применение умных контрактов

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

Выборы

По мнению экспертов, сфальсифицировать итоги выборов практически нереально, однако благодаря умным контрактам можно полностью исключить возможность внешнего вмешательства в систему голосования.

В таком случае голоса избирателей будут помещены в распределенный реестр, и для их декодирования потребуется исключительные вычислительные возможности. Таких компьютеров не существует, так что взломать эту систему будет невозможно.

Менеджмент

Блокчейн не только предлагает надежный и прозрачный общий реестр, но и помогает избежать недопонимания при совместной работе или ситуаций, когда стороны составляют контракты независимо друг от друга.

Логистика и снабжение

Разработчик протокола Bitcoin Core Джефф Гарзик говорит:

«UPS может исполнять контракты, в которых будет сказано: “Если мы получим оплату за доставку товара, то его производитель, который в цепочке поставок находится на много звеньев выше, немедленно начнет создавать новый такой товар, поскольку этот уже доставлен по назначению”».

Снабжение слишком часто страдает из-за бюрократии, когда разные формы должны пройти утверждение в многочисленных инстанциях. Из-за этого мошенники получают возможность заработать, а компании несут убытки. Блокчейн позволяет избежать этих проблем, так как каждый участник цепочки поставок получает доступ к безопасной электронной системе, которая контролирует выполнение работ и платежи.

Так, банк Barclays Corporate Bank использует умные контракты для того, чтобы регистрировать переход права собственности и автоматически перечислять платежи в другие кредитно-финансовые учреждения.

Автомобили

Задумайтесь о будущем, где все будет автоматизировано. Google уже строит его, создавая умные телефоны, умные очки и даже умные автомобили. И здесь на помощь придут умные контракты.

Возьмем, например, самоуправляемые или самопаркующиеся автомобили. Умные контракты будут определять, кто виновен в аварии: датчик или водитель, а также помогут при разрешении любых других ситуаций. С помощью умных контрактов страховые компании могут устанавливать размер взносов в зависимости от того, где и при каких условиях водители управляют транспортными средствами.

Другие сферы

Другие индустрии, такие как эквайринг, кредитование и бухгалтерский учет, тоже будут использовать умные контракты — например, для оценки рисков и аудита в режиме реального времени. Юристы смогут перейти от составления традиционных контрактов к созданию типовых образцов умных контрактов. А на сайте Blockchain Technologies умные контракты превратились в электронно-бумажный гибрид: они подтверждаются блокчейном и получают материальное воплощение в виде бумажной копии.

Как работают умные контракты

Патрик Хаббард, главный специалист и старший управляющий маркетингом продуктов в SolarWinds:

«Янгонская фондовая биржа в Мьянме производит платежи с помощью распределенного реестра. Особый интерес вызывают те функции блокчейна, которые выходят за рамки традиционного использования технологии. Так на Янгонской бирже удалось решить проблему производимых в разное время расчетов в торговой системе, которая синхронизирует торги всего лишь дважды в день. Благодаря тому, что умные контракты сами обеспечивают исполнение сделок, блокчейны с их надежной системой проведения транзакций могут использоваться в ситуациях, где требуется выполнение сложных операций, зависящих от разных изменяющихся факторов. Вот почему Amazon, Microsoft Azure и IBM Bluemix уделяют такое внимание разработке облачной технологии “блокчейн как услуга”».

Как выбирать хайпы на смарт контрактах

Посмотрите код

Коды смарт контрактов бывают двух видов:

  • открытые,
  • закрытые.

Инвестировать в проекты с закрытым кодом нельзя ни в коем случае. Администрация может рассказывать красивые истории о том, что алгоритм распределения средств является уникальным, и они не хотят показывать его конкурентам. Не верьте этому.

Поймите простую истину: если код закрыт, то никто кроме админа не знает, что в нем написано. Там могут быть дыры или уязвимости, которые приведут к потере Вашего депозита.

Открытый код может посмотреть любой. Конечно, простой инвестор вряд ли поймет, что в нем написано, поскольку он выглядит примерно так:

хайпы на смарт контрактах, пример кода

Однако оценить программную составляющую могут специальные компании, занимающиеся аудитом. Поэтому его наличие обязательно.

Если хайп принимает эфириум, узнать тип кода можно при помощи сайта Etherscan. Наверху главной страницы расположена поисковая строка.

хайп на смарт контракте проверка подлинности

В нее необходимо вбить адрес смарт контракта (обычно указан на сайте проекта), на который Вам предлагают переслать деньги. В открывшемся окне напротив адреса должна быть надпись «Contract». Кроме того, рядом с соответствующим пунктом меню, что располагается немного ниже, должна стоять зеленая галочка.

проверка подлинности смарт контракта

Важно: если надписи «Contract» нет, перед Вами обычный Ethereum кошелек. Переведенные деньги поступят админу, который будет распоряжаться ими по своему усмотрению.

После нажатия вкладки «Contract» на экране появится информация о контракте. Если Вы видите код, то все в порядке.

открытый код смарт контракта

В противном случае содержимое контракта закрыто от посторонних лиц. Инвестировать в него не стоит.

Проверьте наличие аудита

Открытый код — хороший знак. Однако вряд ли Вы поймете в нем хоть что-то. Остается полагаться на мнение специалистов, которые проведут публичный аудит и вынесут свой вердикт по проекту.

Аудит — проверка смарт контракта на изъяны и честность. Его могут заказывать сами админы для привлечения инвесторов и повышения уровня доверия к проекту. Также аудитами занимаются независимые студии. Например CryptoManiacs, которые постоянно выкладывают видео на youtube.

Если Вы хотите понять, как хайпы на смарт контрактах проходят аудит, обязательно посмотрите один из их роликов:

Запомните: инвестируйте только в проекты, прошедшие проверку. В противном случае никто не обезопасит Вас от потери средств.

Оцените маркетинг

Внимание нужно обращать на два фактора:

  • процент выплат,
  • политику распределения средств.

Чем больше проект платит, тем быстрее Вы сможете окупить вложения. Однако просуществует он гораздо меньше, поэтому входить в такой хайп нужно с самого начала.

Распределение средств скажет о том, как будет развиваться проект. По типу распределения хайпы на смарт контрактах бывают двух видов:

  1. 100% средств возвращается участникам. Админ вступает в проект первым, поэтому получает прибыль от реферальной программы. Чаще всего используется в матричных млм играх. Однако такие хайпы живут недолго: без рекламного бюджета поддерживать постоянный приток инвесторов тяжело.
  2. Часть уходит на вознаграждение админу и дополнительные расходы: рекламу, комиссии при переводах, техническую поддержку и т.д. Обычно проекты с такой системой распределения живут заметно дольше.

хайпы на смарт контрактах маркетинг

Запомните: оптимальный вариант — инвестировать в хайп со вторым типом распределения и умеренным вознаграждением.

4. Узнать срок работы и текущий баланс

Как и все пирамиды, хайпы на смарт контрактах работают по схеме Понци. Иначе говоря, деньги старым вкладчикам выплачиваются за счет новых поступлений. В какой-то момент они прекратятся, поэтому чем раньше Вы зайдете в проект, тем выше шансы на получение прибыли.

Важно: при оценке срока жизни учитывайте маркетинг. Для хайпа, обещающего 50% в сутки, три дня — серьезный срок. Для проекта с ежедневными начислениями 0,5%, это лишь разминка.

При оценке баланса можно использовать все тот же Etherscan. Вбейте в поисковую строку адрес контракта и нажмите на вкладку аналитика, что находится снизу. Там же содержится информация о транзакциях, поступивших на этот кошелек.

хайпы на смарт контрактах: динамика вкладов

В случае, если проект работает с другими криптовалютами, Вам поможет сайт scmonit. Здесь можно посмотреть всю статистику по высокорисковым проектам на блокчейне.

хайпы на смарт контрактах, сайт scmonit

Выбирайте хайпы, касса в которых стабильно растет. Кроме того, обратите внимание на количество транзакций. Лучше увидеть несколько мелких переводов, чем пару больших. В проектах с контрактами главное — число пользователей, а не объем внесенных ими средств.

5. Понаблюдайте за действиями админа

Именно действия админа определяют успех проекта. Да, он не может изменить условия смарт контракта, но именно он занимается рекламой и продвижением хайпа.

Реклама в хайпах — двигатель прогресса. Без нее даже самый честный проект соскамится через несколько дней. Однако и переизбыток пиара вреден: большой приток инвесторов на старте неизбежно приведет к закидону. Касса будет вымываться слишком быстро и hyip прекратит свое существование.

Следите за тем, чтобы рекламная кампания была плавной. Хороший знак, если админ купил листинг на паре хайп мониторингов и постепенно наращивает обороты. В противном случае воздержитесь от инвестиций.

Плюсы смарт контрактов

Если рассматривать смарт-контракты при использовании в разных сферах жизнедеятельности, то можно выделить ряд важных преимуществ. Среди плюсов:

  • независимость — больше не нужно прибегать к услугам посредников для заключения сделок,
  • безопасность — смарт-контракт находится в распределенном реестре, его условия нельзя изменить,
  • экономия — избавляясь от посредников, стороны умного контракта могут сотрудничать на более выгодных условиях,
  • отсутствие издержек — в случае выполнения условий контракты, стороны сразу обмениваются активами.

Плюсы умных контрактов - инфрграфика

Как работать с хайпами на смарт контрактах

Мало выбрать качественный проект, нужно уметь с ним работать. Итак, для инвестирования в хайпы на смарт контрактах Вам понадобится:

  • криптовалютный кошелек,
  • дополнительные сервисы.

С кошельком все просто: заводите любой понравившийся. Главное — не используйте кошельки криптовалютных бирж. Они не предназначены для повторяющихся однотипных транзакций. Во-первых, администрация может заблокировать Ваш аккаунт за подозрительную активность. Во-вторых, адреса на биржах меняются. Необходимо будет постоянно менять кошельки, а смарт контракт такой возможности не дает.

Из дополнительных сервисов понадобятся:

  1. Сайт для отслеживания транзакций — Etherscan.
  2. Сайт для мониторинга газа — Ethgasstation.
  3. Обменник для покупки крипты (если кошелек пуст).

Читайте подробнее: как купить криптовалюту?

После подготовки остается только внести депозит. Для этого понадобится отправить нужное количество крипты на кошелек умного контракта. При этом размер комиссии Вы указываете самостоятельно.

Важно: не жадничайте и устанавливайте адекватную комиссию. В противном случае перевод может идти несколько суток. За это время хайп может соскамиться или вступить в заключительную фазу своего развития.

Вывод в хайпах на смарт контрактах может быть автоматическим или ручным. В первом случае никаких действий Вам предпринимать не придется. При ручном выводе необходимо подать заявку: отправить на адрес смарт контракта 0 ETH. После ее обработки средства поступят на Ваш кошелек. Процедуру нужно будет повторять каждый раз.

Минусы умных контрактов

Умные контракты далеки от совершенства. Что если в код попадут ошибки? Как должно регулировать эти контракты государство? И как оно будет взимать налоги с таких транзакций?

Список возможных проблем этим не ограничивается. Специалисты пытаются решить все вопросы, но подобные трудности отталкивают многих возможных пользователей.

Умные контракты нельзя назвать идеальным инструментом для построения взаимоотношений между людьми. У них тоже есть несколько недостатков. Среди минусов:

  • правовой статус — для работы умных контрактов, используется криптовалюта, а ее пока не принимают в качестве официального финансового инструмента,
  • ошибки — для составления умного контракта нужно прописывать всевозможные условия и варианты развития сделок, чем сложнее процесс, тем труднее создать смарт-контракт,
  • отсутствие понимания — большинство пользователей пока слабо понимают, что собой представляют смарт-контракты.

Несмотря на вышеперечисленные недостатки, умные контракты имеют высокий потенциал закрепиться в нашей жизни в будущем. Они станут все чаще использоваться по мере того, как вещи будут подключаться к интернету.

Резюме

Появление хайпов на смарт контрактах – это большой шаг в развитии хайп-индустрии. Это новые возможности как для админов, так и для инвесторов, которые пока еще не оценены по достоинству. Не многие проекты, построенные на умных контрактах, смогли показать себя с хорошей стороны, но при грамотном управлении такие фонды способны на многое.

Думаю, что в будущем развитие в этом направлении обязательно будет идти и с ростом числа пользователей криптовалюты мы увидим все больше новых и интересных хайпов на смарт-контрактах.

Денис HyipHunter Князев

Создатель блога. Частный инвестор. Зарабатывает в высокодоходных инвестиционных проектах и криптовалютах с 2014 года. Консультирует партнеров. Присоединяйтесь в телеграм канал блога и наш чатик.

Не пропустите и другие статьи из этой рубрики:

  • 11.06.20203790

    Пассивный доход в интернете: идеи, виды

  • 07.06.202012707

    Что такое рефбек (бонус от вклада)?

  • 06.06.202011997

    Способы как привлечь рефералов в хайп проект

  • 07.06.20204433

    Верификация в хайпах и рекомендация по ней

  • 28.07.202065526

    Мониторинг хайп проектов 2020

  • 28.07.20208218

    Куда выгодно вложить деньги в 2020 году под проценты

Блокчейны, где можно заключить умные контракты?

Ethereum: Открытая блокчейн-платформа, которая лучше всего подходит для написания умных контрактов и работы с ними. Вы можете составить любую программу, однако за вычислительные ресурсы платформы надо будет заплатить монетами ETH.

NXT: Это открытая блокчейн-платформа с ограниченным числом образцов умных контрактов. Вы можете использовать только то, что там есть, написать свой код нельзя.

Bitcoin: Отличный блокчейн для транзакций с биткоинами, но возможности для работы с документами там ограничены.

Side Chains: Другое название для блокчейнов, параллельных Bitcoin, которые предоставляют несколько большие возможности для работы с контрактами.

Введение в разработку умных контрактов Ethereum


В последнее время вокруг блокчейна, криптовалют, умных контрактов и связанных с ними технологий поднялся небывалый хайп. Создается ощущение, что даже самые ленивые и пассивные обыватели трубят об этом из каждого болота. Огромное количество стартапов и компаний с историей и опытом из сферы ИТ, услуг, ритейла и реального сектора экономики задумываются о внедрении блокчейна в свою деятельность, а более 100 000 компаний уже сделали это.
Механизм Initial Coin Offering не только способствовал новой волне интереса к краудфандингу, увеличив объем привлекаемых с его помощью инвестиций, но и подхлестнул интерес к криптовалютам и технологии блокчейн. Сегодня все чаще и чаще попадаются новые вакансии в этой области, а также просьбы о помощи в проведении ICO в целом и разработке смарт-контрактов в частности.

К сожалению, сегодня сильно ощущается нехватка специалистов в этой сфере, хотя в действительности процесс разработки умных контрактов гораздо проще, чем это может показаться на первый взгляд. Проблема нехватки специалистов напрямую проистекает из того, что технология блокчейн дошла до массового пользователя не так давно — в виде криптовалюты биткоин, а смарт-контракты в блокчейн пришли значительно позже. Так что лично у меня не вызвал большого удивления тот факт, что материалов по разработке смарт-контрактов все еще очень мало. С другой стороны, будучи техническим директором компании, в которой мы занимаемся построением основанной на блокчейн цифровой юрисдикции и упрощением процесса создания смарт-контрактов для обычных пользователей, не владеющих навыками программирования, я ощущаю потребность в технических специалистах, имеющих представление о технологии, а еще лучше — опыт работы с ней.

В этом материале я хочу показать, что порог вхождения в разработку смарт-контрактов на самом деле довольно низкий, и постараться привлечь в сферу новых разработчиков. Конечно, не все в жизни бывает так же просто, как в обучающих материалах, и в разработке умных контрактов существует огромное количество тонкостей. Тем не менее, это справедливо и для любой другой технологии, включая знакомый многим JavaScript, и с этим нам, как правило, помогает справиться практический опыт, который невозможно получить, не начав программировать, проектировать, экспериментировать, тестировать и делать все то, чем разработчики обычно занимаются.

В этом уроке мы установим все необходимые для начала разработки инструменты, фреймворки, напишем свой первый токен ERC20 на языке Solidity, скомпилируем его, опубликуем в локальном блокчейне, напишем пару тестов и прогоним их. Мы будем использовать framework truffle, который поможет нам с управлением миграциями, компиляцией, управлением зависимостями, а также тестированием. Помимо этого, мы будем использовать фреймворк OpenZeppelin, который содержит в себе набор контрактов и библиотек, написанных на языке Solidity и уже доказавших свою полезность и безопасность временем.

Для начала давайте установим framework truffle. Для этого просто перейдите к документации фреймворка и найдите там инструкции по установке для вашей операционной системы. После установки создайте папку для вашего проекта. В моем случае эта папка будет называться «jcr-token».После этого откройте созданную папку проекта в терминале и инициализируйте проект при помощи команды truffle init.

Теперь откройте проект в вашем любимом текстовом редакторе (я использую Atom). Посмотрим на структуру проекта. Изначально вы можете увидеть в корневой директории три папки:

  • contracts
    , предназначенная для хранения исходного кода наших умных контрактов,
  • migrations
    , содержащая файлы миграций, которые служат для публикации контрактов в блокчейн,
  • test
    , содержащая тесты наших контрактов. Важно отметить, что тесты можно писать как на Solidity, так и на JavaScript.Если сейчас вам что-то кажется непонятным — не переживайте, дальше мы поговорим о каждой из частей более подробно и научимся создавать контракты, миграции и тесты.


Как вы могли заметить, truffle уже создал пару простых умных контрактов для нас. Мы используем их для тестирования нашей установки.
Для того, чтобы взаимодействовать с контрактами и создавать для них тесты, мы должны сначала опубликовать их в блокчейн. В нашем случае я предлагаю использовать для этих целей легкий ethereum-клиент, который называется testrpc. Он просто эмулирует обычное поведение клиента ethereum-сети, но работает намного быстрее и потребляет меньше ресурсов, что делает его хорошим инструментом для разработки. После установки вы можете запустить ваш собственный development blockchain просто набрав в терминале команду testrpc.

После успешного запуска вы увидите хост и порт вашего блокчейн. Откройте файл `truffle.js` в корневой директории проекта. Этот файл содержит конфигурацию вашего проекта. Убедитесь, что хост и порт в конфигурации совпадают с хостом и портом запущенного testrpc.

Теперь давайте попробуем скомпилировать умные контракты, набрав truffle compile. Этот шаг сгенерирует файлы в директории build. Если вы запускаете compile в первый раз, то директория будет создана автоматически. В этой папке будут располагаться build-артефакты. Мы поговорим о них чуть позже.


Для того чтобы протестировать контракты, наберите truffle test. Если вы знакомы с юнит-тестами в JavaScript или любом другом языке, то вы уже знаете, как тестировать смарт-контракты. Пожалуйста, уделяйте особое внимание тестам, ведь цена ошибки в блокчейн очень высока! Вам даже не нужно заранее компилировать контракты перед запуском тестов, поскольку команда `test` делает это за вас автоматически.


И, наконец, для того чтобы запустить миграции, которые опубликуют наши контракты в блокчейн testrpc, наберите truffle migrate.


Вскоре после этого вы увидите вывод команды в терминале и вывод события в клиенте testrpc. Поздравляю! Мы только что опубликовали наш первый умный контракт в эмулятор сети блокчейн.


Для создания более продвинутых контрактов мы воспользуемся фреймворком OpenZeppelin, который включает в себя несколько очень полезных библиотек, интерфейсов и готовых контрактов. Стоит отметить, что язык Solidity поддерживает наследование и мы можем с легкостью расширять функционал существующих контрактов. Это открывает большие возможности для продумывания вашей архитектуры.

Установить OpenZeppelin можно так же, как и любую другую JavaScript библиотеку, используя ваш любимый менеджер зависимостей, например, npm или yarn. Вы можете найти более подробную информацию на странице проекта OpenZeppelin на github, либо их сайте.

Вот мы и установили все необходимое для начала разработки собственных смарт-контрактов. И это было не так уж и сложно, верно?

Теперь перейдем к текстовому редактору и посмотрим файлы проекта. Можно заметить, что truffle уже создал некоторые базовые контракты при инициализации. Давайте удалим все эти файлы, за исключением файлов миграций. Мы удалим лишний контракт, библиотеку, тесты, а также уберем немного кода из миграций.

Создадим новый solidity-файл с кодом нашего кастомного умного контракта. Я буду делать токен под названием JCR для проведения ICO компании Jincor, а значит, и файл я назову JCR.sol.

Solidity — довольно молодой и динамично развивающийся язык программирования. Это накладывает определенные неудобства, одно из которых — это частые изменения, некоторые из которых способны поломать обратную совместимость, что, в свою очередь, может вызвать проблемы с уже опубликованными контрактами. Для того чтобы это предотвратить, нам необходимо указать версию компилятора языка Solidity. Лично я буду использовать `^0.4.11`.

Заметьте, что здесь `^` означает, что нас также устраивают более новые минорные версии и багфиксы, а не строго указанная версия 0.4.11. Можно определить намного более гибкие шаблоны версионирования точно так же, как вы делаете это в npm.

Как я уже говорил, мы собираемся использовать некоторые контракты из библиотеки OpenZeppelin для того, чтобы не изобретать велосипед, а просто воспользоваться работающими, безопасными наработками, содержащими лучшие практики сообщества и регулярно проходящие security-аудиты.

Для того чтобы импортировать контракт, нужно воспользоваться ключевым словом `import` и далее в кавычках указать путь к импортируемому файлу, как, например, это сделал я: `import «zeppelin-solidity/contracts/token/MintableToken.sol»,`.

Я настоятельно рекомендую ознакомиться с документацией OpenZeppelin от корки до корки и посмотреть на реализации их смарт-контрактов, чтобы иметь ясное представление о том, как именно они работают. Кроме того, в процессе изучения вы увидите примеры оформления кода и сможете найти вдохновение для написания новых контрактов. Вы можете найти исходники в директории node_modules.

Давайте посмотрим на Mintable token, который я собираюсь сегодня использовать. Сейчас мы не будем погружаться в детали очень глубоко, ведь с исходными кодами и документацией вы можете ознакомиться и без моей помощи. Мы просто обсудим самое важное.

Мы видим, что «Mintable token is Ownable, Standard token». Ключевое слово «is» обозначает примерно то же самое, что «extends» в Java или PHP. Контракт Mintable token добавляет 2 события, одно публичное свойство, 2 модификатора и 2 функции. Все вместе это составляет функционал для эмиссии токенов. Standard Token добавляет функционал передачи токенов от лица другого пользователя с предварительно полученным разрешением. Basic token — это просто реализация интерфейса ERC20Basic, который определяет передачу токенов и проверку баланса. Контракт Ownable добавляет модификатор onlyOwner, который, как правило, используется для ограничения вызова функций со стороны третьих лиц.

Теперь вернемся к исходникам нашего контракта и немного изменим их. После того как мы импортировали все необходимые контракты, мы называем наш собственный контракт JCR. Пожалуйста, давайте файлам контрактов и названиям одинаковые имена.

В контракте мы определим публично доступные имя, символ и количество знаков после запятой (равное 18, как у Эфириума).

contract JCR is MintableToken { string public name = «Jincor Token», string public symbol = «JCR», uint public decimals = 18, } Затем напишем код конструктора. Конструктор — это просто функция, которая называется точно так же, как контракт, и вызывается при инстанциировании объекта контракта, или, иными словами, при создании нового экземпляра. Это довольно удачное место для инициализационного кода. Лично я хочу сделать контракт, который сможет выпускать указанное количество токенов и передавать все токены на баланс создателю контракта. Для этого я просто добавляю аргумент amount в конструктор, назначаю создателя контракта его же владельцем и выпускаю указанное число токенов на кошелек владельца. function JCR(uint256 _amount) { owner = msg.sender, mint(owner, _amount), } Итоговый файл JCR.sol (также доступен на github) pragma solidity ^0.4.11, import «zeppelin-solidity/contracts/token/MintableToken.sol», contract JCR is MintableToken { string public name = «Jincor Token», string public symbol = «JCR», uint public decimals = 18, function JCR(uint256 _amount) { owner = msg.sender, mint(owner, _amount), } } Теперь давайте попробуем скомпилировать то, что у нас получилось. Сделать это можно, набрав `truffle compile`. Заглянем в папку build и посмотрим, что же мы получили на выходе. Первое, что бросается в глаза — это то, что мы получили артефакты всех используемых контрактов от ERC20, до Mintable и JCR. Артефакты сохраняются в JSON-файлах. Эти JSON-файлы содержат название контракта, Application Binary Interface(abi), двоичный код, которой в последствии будет запущен на Ethereum Virtual Machine и немного дополнительной информации.


Мы можем использовать артефакты для того, чтобы опубликовать наши смарт-контракты в блокчейн. Однако лучше с самого начала приучить себя к хорошему и сразу же автоматизировать этот рутинный процесс, добавив миграцию. Помните, что мы еще должны передавать в конструктор количество выпускаемых токенов? Миграции — это хорошее место для подобных манипуляций. Давайте откроем файл 2_deploy_contracts.js и добавим немного кода. Я собираюсь выпустить 1,4 млн токенов.

Мы можем опубликовать контракты в скрипте миграции, используя метод deployer.deploy, в который первым аргументом мы передадим билд-артефакт, а за ним аргументы, которые дальше в том же порядке передадутся конструктору контракта. В нашем случае у нас всего один аргумент — 1 400 000. Все остальное truffle возьмет на себя. Чтобы сделать процесс деплоя проще и приятней, можно разблокировать аккаунт (разрешить совершать действия от его имени). Для этого при старте testrpc добавьте аргемент `-u 0`

var JCR = artifacts.require(«./JCR.sol»), module.exports = function(deployer) { const tokenAmount = 1400000, deployer.deploy(JCR, tokenAmount), }, Запустим нашу новую миграцию и посмотрим, работает ли она. Отлично! Теперь нам необходимо убедится в том, что наш токен работает так, как мы от него ожидаем. Для этого мы напишем пару тестов на JavaScript. Наберите `truffle create test` и имя тестируемого контракта, чтобы сгенерировать JavaScript-файл с тестом. Замечу, что тесты можно писать и на Solidity, но об этом мы поговорим позже.

Я надеюсь, что у вас уже есть какой-то опыт написания тестов на других языках программирования, например на PHP. Если вы уже сталкивались с фреймворками Mocha и Chai, то все покажется Вам уже знакомым, так как truffle использует именно их. Более подробную информацию можно найти в официальной документации.

Наконец, давайте попробуем убедится в том, что владелец получил правильное количество токенов при создании контракта и функция передачи токенов ведет себя ожидаемым образом.

var JCR = artifacts.require(«./JCR.sol»), contract(‘JCR’, function(accounts) { it(«Create 1 400 000 tokens at the owner account», function(done) { JCR.deployed().then(function(instance) { return instance.balanceOf.call(accounts[0]), }).then(function(balance) { assert.equal(web3.toWei(balance.valueOf(), ‘ether’), web3.toWei(1400000, ‘ether’), «1400000 wasn’t in the first account»), }), done(), }), it(‘Should transfer tokens correctly’, function(done){ var token, var amount = 10, var account_one = accounts[0], var account_two = accounts[1], var acc_one_before, var acc_one_after, var acc_two_before, var acc_two_after, JCR.deployed().then(function(instance){ token = instance, return token.balanceOf.call(account_one), }).then(function(balanceOne) { acc_one_before = balanceOne.toNumber(), return token.balanceOf.call(account_two), }).then(function(balanceTwo) { acc_two_before = balanceTwo.toNumber(), return token.transfer(account_two, amount, {from: account_one}), }).then(function() { return token.balanceOf.call(account_one), }).then(function(balanceOne){ acc_one_after = balanceOne.toNumber(), return token.balanceOf.call(account_two), }).then(function(balanceTwo){ acc_two_after = balanceTwo.toNumber(), assert.equal(acc_one_after, acc_one_before — amount, «Token transfer works wrong!»), assert.equal(acc_two_after, acc_two_before + amount, «Token transfer works wrong!»), }), done(), }), }), На сегодня все. В следующем уроке мы попробуем протестировать наш контракт в более реальном окружении, а также напишем контракт ICO для продажи нашего токена.

Кстати! На youtube доступна видео-версия данной статьи в 2 частях:

1. Подготовка к разработке 2. Пишем контракт токена

Код доступен на github

Понравилась статья? Поделиться с друзьями:
Добавить комментарий