Написание смарт контракта на эфириуме – Пишем смарт-контракт Ethereum — это просто: Часть 1 — введение

Содержание

Пишем смарт-контракт Ethereum — это просто: Часть 1 — введение

Лучший способ разобраться в чём-то – попытаться это что-то объяснить другому

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

Смарт контракты Ethereum можно писать на разных языках. Мы же будем использовать solidity как наиболее распространенный на момент написания статьи.  Версия 0.4.18.

В этом уроке:

  1. Познакомимся с языком solidity
  2. Познакомимся со средой Remix
  3. Напишем наш первый смарт-контракт
  4. Научимся запускать наш смарт-контракт в тестовой среде

Писать и тестировать мы будем на Remix . Это довольно простая и распространенная среда, к тому же она работает из браузера. Выглядит она следующим образом:

Слева — список файлов. Центральное окно — место куда мы будем писать свой код. А справа инструменты.

Итак, наш первый смарт-контракт по традиции будет выводить приветствие «Hello, world»:

pragma solidity ^0.4.18; contract HelloWorld { function getData() public constant returns (string) { return «Hello, world!»; } }

pragma solidity ^0.4.18;

 

contract HelloWorld {

    

    function getData() public constant returns (string) {

        return «Hello, world!»;

    }

    

}

Вставьте этот код в среду Remix и выполните следующие действия.

  1. Переключитесь на вкладку «compile» в панели справа
  2. Выполните «start compile»
  3. Переключитесь на вкладку  «run»
  4. В поле «Environment» поставьте «JavaScript VM»  — это тестовая среда в которой мы будем исполнять наши контракты
  5. Выберите в списке контрактов тот, который будете заливать (сейчас это HelloWorld)
  6. Нажмите на кнопку «create» — таким образом мы создаем контракт внутри сети Ethereum

В дальнейшем эти действия нужно будет выполнять если вы хотите создать новый контракт внутри Ethereum.

После этих процедур панель справа должна выглядеть примерно так

Теперь наш контракт готов к выполнению. Вызовем функцию «getData» — для этого достаточно нажать на кнопку с соответствующей надписью.

Результатом работы будет.

Теперь мы видим нашу строку приветствия «Hello, world.»

Наш первый смарт-контракт написан и успешно выполнен!

Теперь разберем наш код.

В самой первой строчке указывается язык «solidity» и его версия 0.4.18.

Сам контракт описывается просто. Для тех кто знаком с ООП в программировании — контракт покажется похожим на класс.

contract Имя_контракта { код контракта }

contract Имя_контракта {

 

код контракта

 

}

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

function имя_функции(входные_параметры) public constant returns (тип_возвращаемого_значения) { код_функции return значение; }

function имя_функции(входные_параметры) public constant returns (тип_возвращаемого_значения) {

  код_функции

  return значение;

}

Следует отметить что слово «constant» не обязательно, но его желательно ставить если функция не меняет внутреннего состояния контракта. Также не обязательно указывать слово public, так как  все функции по-умолчанию считаются public. Однако хорошим стилем считается указание public.

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

Если функция ничего не возвращает, то убираем все что после названия функции.

function имя_функции(входные_параметры) public { код_функции }

function имя_функции(входные_параметры) public {

  код_функции

}

Соответственно если функция ничего не принимает на вход то убираем входные_параметры.

function имя_функции() public { код_функции }

function имя_функции() public {

  код_функции

}

Помимо функций внутри контракта могут содержаться переменные. Они записываются так

тип_переменной имя_переменной;

тип_переменной имя_переменной;

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

тип_переменной имя_переменной = значение_переменной;

тип_переменной имя_переменной = значение_переменной;

Типы переменных мы будем рассматривать по мере надобности.

Если что-то не понятно не переживайте, на практике станет все на свои места.

Давайте сделаем так чтобы контракт хранил строку «Hello, world» в переменной.

pragma solidity ^0.4.18; contract HelloWorld { string wellcomeString = «Hello, world!»; function getData() constant returns (string) { return wellcomeString; } }

pragma solidity ^0.4.18;

 

contract HelloWorld {

    

    string wellcomeString = «Hello, world!»;

    

    function getData() constant returns (string) {

        return wellcomeString;

    }

    

}

Теперь наша строка приветствия хранится в переменной wellcomeString. И тип у нее string.

Усовершенствуем наш контракт так чтобы строку приветствия можно было менять.

pragma solidity ^0.4.18; contract HelloWorld { string wellcomeString = «Hello, world!»; function getData() public constant returns (string) { return wellcomeString; } function setData(string newData) public { wellcomeString = newData; } }

pragma solidity ^0.4.18;

 

contract HelloWorld {

    

    string wellcomeString = «Hello, world!»;

    

    function getData() public constant returns (string) {

        return wellcomeString;

    }

    

    function setData(string newData) public {

        wellcomeString = newData;

    }

    

}

У нас появилась дополнительная функция setData которая принимает на вход новую строку приветствия и присваивает ее переменной wellcomeString.

Залейте контракт в сеть. После этого на правой панели внизу появятся две кнопки «getData» и «setData» которые соответствуют нашим функциям.

Напишите в поле рядом с кнопкой setData какую-нибудь строчку в двойных кавычках. Например «wellcome»  и нажмите setData. А затем getData. Если вы все правильно сделали, то getData вернет вашу строку.

На этом вводная часть заканчивается. Продолжение читать тут.

Если у вас возникли вопросы то можете смело писать на электронную почту (раздел «контакты»). Также приветствуется критика.

Если статья показалась вам полезной и вы желаете отблагодарить автора, то это можно сделать отослав немного эфира на адрес 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770.

Полный список уроков тут.

Может быть полезно:

inaword.ru

Разбираем, что такое smart-contract Ethereum и как они работают

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

Для примера, разберем небольшую транзакцию с использованием smart contract Ethereum: два пользователя решили совершить обмен криптовалюты при помощи данной технологии. Один из них отправляет свои средства в программу, где они хранятся под надежной защитой. Сейчас к ним никто не может получить доступ. Второй пользователь должен выполнить свои условия: перечислить определенную сумму в эту же программу. Как только это условие выполнено, трейдеры получают средства. Если один из участников не выполнил соглашения, деньги возвращаются обратно их владельцам.

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

Большое преимущество создания смарт-контракта на Ethereum – это его полный автоматизм. Участие посторонних людей вообще не требуется. А это значит, что пользователи могут сэкономить достаточно много денег на комиссиях, которые нужно было бы уплачивать посредникам.

Подобные сделки, кстати, проводятся и в сфере недвижимости: в прошлом году, например, в Киеве один пользователь воспользовался сервисом Propy для покупки квартиры в городе. Правда, по причине того, что официально пользоваться криптовалютами в Украине нельзя, пришлось оформлять дополнительный договор обмена. Также потребовалось обратиться к юристу для переоформления бумаг на имя другого человека: однако оплата производилась с помощью smart contract Ethereum.

Разработка смарт-контракта на Ethereum: как создавалась инновация?

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

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

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

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

Смарт-контракты в Ethereum: где их можно использовать?

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

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

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

Сам владелец квартиры может установить в жилище некоторые инструменты “умного дома” и, например, поставить блокировку замков при истечении двух недель. Как только время аренды завершается, замки автоматически закрываются, а вы получаете свой залог при помощи smart-contract Ethereum.

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

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

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

Эфириум-контракты: зачем нужен оракул и как он работает?

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

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

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

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

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

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

Создание смарт-контракта на Ethereum: основные преимущества

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

  • Сфера применения. Вы можете использовать данные контракты практически при любых операциях. Причем транзакции с использованием смарт-контрактов всегда будут безопасными;
  • Скорость обмена. По причине отсутствия посредников, скорость транзакций в разы увеличится. Давно известно, что чем меньше «цепь» из участников сделки, тем быстрее она завершается. В данном случае обмен происходит напрямую между покупателем и продавцом;
  • Сохранение всех данных. Сведения о транзакциях невозможно будет подделать, удалить или изменить. Этот факт помогает предотвратить незаконные действия мошенников и обезопасить процесс торговли.

Это основные преимущества, которые делают Ethereum смарт-контракты перспективными для развития.

Смарт-контракты в Ethereum: минусы разработки

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

  • При работе с данными контрактами всегда используются криптоденьги. А они, в свою очередь, не так популярны. И во многих странах правительства их попросту игнорируют, что создает некоторые несостыковки с законом;
  • Чтобы разобраться, как создать смарт-контракт на Ethereum, нужно потратить довольно много времени. Обычно его разрабатывают программисты. При его создании нельзя допускать никаких ошибок – иначе сделки будут недействительны, либо будут проводиться по неправильным алгоритмам;
  • Также можно выделить ряд проблем с получением достоверных данных в сети. Объективность получаемой оракулами информации по прежнему остается спорной.

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

Загрузка…

howtobuycoin.com

Смарт-контракты | inaword

С некоторых пор тема блокчена и криптовалюты стала очень популярной. А вместе с ними и написание смарт-контрактов. Дабы идти в ногу со временем я решил освоить это ремесло. А один из лучших способов разобраться в чем-то — это объяснить другому! Это самая важная причина по которой я решил опубликовать уроки по написанию смарт-контрактов на Ethereum. Но есть и другие.

Смарт-контракты Ethereum в основном пишутся на solidity. Как и в любом другом языке программирования в solidity есть шаблоны и общеизвестные рецепты решения повседневных задач. Чтобы постоянно не лазить по интернету и не вспоминать что к чему я постараюсь в статьях разобрать код наиболее популярных шаблонов.

В планах также описать механизмы известных уязвимостей и способов защиты от них.

Вообщем со временем список уроков будет увеличиваться.

Основы написания смарт-контрактов на ethereum

  1. Пишем смарт-контракт Ethereum — это просто: Часть 1 — введение
  2. Пишем смарт-контракт Ethereum — это просто: Часть 2 — визитка — mapping
  3. Пишем смарт-контракт Ethereum — это просто: Часть 3 — визитка — address, конструктор, переменная msg
  4. Пишем смарт-контракт Ethereum — это просто: Часть 4 — визитка — наследование и модификаторы
  5. Пишем смарт-контракт Ethereum — это просто: Часть 5 — токен ERC20
  6. Пишем смарт-контракт Ethereum — это просто: Часть 6 — токен ERC20 — рефакторинг
  7. Пишем смарт-контракт Ethereum — это просто: Часть 7 — ICO
  8. Пишем смарт-контракт Ethereum — это просто: Часть 8 — ICO рефакторинг, выделение токенов для баунти и команды
  9. Пишем смарт-контракт Ethereum — это просто: Часть 9 — ICO — добавляем бонусы инвесторам
  10. Пишем смарт-контракт Ethereum — это просто: Часть 10 — ICO, исходники на Etherscan, типы эмиссии
  11. Пишем смарт-контракт Ethereum — это просто: Часть 11 — ICO, refund — возврат средств по softcap
  12. Пишем смарт-контракт Ethereum — это просто: Часть 12 — ICO, реферальная система

Основы тестирования смарт-контрактов

  1. http://inaword.ru/blokchejn/bezopasnost-i-testirovanie-smart-kontraktov-chast-1-vvedenie-re-entrancy-attacks/

Основы написания децентрализованных приложений DApp:

  1. Пишем децентрализованное приложение DApp — это просто: Часть 1 — введение, первое dapp

Приложения

  1. Как получить эфир из крана тестовой сети — на примере ethereum сети Rinkeby
  2. Стандарт ERC223 и его отличия от ERC20
  3. Что делать, если транзакция долго находится в pending?

Ресурсы

  1. Тут документация по шаблонам от OpenZeppelin. А тут сами шаблоны. Очень популярные и качественные реализации. Как утверждают авторы шаблоны безопасны.

 

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

Если у вас возникли вопросы то можете смело писать на электронную почту (раздел «контакты«). Также приветствуется критика.

Если уроки оказались вам полезными, то автор не откажется от благодарности) Адрес кошелька Ethereum — 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770.

inaword.ru

Пишем смарт-контракт Ethereum — это просто: Часть 2 — визитка — mapping

Эта вторая статья уроков по написанию смарт-контрактов на Ethereum. Первую часть можно найти тут. Полный список уроков тут.

В сегодняшнем уроке мы напишем смарт-контракт визитку и познакомимся с двумя типами данных —  mapping и uint:

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

  1. name — имя — переменная уже знакомого нам по первому уроку типа string
  2. age — возраст — переменная типа uint. uint — сокращенно от unsigned int — беззнаковое целое. Целое положительное число по русски.

Также в контракте будут функции для доступа к нашим переменным. Итак, наш контракт:

pragma solidity ^0.4.18; contract BusinessCard { string name; uint age; function getName() public constant returns (string) { return name; } function setName(string newName) public { name = newName; } function getAge() public constant returns (uint) { return age; } function setAge(uint newAge) public { age = newAge; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

pragma solidity ^0.4.18;

 

contract BusinessCard {

    

    string name;

    

    uint age;

    

    function getName() public constant returns (string) {

        return name;

    }

    

    function setName(string newName) public {

        name = newName;

    }

    

    function getAge() public constant returns (uint) {

        return age;

    }

    

    function setAge(uint newAge) public {

        age = newAge;

    }

 

}

Запустите (как запускать контракт описано в первом уроке) контракт и поиграйтесь с ним. Установите и получите возраст и имя.

Теперь попробуйте самостоятельно добавить поле «год рождения». Внизу решение. Постарайтесь не подсматривать.

pragma solidity ^0.4.18; contract BusinessCard { string name; uint age; uint year; function getName() public constant returns (string) { return name; } function setName(string newName) public { name = newName; } function getAge() public constant returns (uint) { return age; } function setAge(uint newAge) public { age = newAge; } function getYear() public constant returns (uint) { return year; } function setYear(uint newYear) public { year = newYear; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

pragma solidity ^0.4.18;

 

contract BusinessCard {

    

    string name;

    

    uint age;

    

    uint year;

    

    function getName() public constant returns (string) {

        return name;

    }

    

    function setName(string newName) public {

        name = newName;

    }

    

    function getAge() public constant returns (uint) {

        return age;

    }

    

    function setAge(uint newAge) public {

        age = newAge;

    }

    

    function getYear() public constant returns (uint) {

        return year;

    }

    

    function setYear(uint newYear) public {

        year = newYear;

    }

 

 

}

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

На помощь нам придет тип данных — mapping. Записывается он так:

mapping (тип_ключей => тип_значений) имя_переменной;

mapping (тип_ключей => тип_значений) имя_переменной;

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

ключзначение
nameAlexander
age30
year1987

Для нашей карточки ключи — это имена полей. Данные нашей визитной карточки разных типов. А в mapping значения иметь должны один общий тип. Проще всего все значения представить в виде строк. А выглядеть это будет так

mapping (bytes32 => string) data;

mapping (bytes32 => string) data;

Почему ключ типа bytes32? Дело в том что ключем не может быть строка, поэтому мы строку будем преобразовывать в тип bytes32 с помощью функции keccak256. Вдаваться в подробности пока не будем, просто примите это пока как данное.

Тогда добавление в mapping нового элемента в нашем случае будет выглядеть следующим образом:

data[keccak256(«newFiled»)] = «new value»;

data[keccak256(«newFiled»)] = «new value»;

а получение соответственно:

string returnedValue = data[keccak256(«newField»)];

string returnedValue = data[keccak256(«newField»)];

Таким образом мы можем записывать в mapping произвольное количество значений. Перепишем наш контракт-визитку:

pragma solidity ^0.4.13; contract BusinessCard { mapping (bytes32 => string) data; function setData(string key, string value) public { data[keccak256(key)] = value; } function getData(string key) public constant returns(string) { return data[keccak256(key)]; } }

pragma solidity ^0.4.13;

 

contract BusinessCard {

    

    mapping (bytes32 => string) data;

    

    function setData(string key, string value) public {

        data[keccak256(key)] = value;

    }

    

    function getData(string key) public constant returns(string) {

        return data[keccak256(key)];

    }

 

}

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

Прописывает почту, нажимаем setData. А потом пробуем получить данные. Пишем что хотим получить «email» и вызываем getData.

Поиграйтесь с контрактом, попробуйте добавить другие поля, например телефон или город.

На этом второй урок заканчивается. Продолжение читать тут. Предыдущий урок тут.

Если у вас возникли вопросы то можете смело писать на электронную почту (раздел «контакты»). Также приветствуется критика.

Если статья показалась вам полезной и вы желаете отблагодарить автора, то это можно сделать отослав немного эфира на адрес 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770.

Полный список уроков тут.

Может быть полезно:

inaword.ru

Смарт-контракты, Ethereum, ICO — объясняем простыми словами

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

Так вот, Биткойн — на данный момент однозначно номер один. А знаете, какая криптовалюта на втором месте? Ethereum. Когда мы говорим про места, мы имеем в виду капитализацию, то есть суммарную стоимость всех монет валюты.

Капитализация и цены TOP-5 криптовалют. Источник

Как видите, Ethereum с большим отрывом опережает другие «альткойны», а в июне 2017 чуть было даже не обогнал Биткойн, «великий и ужасный». Давайте разберемся, что же в Ethereum такого особенного и почему подавляющее большинство проводимых в этом году ICO используют именно его.

Идея Ethereum

Ethereum запустился совсем недавно, 30 июля 2015 года. Одним из его создателей был нынче известный в блокчейн-тусовке и, не побоюсь этого слова, влиятельный Виталик Бутерин. Он родился в России, но с шести лет жил в Канаде. На тот момент, когда он изложил свои идеи, которые в итоге легли в основу сети Ethereum, ему было 19 лет.

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

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

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

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

И вот это нововведение существенно расширило сферу применения блокчейн-валют.

Примеры смарт-контрактов

Какие программы можно написать? Да какие угодно. Например, финансовую пирамиду. Для этого в сети Ethereum достаточно создать смарт-контракт со следующими правилами:

  1. Если с адреса кошелька A пришла сумма X, запомнить это в табличке долгов.
  2. Если после этого с адреса B пришла сумма Y > 2*X, отправить 2*Х денег на адрес А, запомнить долг участнику B.
  3. И так далее для каждого участника.
  4. Опционально: отправлять 5% всех поступающих денег автору смарт-контракта.

Или можно устроить аукцион. Пишем программу:

  1. Если аукцион еще не окончен, запоминаем адреса отправителей и суммы ставок каждого участника.
  2. Когда аукцион окончен, выбираем максимальную ставку, объявляем победителя, высылаем обратно все остальные ставки.
  3. Опционально: высылаем выигранный лот, если Ethereum имеет представление, что это такое.

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

Напомним преимущество: это блокчейн — все уверены, что никто не жульничает, все видят текст программы и понимают, что она работает именно так, как в ней написано. Программа — не человек. Она не скроется с деньгами, не обанкротится, и так далее. Если, конечно, в ней нет багов или «неожиданного поведения».

Ограничения смарт-контрактов

Но есть и существенные ограничения, вот некоторые из них:

  1. В программе очень сложно получить случайные числа и другую неопределенность. В некоторых лотереях умным участникам удается «подгадать» джекпот.
  2. Не так просто «спрятать» какую-то информацию. Например, список участников аукциона или их ставки.
  3. Если для работы контракта требуется информация, которой в блокчейне нет (например, текущий курс какой-нибудь валюты), то кто-то доверенный должен добавлять эту информацию в блокчейн.
  4. Для взаимодействия с контрактами пользователям нужен эфир — это внутренняя валюта Ethereum. Нельзя устроить голосование среди тех, у кого еще нет кошельков с деньгами.
  5. Смарт-контракты работают довольно медленно. На весь мир можно выполнять 3-5 транзакций в секунду.
  6. Сами смарт-контракты обычно выполняют немного действий, ведь в блокчейне каждый майнер должен будет эти действия повторить и сверить результат. Вдруг у него будет медленный компьютер.
  7. Если в смарт-контракте есть ошибки, то это навсегда. Единственный выход исправить ошибку — перейти на другой смарт-контракт, но только если возможность вывода денег и такого перехода была предусмотрена в программе изначально. Как правило, очень мало кто это предусматривает.
  8. Смарт-контракты могут зависнуть или вообще работать не так, как все ожидали, потому что не разобрались в программном коде.

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

Главное использование смарт-контрактов

Простой смарт-контракт Ethereum. Имеющаяся ошибка позволяет украсть все деньги, кто нашел — молодец

Пирамиды, голосования, казино, лотереи — это все здорово. Но что оказалось действительно удобно делать при помощи смарт-контрактов — это надувать пузыри собирать деньги на свой стартап.

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

Смарт-контракты дали миллиону «криптоинвесторов» возможность «швырять деньги в монитор».

ICO — Initial Coin Offering

Нащупал эту нишу Ethereum не сразу. На 1 января 2017 стоимость одного эфира составляла $8, а своего пика (во всяком случае, пока) в $400 курс достиг к июню. Все благодаря большому количеству проводимых ICO — первичному предложению акций стартапов. Желание вложить эфир в какой-либо проект стимулирует спрос на эфир. А проектов этих сейчас — тьма.

График стоимости Ethereum. Источник

Обсудим ICO поподробнее. Типичная схема криптостартапа такова:

  1. У вас есть идея. Обычно она как-то связана с криптовалютой или блокчейном.
  2. На ее реализацию и запуск вам нужны деньги.
  3. Вы объявляете всем, что принимаете эфир, а взамен выдаете акции/токены/фантики при помощи смарт-контракта.
  4. Вы рекламируете свой проект и собираете требуемую сумму.

Сумма обычно составляет 10-20 миллионов долларов и собирается буквально за несколько минут, иногда дней. Как правило, ICO ограничено по времени или собираемой сумме — и это формирует ажиотаж.

Доходит до комических случаев. Например, в ходе ICO одного из проектов 35 миллионов долларов собрали за 24 секунды. А чтобы попасть в число «счастливчиков-участников», фанаты проекта платили до $6600 комиссии за транзакцию. Большой спрос и низкая пропускная способность Ethereum’а заставляет увеличивать комиссионные, чтобы отправить деньги и поучаствовать, а не остаться в хвосте очереди.

Окупаемость криптоинвестиций

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

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

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

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

В 2017 году (к сентябрю) на ICO разные проекты уже собрали порядка 1,7 миллиарда долларов. Об успешных проектах слышно мало, но инвесторы не теряют оптимизма.

www.kaspersky.ru

Как написать смарт-контракт Ethereum с нуля?

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

Сперва рассмотрим понятие смарт-контракта. Смарт-контракт — это простой компьютерный протокол, кодифицированный для обеспечения согласования контракта на платформе Ethereum.

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

Определение бизнес-идеи

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

После того, как вы определитесь с направлением использования, следующий шаг — это техническая часть. Самый первый шаг для вас изучить Solidity. Виртуальная машина Ethereum (EVM) работает на этом языке программирования. Его структура очень похожа на Javascript и C ++, и как только вы тщательно просмотрели свою документацию, изучили этот язык и поняли, как писать код в Solidity, только тогда вы сможете продолжить работу, чтобы получить доступ к требуемому инструментарию для полной работы вашего смарт-контракта. На просторах интернета есть ряд учебных пособий, который непременно помогут вам в изучении Solidity. Вы также можете получить доступ к официальному руководству Solidity от Ethereum по этой ссылке.

Базовые инструменты

Самое первое, что вам понадобится, это инструмент под названием Truffle. Вы можете получить к нему доступ в Github по этой ссылке. Truffle представляет собой основу разработки для Ethereum, в которой вы будете кодировать свою бизнес-идею, используя язык программирования Solidity. Для написания тестов и их развертывания вам нужно будет использовать Node.js. Теперь для большей эффективности вам понадобится то, что будет управлять вашими учетными записями и токенами, с этой целью был создан клиент Parity, который является быстрым и безопасным клиентом Ethereum. Последний должен иметь инструмент в этом списке Web3.js. Разумеется, вам потребуется что-то, что позволит преодолеть разрыв между вашим ноутбуком и сетью Ethereum. Web3.js делает это только путем создания протокола связи с сетью Ethereum с использованием Javascript API.

Написание смарт-контракта

Сначала напишите применимый автоматизированный модульный тест вашей бизнес-идеи в Javascript или даже в Solidity. Он понадобится вам для проверки работы вашего смарт-контракта.

Когда у вас есть хорошие теоретические и практические знания о том, как написать код в Solidity, и вы создали все остальные инструменты на своем ноутбуке, такие как Truffle, Node.js, Parity и Web3.js, вы можете начать кодировать собственный смарт-контракт. Поскольку вы уже определили бизнес-идею, для которой вы бы хотели создать смарт-контракт, вам понадобятся знания и понимание Solidity, чтобы закодировать свою бизнес-идею, реализовав ее в Truffle, используя язык Solidity.

Тестирование и развертывание

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

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

Источник: bit.news

Пoжaлyйcтa оцените и поделитесь новостью, мы старались для Вас:

cryptowiki.ru

Как создать смарт-контракт: Инструкция для начинающих | Обучение

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

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

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

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

Проектирование смарт-контракта

Создавая смарт-контракт, важно установить, каким он должен быть.

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

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

Выбор DApp-платформы

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

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

Однако у нее есть и недостаток: для написания смарт-контрактов там используется собственный язык под названием Solidity.

Есть другой вариант, Lisk — на этой DApp-платформе используется Javascript, поэтому новый синтаксис учить не придется. Кроме того, здесь есть собственный DApp-магазин (что-то вроде Google Play или iTunes), где вы можно опубликовать готовое приложение.

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

Тем не менее пока ограничим наш выбор Ethereum и Lisk.

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

Но не стоит списывать Ethereum со счетов. У этой платформы такое обширное сообщество разработчиков, что новизна Solidity будет с избытком компенсирована легкостью получения нужной информации. Кроме того, для Ethereum есть фреймфорк Truffle от Consensys, позволяющий интегрировать и тестировать смарт-контракты.

Создание смарт-контракта

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

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

На что обратить внимание

Уникальность Solidity — в адресации. Все учетные записи Ethereum имеют уникальные адреса, и эти адреса представляют стороны, заключающие контракт.

В нашем примере контракта на продажу билетов организатор мероприятия будет

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

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

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

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

Интеграция с JavaScript

Самая сложная часть работы с Solidity — интеграция контракта с Javascript. Это делается с помощью фреймворка Truffle.

Сначала нужно выполнить развертывание контракта и перенести его в тестовую сеть. Truffle предоставляет для этого собственную отдельную тестовую сеть Ethereum, которая называется Ganache. Теперь мы получаем версию контракта в JSON-представлении, и можем вызывать ее с помощью адресов тестовой сети из Javascript-приложения.

Если будете искать дополнительную информацию, имей в виду, что у Truffle отличная документация с примерами.

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

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

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

И здесь снова приходит на помощь огромное сообщество разработчиков Ethereum — вероятнее всего, на любой ваш вопрос уже есть ответ на Ethereum Stack Exchange, а если его нет, другие разработчики с готовностью помогут вам с вашим смарт-контрактом.

Подготовила Тая Арянова

ru.ihodl.com

Обновлено: 18.04.2019 — 09:13

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *