Чтение онлайн

ЖАНРЫ

Разработка смарт-контрактов в Ethereum
Шрифт:

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

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

Эфириум построен таким образом, что интервал между блоками в нём значительно меньше (~15 секунд), чем в других блокчейнах и, например, в Биткоине (~10 минут).

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

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

Эти конкурирующие блоки называют ещё потерянными, то есть намайненными

блоками, но не включёнными в основную цепочку.

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

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

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

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

Виртуальная машина Ethereum является сердцем Ethereum.

Эта виртуальная машина предназначена для запуска всеми участниками одноранговой сети.

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

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

Теперь разберемся со всем этим поподробнее.

Блокчейн Ethereum хранит блоки, которые в свою очередь хранят транзакции и состояние.

И блокчейн Ethereum во многом похож на блокчейн биткойнов, хотя он имеет некоторые отличия.

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

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

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

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

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

Текущий баланс эфира;

Код смарт-контракта аккаунта, если присутствует;

И хранилище аккаунта (пустое по умолчанию);

И данные состояния (вместе с балансами, контрактами) хранятся каждым клиентом Ethereum (или узлом Ethereum).

Есть два типа аккаунтов:

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

И счет контракта, который контролируются его кодом контракта, и имеет связанный с ним код.

Счет внешнего владельца

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

Сообщение между двумя счетами внешних владельцев – это просто передача денег.

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

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

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

Таким образом, Ethereum имеет набор аккаунтов.

У каждого аккаунта есть владелец и баланс в эфирах.

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

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

То есть у нас есть состояние – это совокупность всех аккаунтов и их балансов.

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

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

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

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

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

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

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

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

Такие узлы называются легкими узлами.

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

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

Термин «транзакция» используется в Ethereum для ссылки на подписанный пакет данных, который хранит сообщение, отправляемое из внешнего аккаунта.

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

Контракт может получить доступ к данным, содержащимся в поле данных.

Поделиться с друзьями: