Читать книгу «Разработка смарт-контрактов в Ethereum» онлайн полностью📖 — Тимура Машнина — MyBook.

Децентрализованные приложения

Для понятия децентрализованного приложения может быть не одно определение.


Тем не менее, у децентрализованных приложений есть общие черты:

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

Децентрализация. Все записи о работе приложения должны храниться в общедоступной и децентрализованной цепочке блока.

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

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

Например, Bitcoin использует Proof of Work (PoW), и Ethereum в настоящее время использует Proof of Work с планами гибридного Proof of Work/Proof of Stake (PoS) в будущем.

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

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

Чтобы запустить проект децентрализованного приложения необходимо:

Создать технический документ белые страницы или белую книгу.

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

Он должен четко указать намерения и цели приложения.

Опишите план распределения токенов и как вы собираетесь это делать.

Определите механизм достижения консенсуса и наймите свою команду менеджеров и разработчиков.

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

Откройте дискуссию по своему плану и сформируйте сообщество.

Получите обратную связь и соответствующим образом переработайте свой план.

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

Веб-сайт продажи токенов должен иметь всю информацию, которая может понадобиться инвесторам.

Начните разработку и приветствуйте новых разработчиков.

Децентрализованное приложение нуждается в первоначальном предложении монет или Initial Coin Offering (ICO).

Появление нового приложения в сообществе blockchain называется ICO.

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

В ICO цена токена произвольно определяется командой, запускающей приложение.

После того, как токен регистрируется на бирже, его цена затем корректируется торгами.

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

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

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



Итак, что такое Dapp?

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

Как правило, у Dapp есть веб-интерфейс, а также блокчейн и код, их соединяющий.

В такой архитектуре веб-интерфейс Dapp передает внешние действия от пользователей в инфраструктуру blockchain и возвращает ответ на них.

В Эфериуме Dapp инициирует транзакции для вызова функций в смарт-контракте.

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

И внешний интерфейс Dapp может быть таким же простым, как интерфейс командной строки.

Или это может быть сложное веб-приложение или мобильное приложение.

Инструменты разработки

Embark – это платформа, которая позволяет вам легко разрабатывать и развертывать децентрализованные приложения (DApps).

С Embark вы можете автоматически развертывать смарт контракты и использовать их в вашем JS-коде.

Embark позволяет следить за изменениями в смарт контракте, и, если вы обновите контракт, Embark автоматически заново развернет смарт контракт и приложение.

EtherScripter – инструмент визуального создания смарт контрактов для Ethereum.

Truffle – это среда разработки и платформа тестирования для Ethereum.

Populus – это фреймворк разработки смарт контрактов для Ethereum.

Mist – браузер для децентрализованных веб-приложений.

Parity – быстрый и легкий клиент Ethereum, который можно использовать для доступа к децентрализованным приложениям.



Geth – клиент Ethereum, работающий из командной строки.

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

Remix – самая популярная браузерная среда разработки для создания смарт контрактов.

Введение в Ethereum

В Ethereum смарт контракты – это скрипты, которые могут обрабатывать деньги.

Эти контракты соблюдаются и заверяются сторонами, которых мы называем майнерами.

Майнеры добавляют транзакцию (выполнение смарт-контракта, оплату криптовалютой и т. д.) в публичную книгу, которая называется блоком. Блоки образуют блокчейн.

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

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



«Газ» – это название специальной единицы, используемой в Эфириуме.

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

Например, для запуска вычисления криптографического хеша требуется 30 газов плюс 6 газов для хэширования каждых 256 бит данных.

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

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

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

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

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

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

Хотя газ – это единица измерения, нет никакого токена для газа.

То есть вы не можете владеть 1000 газами.

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

Когда дело доходит до фактической оплаты газа, комиссия за транзакцию взимается как определенное количество эфира – токена сети Ethereum.

Этим токеном майнеры вознаграждаются за создание блоков.

Сначала это может показаться странным.

Почему работа не измеряется сразу в эфире?

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

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

Операция имеет стоимость газа, но сам газ также имеет стоимость, измеряемую в эфире.

Для перевода токенов с одного кошелька на другой требуется 21000 газа.

Для создания смарт-контракта может потребоваться разное количество газа.

Для выполнения смарт-контракта также может потребоваться разное количество газа.

Выполнение вычислительных действий в виртуальной машине Эфириума стоит очень дорого.

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

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

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

Таким образом, комиссии защищают сеть от преднамеренных атак.

Эфириум представляет собой машину состояний, функционирующую посредством транзакций.

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

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

И есть два типа транзакций: сообщения и транзакции создания контрактов.

Можно сказать, что транзакции являются своего рода мостами между внешним миром и внутренним состоянием Эфириума.

При этом смарт контракты могут взаимодействовать друг с другом.

Контракты, существующие в глобальной области действия состояния Эфириума, могут взаимодействовать с контрактами внутри этой же области действия.

Они делают это посредством «сообщений» или «внутренних транзакций» в адрес других контрактов.

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

Их генерируют сами контракты.

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

Когда один контракт отправляет внутреннюю транзакцию на адрес счёта другого контракта, выполняется соответствующий код, прописанный в контракте-получателе.

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

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

Таким образом, газ – это единица, используемая для обозначения размера комиссии за определённое вычислительное действие.

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



Она измеряется в «Gwei».

«Wei» – это наименьшая единица эфира, 1 эфир = 1018 Wei.

Один Gwei равен 1 000 000 000 Wei.

Для каждой транзакции отправитель устанавливает лимит газа и цену газа.

Произведение цены газа и лимита газа даёт максимальное количество Wei, которое отправитель готов заплатить за выполнение транзакции.

Предположим, что отправитель устанавливает лимит газа 50 000, а цену газа 20 Gwei.

Это означает, что отправитель готов потратить на выполнение этой транзакции не более чем 50 000 x 20 Gwei = 1 000 000 000 000 000 Wei = 0,001 эфира.

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

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

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

Если отправитель не предоставляет необходимого для выполнения транзакции количества газа, и оно исчерпывается в процессе её выполнения, то такая транзакция признаётся недействительной.

В этом случае выполнение транзакции прерывается, любые произведённые ею изменения в состоянии сети отменяются и Эфириум возвращается в состояние, в котором он находился перед началом транзакции – как если бы её вовсе не было.

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

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