разработка смарт контрактов обучение

Пишем умный контракт на Solidity. Часть 1 — установка и «Hello world»

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

Smart Contract & Gas

Если на пальцах, «умный контракт» — это некоторый код, живущий внутри блокчейна. Любой участник сети может его вызвать за небольшую плату. Эта плата и называется Gas, дословно «топливо». Зачем это нужно? Для защиты майнера от злоупотребления мошенником его ресурсов.

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

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

Стоимость вызова контракта в газе очень легко посчитать — готовый код можно скомпилировать и представить в виде последовательности ассемблерных команд. Вот онлайн компилятор, в нем уже есть пример кода, надо только нажать Compile > Toggle Details > Assembly. Для каждой команды есть захардкоженая стоимость.

Environment

Для того, чтобы начать работать с Ethereum, не обязательно синхронизировать весь текущий блокчейн — платформа позволяет легко создать так называемый «private blockchain», что мы и сделаем. Это разумно не только потому что на скачивание всей цепочки у вас уйдет примерно пару дней, но и потому что можно будет играть с контрактами не платя за это реальных денег (а газ нужно платить, в том числе и за загрузку контракта в блокчейн).

Установка command line клиента Ethereum

Мы воспользуемся Geth. Он написан на Go и его рекомендуют использовать в большинстве статей. Вот его официальная документация.

Инструкции по установке на другие ОС можно найти здесь. Здесь же можно найти другие имплементации клиента — на C++ или на Python.

Поднимаем ноду

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

Сохраним это код в geth_scripts.js и запустим его.

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

Mist wallet

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

разработка смарт контрактов обучение. image loader. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-image loader. картинка разработка смарт контрактов обучение. картинка image loader.На сегодняшний день не существует так называемых light wallet, которые позволили бы работать с контрактами, поэтому первое что вам предложит Mist — синхронизировать либо Main network, либо Test-net. Нам это все пока что не нужно, мы запустим Mist на нашем приватном блокчейне. Сделать это очень просто:

Первая строка делает все тоже самое, что и раньше, но в этот раз мы еще и открываем HTTP-RPC сервер, по дефолту на http://localhost:8545. Флаг rpcapi определяет набор разрешений, который будет иметь Mist, после подключения к серверу. В этом случае указано вообще все что есть. Если, например, не указать personal, то Mist не сможет создавать новые аккаунты и т.д. Весть набор опций командной строки перечислен здесь.

Вторая строка запускает Mist с указанным RPC сервером. Если все сработало правильно, то при запуске должна появиться надпись Private-net.

Hello, world!

Самое время создать ваш первый контракт. Для этого нажимаем на Contracts > Deploy new contract.
В окне Solidity contract source code пишем:

Сам по себе язык довольно прост, вот его документация, многие вопросы уже обсуждались на ethereum.stackexchange.com, в принципе есть шанс получить ответы в gitter.

Загрузка в блокчейн и запуск контракта

После того, как вы выбрали контракт greeting, указали «Hello, world» в качестве аргумента, нажали Deploy и ввели пароль, ваш контракт остается только «замайнить» в блокчейн. Для этого открываем терминал с включенным Geth и майним пару блоков (как это сделать написано выше). Все!

Источник

Разработка смарт контрактов обучение

Теоретический блок по смарт-контрактам

Введение в блокчейн

Инфраструктура открытого ключа

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

Экземпляры сетей Ethereum

Собственная сеть Ethereum. Практика.

Управление потоком выполнения

Типы данных в Solidity

Промышленное программирование на Solidity

Среда разработки Remix

Анализ простого смарт-контракта

Анализ сложного смарт-контракта

Собственная сеть Ethereum в контейнерах Docker

разработка смарт контрактов обучение. 20. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-20. картинка разработка смарт контрактов обучение. картинка 20.

6 модуль
Разработка смарт-контрактов на платформе
Waves Enterprise

Приватные блокчейн платформы. Введение в Waves Enterprise

Развертывание сети Waves Enterprise

Разработка и использование контейнеризированных смарт-контрактов

Приватные блокчейн платформы. Введение в Waves Enterprise

Развертывание сети Waves Enterprise

Разработка и использование контейнеризированных смарт-контрактов

Синтаксические особенности языка Python

Реализация парадигм программирования в языке Python (ООП)

Внешнее API в языке Python

разработка смарт контрактов обучение. 25. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-25. картинка разработка смарт контрактов обучение. картинка 25.

Введение в Java

Синтаксические особенности языка Java

Реализация парадигм программирования

Внешнее API в языке Java

разработка смарт контрактов обучение. D4hj9nHW4AUSeD9. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-D4hj9nHW4AUSeD9. картинка разработка смарт контрактов обучение. картинка D4hj9nHW4AUSeD9.

Введение в Java

Синтаксические особенности языка Java

Реализация парадигм программирования в языке Java

Внешнее API в языке Java

разработка смарт контрактов обучение. 1. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-1. картинка разработка смарт контрактов обучение. картинка 1.

разработка смарт контрактов обучение. 1. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-1. картинка разработка смарт контрактов обучение. картинка 1.

Очная форма обучения

Дистанционная форма обучения

разработка смарт контрактов обучение. ITMO University. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-ITMO University. картинка разработка смарт контрактов обучение. картинка ITMO University.

Университет ИТМО, расположенный в Санкт-Петербурге – это российский национальный исследовательский университет. В состав университета входят 19 факультетов, 7 научно-исследовательских институтов и 110 кафедр. Общее количество студентов составляет более 14000 человек. Ведущий российский университет в области информационных и фотонных технологий. Победитель международных конкурсов по программированию: ACM ICPC, Google Code Jam, Facebook Hacker Cup, Google и многие другие.

Университет ИТМО входит в ТОП-100 лучших ИТ-университетов мира («Информатика») и ТОП-400 лучших университетов мира по инженерным наукам («Инженерия и технологии»), в области физических наук («Физика и астрономия») Университет ИТМО входит в ТОП-400 по ежеквартальному предметному рейтингу Symonds (QS).

Singapore Polytechnic (SP) был основан 27 октября 1954 года для проведения обучения и исследований в области технологий, науки, торговли и искусства.Сингапурский политехнический институт стал первым политехническим институтом в Сингапуре, достигшим отметки в 200 000 выпускников.

Источник

Как написать смарт-контракт для ICO за 5 минут

разработка смарт контрактов обучение. image loader. разработка смарт контрактов обучение фото. разработка смарт контрактов обучение-image loader. картинка разработка смарт контрактов обучение. картинка image loader.

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

Solidity

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

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

А если вы пометите функцию в контракте словами Constant или View (означают одно и то же, разрешают только читать состояние), либо Pure (то же самое, только даже состояние не читает), то на исполнение этой функции даже кефир тратить не нужно будет! Даже больше скажу, эти функции не нужно вызывать транзакциями — ведь любой клиент кефира, теоретически, сможет ее выполнить у себя — и никому больше об этом знать не нужно (в блокчейн ведь ничего не пишется).

А еще есть две важные штуки в солидити: множественное наследование и модификаторы функций. Про них тоже нужно знать.

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

Перейдем к практике.

Готовим окружение

Если вы не знаете, что такое Терминал — почитайте вот эту статью. Если вы на окнах, ставьте себе Терминал через WLS. Если вы уже знакомы с Терминалом, продолжим. Алсо, сразу поставьте себе Node.js — он будет необходим для следующих шагов. Лучше ставить LTS, но, на самом деле, абсолютно без разницы, какую из современных версий ноды ставить.

Если вам выплюнуло версию geth — все в ажуре, продолжаем туториал. Если нет — хреново, исправляйте; придется, похоже, заняться любовными ласками с Терминалом и своей операционной системой — но вам не впервой, разберетесь. Как установите geth, запускайте в Терминале команду:

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

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

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

Фигачим контракт

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

Сделайте cd в какую-нибудь безопасную папку и после пропишите:

В этой папке и будем работать. Создадим здесь заглушку для нашего смарт-контракта:

Дальше нам нужно забрать текущий код смарт-контрактов из npm и, собственно говоря, начать сам проект:

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

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

Вот и все — у вас есть готовые контракты вашего собственного ERC20 токена и даже смарт-контракт ICO, который настраивается по вашему желанию и раздает ваши токены за кефир. Алсо, его поддерживают все ERC20 кошельки — ляпота! Перейдем к ручным тестам и деплою.

Миграции

Заметка про web3.eth.accounts[0] : когда деплоите смарт-контракт, убедитесь, что geth или testrpc имеют правильный кошелек в web3.eth.accounts[0] — не теряйте приватный ключ к нему, хоть это никак вам не навредит, но вдруг владельцу что-нибудь потом нужно будет сделать, а ключа уже нет?

Тестирование и деплой

Йес, контракты готовы, миграции написаны, осталось только задеплоить и проверить. Как geth (тестовый и реальный), так и testrpc управляются одинаково через truffle console — так что опишу способ проверки для testrpc и просто расскажу, как включить geth после. И так, запускаем тестовый локальный блокчейн кефира:

Эм… вот и все. У вас локально работает симуляция блокчейна кефира.

Теперь открываем новое окошко Терминала ( testrpc не закрываем — он должен работать) и прописываем в папке проекта:

Эта магическая команда скомпилирует смарт-контракт (то есть не нужно каждый раз писать truffle compile ) и задеплоит его на микро-сервер блокчейна, найденный открытым локально. Стоит отметить, что если testrpc сделает это мгновенно, то тестовый и реальный блокчейны будут гораздо дольше включать транзакцию в следующие блоки. После этого у вас должно выплюнуться нечто подобное в консольку:

Прописываем следующее в теперь уже трюфеле (без комментариев только):

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

Заключение

Удачи в разработке смарт-контрактов! Остались вопросы? Милости прошу в комментарии — с удовольствием на все отвечу и постараюсь помочь с проблемами.

Бонус

А что, если вы хотите изменить логику, по которой считается цена покупки токенов? Конечно, можно изменить правильно rate или использовать один из классов контрактов от OpenZeppelin, но вдруг вы хотите чего-нибудь еще более извращенного? В смарт-контракте можно оверрайтнуть функцию getTokenAmount следующим образом:

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

Источник

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

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