Пишем смарт-контракт Ethereum — это просто: Часть 1 — введение
Лучший способ разобраться в чём-то – попытаться это что-то объяснить другому
Данное руководство предназначено для тех, кто хочет научиться писать смарт-контракты на эфире. Для изучения вам потребуется знание основ программирования. Идеально было бы если читатель знаком с JavaScript. Предполагается что вы уже знакомы с понятием смарт-контрактов и имеете представление для чего они.
Смарт контракты Ethereum можно писать на разных языках. Мы же будем использовать solidity как наиболее распространенный на момент написания статьи. Версия 0.4.18.
В этом уроке:
- Познакомимся с языком solidity
- Познакомимся со средой Remix
- Напишем наш первый смарт-контракт
- Научимся запускать наш смарт-контракт в тестовой среде
Писать и тестировать мы будем на 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 и выполните следующие действия.
- Переключитесь на вкладку «compile» в панели справа
- Выполните «start compile»
- Переключитесь на вкладку «run»
- В поле «Environment» поставьте «JavaScript VM» — это тестовая среда в которой мы будем исполнять наши контракты
- Выберите в списке контрактов тот, который будете заливать (сейчас это HelloWorld)
- Нажмите на кнопку «create» — таким образом мы создаем контракт внутри сети Ethereum
В дальнейшем эти действия нужно будет выполнять если вы хотите создать новый контракт внутри Ethereum.
После этих процедур панель справа должна выглядеть примерно так
Теперь наш контракт готов к выполнению. Вызовем функцию «getData» — для этого достаточно нажать на кнопку с соответствующей надписью.
Результатом работы будет.
Теперь мы видим нашу строку приветствия «Hello, world.»
Наш первый смарт-контракт написан и успешно выполнен!
Теперь разберем наш код.
В самой первой строчке указывается язык «solidity» и его версия 0.4.18.
Сам контракт описывается просто. Для тех кто знаком с ООП в программировании — контракт покажется похожим на класс.
contract Имя_контракта { код контракта }
contract Имя_контракта {
код контракта
} |
В самом коде контракта у нас одна функция, которая возвращает строку. Соответственно функция которая что-то возвращает описывается следующим образом.
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
- Пишем смарт-контракт Ethereum — это просто: Часть 1 — введение
- Пишем смарт-контракт Ethereum — это просто: Часть 2 — визитка — mapping
- Пишем смарт-контракт Ethereum — это просто: Часть 3 — визитка — address, конструктор, переменная msg
- Пишем смарт-контракт Ethereum — это просто: Часть 4 — визитка — наследование и модификаторы
- Пишем смарт-контракт Ethereum — это просто: Часть 5 — токен ERC20
- Пишем смарт-контракт Ethereum — это просто: Часть 6 — токен ERC20 — рефакторинг
- Пишем смарт-контракт Ethereum — это просто: Часть 7 — ICO
- Пишем смарт-контракт Ethereum — это просто: Часть 8 — ICO рефакторинг, выделение токенов для баунти и команды
- Пишем смарт-контракт Ethereum — это просто: Часть 9 — ICO — добавляем бонусы инвесторам
- Пишем смарт-контракт Ethereum — это просто: Часть 10 — ICO, исходники на Etherscan, типы эмиссии
- Пишем смарт-контракт Ethereum — это просто: Часть 11 — ICO, refund — возврат средств по softcap
- Пишем смарт-контракт Ethereum — это просто: Часть 12 — ICO, реферальная система
Основы тестирования смарт-контрактов
- http://inaword.ru/blokchejn/bezopasnost-i-testirovanie-smart-kontraktov-chast-1-vvedenie-re-entrancy-attacks/
Основы написания децентрализованных приложений DApp:
- Пишем децентрализованное приложение DApp — это просто: Часть 1 — введение, первое dapp
Приложения
- Как получить эфир из крана тестовой сети — на примере ethereum сети Rinkeby
- Стандарт ERC223 и его отличия от ERC20
- Что делать, если транзакция долго находится в pending?
Ресурсы
- Тут документация по шаблонам от OpenZeppelin. А тут сами шаблоны. Очень популярные и качественные реализации. Как утверждают авторы шаблоны безопасны.
Тут есть группа в телеграмме для всех кто интересуется технологией блокчейна.
Если у вас возникли вопросы то можете смело писать на электронную почту (раздел «контакты«). Также приветствуется критика.
Если уроки оказались вам полезными, то автор не откажется от благодарности) Адрес кошелька Ethereum — 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770.
inaword.ru
Пишем смарт-контракт Ethereum — это просто: Часть 2 — визитка — mapping
Эта вторая статья уроков по написанию смарт-контрактов на Ethereum. Первую часть можно найти тут. Полный список уроков тут.
В сегодняшнем уроке мы напишем смарт-контракт визитку и познакомимся с двумя типами данных — mapping и uint:
Пусть наша визитка хранит только имя и возраст. Т.е. внутри контракта будет две переменные.
- name — имя — переменная уже знакомого нам по первому уроку типа string
- 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 (тип_ключей => тип_значений) имя_переменной; |
Это массив, который хранит пары (ключ => значение). Если вы не сталкивались с этим типом данных раньше, то можно его представлять себе как таблицу из двух столбцов, которую можно расширять. При этом каждый столбец имеет тип.
ключ | значение |
name | Alexander |
age | 30 |
year | 1987 |
Для нашей карточки ключи — это имена полей. Данные нашей визитной карточки разных типов. А в 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 достаточно создать смарт-контракт со следующими правилами:
- Если с адреса кошелька A пришла сумма X, запомнить это в табличке долгов.
- Если после этого с адреса B пришла сумма Y > 2*X, отправить 2*Х денег на адрес А, запомнить долг участнику B.
- И так далее для каждого участника.
- Опционально: отправлять 5% всех поступающих денег автору смарт-контракта.
Или можно устроить аукцион. Пишем программу:
- Если аукцион еще не окончен, запоминаем адреса отправителей и суммы ставок каждого участника.
- Когда аукцион окончен, выбираем максимальную ставку, объявляем победителя, высылаем обратно все остальные ставки.
- Опционально: высылаем выигранный лот, если Ethereum имеет представление, что это такое.
Есть еще миллион применений: кошельки с несколькими владельцами, финансовые инструменты, самоисполняющиеся пари, голосования, лотереи, игры, казино, нотариат и прочее.
Напомним преимущество: это блокчейн — все уверены, что никто не жульничает, все видят текст программы и понимают, что она работает именно так, как в ней написано. Программа — не человек. Она не скроется с деньгами, не обанкротится, и так далее. Если, конечно, в ней нет багов или «неожиданного поведения».
Ограничения смарт-контрактов
Но есть и существенные ограничения, вот некоторые из них:
- В программе очень сложно получить случайные числа и другую неопределенность. В некоторых лотереях умным участникам удается «подгадать» джекпот.
- Не так просто «спрятать» какую-то информацию. Например, список участников аукциона или их ставки.
- Если для работы контракта требуется информация, которой в блокчейне нет (например, текущий курс какой-нибудь валюты), то кто-то доверенный должен добавлять эту информацию в блокчейн.
- Для взаимодействия с контрактами пользователям нужен эфир — это внутренняя валюта Ethereum. Нельзя устроить голосование среди тех, у кого еще нет кошельков с деньгами.
- Смарт-контракты работают довольно медленно. На весь мир можно выполнять 3-5 транзакций в секунду.
- Сами смарт-контракты обычно выполняют немного действий, ведь в блокчейне каждый майнер должен будет эти действия повторить и сверить результат. Вдруг у него будет медленный компьютер.
- Если в смарт-контракте есть ошибки, то это навсегда. Единственный выход исправить ошибку — перейти на другой смарт-контракт, но только если возможность вывода денег и такого перехода была предусмотрена в программе изначально. Как правило, очень мало кто это предусматривает.
- Смарт-контракты могут зависнуть или вообще работать не так, как все ожидали, потому что не разобрались в программном коде.
Иными словами, как и в других областях, многое зависит от профессионализма авторов контрактов.
Главное использование смарт-контрактов
Простой смарт-контракт Ethereum. Имеющаяся ошибка позволяет украсть все деньги, кто нашел — молодец
Пирамиды, голосования, казино, лотереи — это все здорово. Но что оказалось действительно удобно делать при помощи смарт-контрактов — это надувать пузыри собирать деньги на свой стартап.
Ведь при помощи смарт-контракта можно автоматизировать всю «бухгалтерию»: контракт сам запомнит, от кого и сколько пришло денег, сам начислит «акции», а также даст возможность каждому участнику передавать и продавать эти акции. Не нужно никакой возни с адресами почты, кредитными картами, проверкой карт, авторизацией инвесторов и тому подобного. Вдобавок все видят, сколько всего было выпущено акций и как они распределились по участникам. От скрытого допечатывания акций и продажи одной акции несколько раз защищает блокчейн.
Смарт-контракты дали миллиону «криптоинвесторов» возможность «швырять деньги в монитор».
ICO — Initial Coin Offering
Нащупал эту нишу Ethereum не сразу. На 1 января 2017 стоимость одного эфира составляла $8, а своего пика (во всяком случае, пока) в $400 курс достиг к июню. Все благодаря большому количеству проводимых ICO — первичному предложению акций стартапов. Желание вложить эфир в какой-либо проект стимулирует спрос на эфир. А проектов этих сейчас — тьма.
График стоимости Ethereum. Источник
Обсудим ICO поподробнее. Типичная схема криптостартапа такова:
- У вас есть идея. Обычно она как-то связана с криптовалютой или блокчейном.
- На ее реализацию и запуск вам нужны деньги.
- Вы объявляете всем, что принимаете эфир, а взамен выдаете акции/токены/фантики при помощи смарт-контракта.
- Вы рекламируете свой проект и собираете требуемую сумму.
Сумма обычно составляет 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