Майнинг Криптовалюты

Транзакции в сети Ethereum — GAS (газ) комиссии за переводы токенов

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

За каждое вычисление, выполняемое в сети Эфириума в результате транзакции, взимается комиссия, для обеспечения вознаграждения за поддержание сети (майнинг и хранение данных блокчейна). Эта комиссия выплачивается в единицах стоимости, называемых «газом» (gas).

Что такое транзакция в блокчейне Ethereum?

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

ETH транзакция содержит:

Что такое Газ (GAS) и как он рассчитывается?

Газ – это единица, используемая для обозначения размера комиссии за определённое вычислительное действие. Цена газа представляет собой то количество эфиров, которое вы готовы потратить на каждую единицу газа. Она измеряется в «Gwei». «Wei» – это наименьшая единица эфира, 1 эфир = 1⁰¹⁸ 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 эфира.

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

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

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

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

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

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

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

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

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

Поэтому, если транзакция инициирует выполнение действия, в результате которого объём занимаемого хранилища сокращается, то комиссия за выполнение этой операции не взимается, ПЛЮС производится возврат средств за освобождённый объём.

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

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

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

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

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

Вы можете подумать: «Но почему мы должны платить ещё и за хранение данных?» Что ж, точно так же, как и выполнение вычислений, хранение данных в Эфириуме имеет свою стоимость, которую сеть должна взять на себя.

Как изменилась комиссия после обновление London в августе 2021 года?

В августе в блокчейне Ethereum состоялось обновление London. Его ключевым элементом стало предложение EIP-1559, благодаря которому криптовалюта перешла с аукционной модели расчета комиссий на гибридную. В результате было добавлено несколько понятий и механик, с которыми прежде пользователям сталкиваться не приходилось. Обзор изменений приводит Blocknative.

Новая терминология для транзакций в EIP-1559

Для начала напомним: EIP-1559 изменил как механизм расчета комиссий, так и их получателя. Вместо одной лишь цены газа (Gas Price) пользователям теперь нужно обращать внимание на три отдельных параметра:

Транзакции с новыми параметрами называются транзакциями второго типа (Type 2), тогда как старые транзакции, где указывается только цена газа, тоже продолжают поддерживаться и называются транзакциями нулевого типа (Type 0). Заметим, что EIP-1559 не меняет лимит газа (Gas Limit), то есть максимальный объем газа, который разрешено израсходовать отдельной транзакции.

Как определяется базовая комиссия?

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

К примеру:

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

Как выставляется комиссия за приоритетность?

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

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

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

Как рассчитывается максимальная комиссия?

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

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

Пример: Почему комиссия может стать недостаточной

Предположим, вы отправляете транзакцию с выпуском первого блока, когда базовая комиссия равна 100 GWEI. Вы выставляете максимальную комиссию за приоритетность в 2 GWEI, а максимальная комиссия с учетом рекомендации выше будет составлять (2 * 100 + 2) или 202 GWEI.

Но что, если, пока вы будете отправлять транзакцию, произойдет крупный NFT-дроп, и спрос на сетевые ресурсы резко возрастет. Внезапно каждый блок начинает заполняться на 100%, поэтому базовая комиссия увеличивается на максимальные 12,5% с каждым блоком.

В результате базовая комиссия за семь блоков вырастет следующим образом:

Как видите, потребуется шесть последовательных заполненных на 100% блоков, чтобы базовая комиссия выросла вдвое – в данном случае от 100 GWEI до 202,7 GWEI. На практике это означает, что, выставляя максимальную комиссию согласно рекомендациям, вы защищаете транзакцию от падения ниже требований сети по крайней мере на шесть блоков.

Но если комиссия не будет расти? В таком случае реальная комиссия окажется меньше указанной пользователем максимальной.

А что произойдет, если пользователь не оставит запас безопасности и просто выставит максимальную комиссию в 102 GWEI?

Это объясняет, почему расчет максимальной комиссии в EIP-1559 может быть неочевидным:

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

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

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

Есть два типа транзакций:

Все транзакции, независимо от их типа, включают в себя следующие компоненты:

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

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

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

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

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

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

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

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

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

В Ethereum блок состоит из:

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

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

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

Эти конкурирующие блоки называют ещё потерянными, «орфанными» или просто «орфанами» (от англ. orphan) – то есть намайненными блоками, не включёнными в основную цепочку.

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

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

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

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

Заголовок блока состоит из части его содержимого и включает:

Обратите внимание, что заголовок каждого блока содержит три trie-структуры для:

Эти trie-структуры – не что иное, как patricia-деревья Меркла, о которых мы говорили ранее.

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

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

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

Логи содержат следующую информацию:

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

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

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

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

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

Сложность блока влияет на параметр nonce, представляющий собой хэш, который должен быть рассчитан при майнинге блока в алгоритме Proof-of-Work.

Соотношение между сложностью блока и nonce математически выражается следующей формулой:

где Hd – это сложность.

Единственный способ найти значение nonce, отвечающее пороговой сложности, заключается в использовании алгоритма Proof-of-Work для проверки всех возможных вариантов. Ожидаемое время поиска решения пропорционально сложности – чем выше сложность, тем сложнее становится найти значение nonce и тем сложнее валидировать блок, что, в свою очередь, увеличивает время, необходимое для валидации нового блока.

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

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

The following two tabs change content below.
Mining-Cryptocurrency.ru
Материал подготовлен редакцией сайта "Майнинг Криптовалюты", в составе: Главный редактор - Антон Сизов, Журналисты - Игорь Лосев, Виталий Воронов, Дмитрий Марков, Елена Карпина. Мы предоставляем самую актуальную информацию о рынке криптовалют, майнинге и технологии блокчейн. Отказ от ответственности: все материалы на сайте Mining-Cryptocurrency.ru имеют исключительно информативные цели и не являются торговой рекомендацией или публичной офертой к покупке каких-либо криптовалют или осуществлению любых иных инвестиций и финансовых операций.
Exit mobile version