Транзакции Эфира (Ethereum) — что в них входит и как расшифровать

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

 

Что это такое

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

  1. Передаваемая сумма.
  2. Сведения о получателе.
  3. Объем комиссионных сборов.
  4. Цифровая подпись.

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

Что такое ожидающая транзакция?

Формулировка «транзакция ожидает завершения» означает, что она не была записана в блокчейн. Чтобы ваша транзакция была зарегистрирована, вы должны заплатить майнерам (компьютерам в сети, поддерживающим блокчейн) комиссию за обслуживание или транзакцию, называемую gas.

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

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

 

Читайте также:  Криптовалюта Cardano [ADA] — обзор многообещающей монеты, как купить

 

Тут нужно понимать, что первые две транзакции с отметкой pending — это те, которые ожидают обработки.

Что такое Gas и как он рассчитывается

Gas — определенная денежная единица, обозначающая цену комиссии в ETH-транзакции. Стоимость Газа тесно коррелирована с количеством Эфириума, которое за него готовы отдать. Инициатор сделки сам фиксирует ограничение на использование Газа и его цену. На балансе отправителя обязательно должно быть нужное число Gas. Когда сделка завершена, неиспользуемый газ возвращается обратно на счет.

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

Оплата за хранение данных

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

Увеличение объема хранилища соответственно увеличивает и объемы базы данных о состояниях для всех узлов сети. Это стимулирует пользователей по возможности сокращать до минимума занимаемое место.

В чем заключается цель сбора комиссий

Ключевые операции в системе Эфира выполняются одновременно всеми узлами. Исполнение вычислений в EVM (virtual machine) — недешевое удовольствие. Смарт-контракты чаще применяются для повседневных задач, чем для выполнения сценариев высокой сложности. Комиссия способствует снижению нагрузки на систему.

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

Как отправить транзакцию Ethereum с MyEtherWallet

Про то, как зарегистрировать кошелек на MEW у меня уже есть статья на блоге. Недавно сайт этого кошелька обновился, но принцип создания кошелька не изменился. Посмотреть можно ЗДЕСЬ. А теперь посмотрим как отправить транзакцию.

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

Далее вы заходите в свой кошелек и параллельно открываете сайт, который мониторит текущее состояние сети блокчейна эфира. И определяет оптимальное количество газа, для совершения транзакции. Если в кошельке например биткоина комиссия проставляется автоматически, то здесь это так сказать комиссию в виде газа нужно смотреть на стороннем ресурсе. Сайт этот – https://ethgasstation.info/.

На скрине видно, что на текущий момент если вам нужно отправить транзакцию быстро, то Gwei нужно проставить 10, если вы не сильно торопитесь, то можно поставить 3, а если вообще не торопитесь то 1. Это будут ну прям совсем копейки за отправку.

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

 

Читайте также:  Биткоин, золото, серебро – все падает. Где защитные активы?

 

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

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

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

Содержание транзакций и сообщений

К транзакциям система предъявляет определенные требования. Ее формат обязательно должен быть RLP. Имеется цифровая подпись отправителя. Данные в переводе и в аккаунте-отправителе не имеют расхождений. Только в этом случае перевод пройдет валидацию.

Сделки токена делятся на два вида и позволяют сети перебазироваться с одного состояния в другое:

  • создание контракта на передачу средств;
  • сообщение.

Компоненты, которые входят в транзакцию Эфириума независимо от ее разновидности:

  1. Nonce. Число сделанных отправителем переводов.
  2. gasPrice. Стоимость газа — сколько Эфира (точнее, его доли Wei) пользователь готов отдать за 1 Gas, служащий для выполнения данной сделки.
  3. gasLimit. Наибольшая сумма комиссии, который человек готов отдать за оплату транзакции.
  4. To. Корректный адрес криптокошелька получателя.
  5. value. Сколько Wei будет передано между контрагентами.
  6. v,r,s. Средства генерации цифровой подписи, позволяющей идентифицировать отправителя платежа Эфириум.

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

Для сообщений имеется поле Data. Заполнять его не обязательно. Может использоваться, когда есть необходимость указать IP и доменное имя при регистрации домена в системе.

Блоки с информацией обо всех транзакциях блокчейна ETH

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

После подтверждения всех транзакций Эфириума блоки соединяются в blockhain.

Что такое оммеры и какова их функция

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

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

Что такое заголовок блока и каково его содержание

Параметр содержит в себе 15 элементов. Основные:

 

Читайте также:  Web-3. Ru — альтернатива биржам контента и сайтам отзывов. Подробности внутри

 

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

Операция Эфира тесно связана с деревом Меркла (или деревом хешей), применяющимся во многих криптовалютах. В заголовках блоков всегда есть три параметра корня — для транзакций Эфириума, для состояния и для квитанций.

Логи с информацией о транзакциях и сообщениях

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

Генерация квитанций о транзакциях и информация в них

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

  • хеш транзакции;
  • хеш блока;
  • порядковый № блока;
  • сумма использованного Gas;
  • какие логи были сформированы в связи с данным переводом.

И другие подобные сведения.

Что такое Nonce?

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

Предвижу резонный вопрос – причем тут ожидающая транзакция к одноразовому номеру?

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

Платно, но быстро.

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

Зависимость сложности блока и времени подтверждения транзакции

Трудность создания блока определяется по одному критерию — времени, затраченному на формирование. Самый первый (genesis block) имел сложность 131 072, все остальные рассчитывались по конкретной формуле. Заметив ускорение создания, сеть Эфириума автоматически поднимает сложность.

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

Как проходят транзакции в сети

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

В состав входят такие элементы:

  1. Уникальный адрес (присваивается для Ethereum).
  2. Электронная подпись. Наличие элемента свидетельствует о готовности проведения транзакции в отношении другого лица.
  3. Valua — показатель, свидетельствующий о количестве отправляемых Gwei. Многие площадки, работающие с Эфиром, автоматически конвертируют этот параметр в ETH.
  4. Лимит Газа (Gas Limit) — ограничение вычислений по определенной операции с ETH.
  5. Цена Газа (Gas Price) — комиссионный платеж пользователя за пересылку Эфира. В упрощенной форме одна единица Газа позволяет провести одну вычислительную операцию.

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

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

Любые сделки в сети Эфира запускаются наружными аккаунтами. После поступления операции в смарт-контракт происходит запуск заложенного алгоритма и передача данных. Работа выполняется с помощью виртуальной машины (EVM). Такое построение позволяет легко проверить судьбу перечисляемых монет.

Процесс перевода Эфира

Проверка Эфира требует знания особенностей и требований проведения транзакции. Базовые нормы:

  1. Сделка проводится в виде RLP.
  2. Обязательно наличие подписи стороны-отправителя.
  3. Число сделок, совершенных с одного аккаунта, равняется числу операций в «теле» транзакции.
  4. Размера комиссии (Газа) должно быть достаточно для проведения перевода. В общий объем горючего включается 21 000 Газ. Сюда входит комиссионная выплата для отправки сведений о платеже и дополнительные 32 000 Газа для реализации smart-контракта.
  5. На счету отправителя должна быть сумма, достаточная для перечисления авансового платежа. Размет выплаты равен Gas Limit*Gas Price. К этому произведению прибавляется общее число горючего, направляемого между сторонами.

При выполнении всех условий происходит подтверждение сделки. Общий алгоритм транзакции Эфира:

  1. Со счета отправителя стягивается аванс.
  2. Счетчик выполненных транзакций увеличивается на одну единицу.
  3. Рассчитывается остаточный объем Газа после вычета авансового платежа.
  4. Перечисление монет.
  5. Завершение перевода.
  6. Перевод стороне-отправителю неиспользованного Газа.
  7. Отправка Эфиров, расходованных на покупку горючего, майнеру в качестве оплаты за работу.

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

При выполнении операции в криптосети Ethereum важно учесть следующее:

  • Газ Эфириум — комиссия, применяемая для проведения транзакций криптовалюты. Gas необходим для формирования смарт-контрактов и его внедрения в blockchain Ethereum. Выполнение этих сделок без перечисления определенной комиссии не получится. Выплаты осуществляются в специальных монетах Gas.
  • Размер комиссии при переводе Эфира зависит от объема Газа и стоимости, установленной за единицу горючего. Для проведения транзакции требуется 21 000 Gas. Для смарт-контрактов размер оплаты выше и выставляется персонально пользователем.
  • В Ethereum есть пул транзакций, поэтому пользователи вынуждены проверять ситуацию с переводом в случае задержки. В первую очередь обработке подлежат сделки с большей комиссией, а после них проводятся операции с меньшей стоимостью Газа. Это объясняется желанием майнеров получить максимальную прибыль от работы. Нормальную стоимость Gas легко проверить с помощью сайта ethgasstation.info.

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

Рассмотренной информации достаточно для понимания принципов транзакций в сети Эфира. В случае задержки перевода рекомендуется проверить состояние операции и по возможности отменить транзакцию во избежание зависания.

 

Читайте также:  Особенности криптовалюты Bitconnect (BCC) — финансовые характеристики и прогноз курса

 

Как работает Эфириум? (Часть 3: выполнение транзакций, финализация блоков)

(Продолжение. Ссылки на предыдущие части статьи: и .)

Выполнение транзакций

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

Для того чтобы быть выполненными, все транзакции должны отвечать определённому набору требований:

  • Транзакция должна быть правильно отформатированным префиксом рекурсивной длины (Recursive Length Prefix, RLP). RLP – это формат данных, используемый для кодирования вложенных массивов двоичных данных. В Эфириуме RLP используется для сериализации объектов.
  • Подпись транзакции должна быть действительной.
  • Параметр nonce транзакции должен быть действительным. Напомню, что nonce – это количество транзакций, отправленных с данного счёта. Значение nonce транзакции должно быть равно nonce счёта отправителя.
  • Указанный в транзакции лимит газа, должен быть больше либо равен количеству газа, использованному ею. При этом учитывается:
  1. предопределённая стоимость 21 000 газа для выполнения транзакции
  2. плата за газ для данных, отправленных с транзакцией (4 единицы газа за каждый байт данных или кода, или 0,68 единицы газа за каждый ненулевой байт данных или кода)
  3. ещё 32 000 единицы газа дополнительно, если транзакция создаёт новый контракт

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

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

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

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

  • Self-destruct set: список счетов, которые будут автоматически ликвидированы после завершения транзакции (если таковые имеются).
  • Log series: архивированные и проиндексированные контрольные точки выполнения кода виртуальной машины.
  • Refund balance: сумма ETH, которая должна быть возвращена на счёт отправителя после завершения транзакции. Мы уже упоминали о том, что хранение данных в сети Эфириума стоит денег и что отправитель транзакции получает возмещение за сокращение количества хранимых данных. Эфириум отслеживает это с помощью специального счётчика выплаты возмещений. Перед началом выполнения транзакции значение счётчика выплаты возмещений равно нулю и увеличивается каждый раз, когда контракт удаляет какие-либо из хранимых в сети данных.

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

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

После выплаты возмещения отправителю производятся следующие действия:

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

Наконец, мы получаем новое состояние сети и логи, сгенерированные при выполнении транзакции.

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

Создание контракта

Напомню, что в Эфириуме есть два типа счетов: счета контрактов и счета внешних владельцев. Когда мы говорим о «транзакции создания контракта», то подразумеваем, что целью транзакции является создание нового счёта контракта.

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

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

После инициализации создания счёта мы можем его создать, используя «код инициализации», init code, отправленный с транзакцией (подробно описано в разделе «Транзакции и сообщения»). Происходящее во время выполнения этого кода инициализации может варьироваться. В зависимости от конструктора контракта, он может обновлять хранилище, ассоциируемое со счётом, создавать другие счета контрактов, отправлять другие сообщения и т.д.

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

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

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

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

Сообщения

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

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

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

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

Модель выполнения транзакций

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

Часть протокола, которая выполняет обработку транзакций, называется виртуальной машиной Эфириума (EVM).

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

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

Размер каждого элемента стека в EVM составляет 256 бит, а максимальный размер стека – 1024 бит.

EVM имеет память, в которой элементы хранятся в виде байтовых массивов с обращением к словам. Память EVM не является долговременной.

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

EVM также имеет собственный язык: «байт-код EVM.» Когда программист пишет смарт-контракты, работающие в сети Эфириума, как правило, он пишет код на высокоуровневом языке программирования, таком, как Solidity. Затем его можно скомпилировать в понятный для EVM байт-код.

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

Перед началом выполнения вычислительной операции процессор убеждается в доступности и действительности следующей информации:

  • состояние системы;
  • остаток газа для вычислительной операции;
  • адрес счёта, которому принадлежит выполняемый код;
  • адрес отправителя транзакции, инициировавшей выполнение данного действия;
  • адрес счёта, инициировавшего выполнение кода (может отличаться от исходного отправителя транзакции);
  • цена газа, указанная в транзакции, инициировавшей выполнение данного действия;
  • входные данные для выполнения этого действия;
  • количество средств, которое должно быть отправлено на данный счёт как часть выполнения данного действия (в Wei);
  • машинный код, который должен быть выполнен;
  • заголовок текущего блока;
  • глубина стека данного сообщения или транзакции создания контракта;

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

Затем EVM выполняет транзакцию рекурсивно, рассчитывая состояние системы и состояние машины для каждого цикла. Состояние системы – это просто глобальное состояние сети Эфириума. Состояние машины включает в себя:

 

Читайте также:  Международный блокчейн-консорциум воздержался от Сбербанка

 

  • доступный газ;
  • счётчик программы;
  • содержимое памяти;
  • активное количество слов в памяти;
  • содержимое стека.

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

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

В конце каждого цикла есть три возможности:

  1. машина достигает исключительного состояния (например, недостаточное количество газа, недействительные инструкции, недостаточное количество элементов стека, объём элементов стека в результате выполнения действия превысит 1024 бит, неверный адрес JUMP/JUMPI перехода и т.д.) и должна быть остановлена, а все изменения отменены;
  2. последовательность продолжает обрабатываться в следующем цикле;
  3. машина достигает момента управляемой остановки, завершив выполнение процесса.

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

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

Как блоки финализируются

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

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

1) Валидировать (или, если речь идёт о майнинге, определить) оммеры Каждый оммер в заголовке блока должен быть допустимым заголовком и относиться к не более чем шестому поколению от текущего блока.

2) Валидировать (или, если речь идёт о майнинге, определить) транзакции Значение gasUsed для блока должно быть равно общему количеству газа, совокупно использованному транзакциями, включёнными в данный блок. (Напомню, что при выполнении транзакций увеличивается значение счётчика газа блока, который отслеживает общее количество газа, использованное всеми включёнными в блок транзакциями).

3) Выплатить вознаграждение (только в случае майнинга) На адрес счёта бенефициара перечисляется 5 ETH за майнинг блока. (Согласно принятому предложению EIP-649, эта сумма в скором времени будет уменьшена до 3 ETH). Кроме того, выгодоприобретатель создания блока получает дополнительное вознаграждение за каждого оммера данного блока в размере 1/32 от вознаграждения за текущий блок. Наконец, выгодоприобретатели формирования блоков-оммеров тоже получают определённое вознаграждение, рассчитываемое по специальной формуле.

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

Как проверить отправку Эфира — лучшие способы

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

Как проверить перевод Ethereum на бирже

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

Чтобы проверить информацию, требуется сделать следующее (на примере binance.com):

  1. Наведение на секцию «Актив» в правом верхнем горизонтальном меню.
  2. Переход по ссылке «Протокол депозита и снятие наличных».
  3. Выбор проблемного перевода и уточнение полной информации. Пользователю доступен статус, название, количество переданной криптовалюты, ID и прочие сведения.

Если проверить сделку не удалось, существует альтернативный вариант — обратиться в техническую поддержку и попросить разъяснить причину задержки перечисления Эфира. Потребуется передать ID транзакции или хеш.

На других биржевых площадках принцип проверки аналогичен — достаточно перейти в историю и получить интересующие сведения.

Как проверить отправку с помощью специальных сервисов

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

  • Etherscan.io — удобная площадка для проверки статуса и остальной информации. Для получения результатов требуется указать номер блока, адрес, ID операции или другие сведения в правом верхнем окне. Далее система выдает данные о количестве денег на счету адреса, нахождении операции в пуле ожиданий, отправителе, сумме и времени выполнения. По статусу легко сделать вывод, проведена ли операция или находится в процессе. В первом случае указывается точное время перечисления средств и номер кошелька стороны-отправителя. Преимущества ресурса etherscan.io — отсутствие регистрации, удобство пользования, наличие дополнительной полезной информации. Недостаток заключается в наличии только двух языков — английского и китайского. Для решения проблемы используется встроенный переводчик.

  • Etherchain.org. Здесь легко проверить факт отправки Эфира посредством ввода в специальное поле номера блока или ID транзакции. После создания запроса система показывает номер блока, отправителя и получателя, число монет, размер комиссии и факт проведения. Сайт удобен в применении, но не имеет русскоязычного интерфейса. Разобраться с возможностями ресурса не составляет труда.

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

Отмена транзакции

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

Пример отмены операции с помощью Ethereum Wallet:

  1. Переход к строке From Address.
  2. Указание номера бумажника (с которого отправлялся ETH). Важно правильно прописать адрес и проверить корректность строки.
  3. Внесение сведений в строчку To Address. В этой графе указывается любой номер бумажника (к примеру, адрес дополнительного хранилища на Ethereum Wallet).
  4. Заполнение графы Value. Здесь указывается сумма для перечисления другому пользователю. В графе прописывается ноль, но даже при указании такой цифры придется заплатить небольшой объем Газа (комиссии) за транзакцию.
  5. Указание цены Газа (сумма прописывается в единицах измерения Gwei).
  6. Прописывание параметра отменяемого перевода в графе Nonce. Если ошибиться с номером, отменить сделку не получится. Комиссия расходуется впустую, пользователь просто потеряет деньги.
  7. Ожидание отмены прошлого перевода (до пяти минут).

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

Понравилась статья? Поделиться с друзьями: