Что такое газ на Ethereum (и других блокчейнах)? Глубокое погружение


Что такое Gas?

Газ – это один из самых важных и фундаментальных аспектов понимания сети Ethereum.

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

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

  • Как рассчитывается эта комиссия за транзакцию?
  • Сколько ETH нужно заплатить за транзакцию?
  • Почему некоторые транзакции дороже других?
  • Почему существует комиссия за транзакции?

Ответ на эти вопросы кроется в концепции газа.

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

  • Обновление до Лондона
  • Обновление после Лондона

До-лондонское обновление хорошо для понимания и легче для восприятия на начальном этапе, чем после-лондонское обновление, а также дает мотивацию для обновления.

Газ: Общие понятия

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

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

Плата за газ взимается в национальной валюте Ethereum – эфире или ETH. Способ расчета платы за газ немного отличается до и после Лондонского обновления.

ПРИМЕЧАНИЕ: Обычно, когда кто-то говорит “газ”, он имеет в виду “газовые сборы”, а не саму единицу. Однако для целей данного руководства мы будем технически корректны и будем говорить “газ”, когда речь идет о единице, и “газовые сборы”, когда речь идет о сборах в Эфире.

До Лондонского обновления

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

gas fees = gas spent * gas price

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

Цены на газ номинированы в гвеях – деноминации ETH.

1 Gwei = 0.000000001 ETH

1 ETH = 10^9 Gwei

Поэтому вместо того, чтобы говорить, что цена газа составляет 0,000000001 ETH, вы можете сказать, что цена газа составляет 1 Gwei.

Gwei означает “гига-вей”, что равно 1 000 000 000 (10^9) вей. Вей – это наименьший номинал ETH. 1 ETH = 10^18 вей.

Пример

Самой дешевой транзакцией, с точки зрения количества газа, необходимого для выполнения, является перевод ETH с одного счета на другой. Эта транзакция стоит 21 000 единиц газа.

Предположим, Алиса хочет заплатить Бобу 1 ETH. Стоимость газа составляет 21 000 единиц газа. Предположим, что цена газа составляет 200 Gwei.

Следовательно, плата за газ = 21 000 * 200 = 4 200 000 Gwei = 0,0042 ETH.

Таким образом, когда Алиса отправит деньги, с ее счета будет списано 1,0042 ETH, а Боб получит 1 ETH. Плата в размере 0,0042 ETH идет майнеру, который добыл блок, содержащий транзакцию Алисы.

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

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

Расчет стоимости газа

Когда смарт-контракт компилируется в байткод, перед развертыванием в сети Ethereum он компилируется в OPCODES. Это простые операции, которые могут выполняться непосредственно на виртуальной машине Ethereum. Их можно рассматривать как аналог базовых операций, которые могут выполняться непосредственно на вашем процессоре Intel или AMD. Эти OPCODES включают такие базовые операции, как ADD, MUL, DIV, SUB, SHA3 и т. д.

Каждый OPCODE имеет фиксированную стоимость газа. Стоимость газа конкретной функции смарт-контракта равна сумме стоимости газа всех ее ОПКОДов. Список всех OPCODES и связанных с ними затрат на газ можно найти здесь.

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

Лимиты газа

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

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

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

Лимит газа относится к максимальному количеству газа (единиц), которое вы готовы использовать для транзакции. Он устанавливается пользователем.

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

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

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

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

Ограничения на количество газа в блоке

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

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

Обновление после Лондона

5 августа 2021 года в сети Ethereum было реализовано обновление London Upgrade. Это обновление в первую очередь дало три преимущества:

  • Более точные оценки платы за газ
  • Более быстрое включение транзакций
  • Сжигание процента ETH, используемого в качестве платы за транзакции.

Для целей данной статьи нас в первую очередь интересуют первые два пункта.

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

Однако, начиная с лондонского апгрейда, в каждом блоке была установлена базовая цена на газ. Это была минимальная цена за единицу газа для включения вашей транзакции в этот блок. Эта цена рассчитывалась сетью на основе спроса на место в блоке. Эти базовые сборы сжигались сетью Ethereum, что позволяло навсегда избавиться от ETH для компенсации эмиссии. Поскольку Ethereum не имеет общего максимального предложения (в отличие от Bitcoin, максимальное предложение которого составляет 21 млн биткоинов), сжигание помогает предложению ETH достичь равновесия, не раздувая его до бесконечности.

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

С этим обновлением формула для расчета платы за газ изменилась на следующую:

gas fees = gas spent * (base fees + priority fees)

Пример

Возвращаясь к предыдущему примеру, если Алиса должна заплатить Бобу 1 ETH, стоимость газа (в единицах) составит 21 000. Предположим, что базовая плата составляет 100 Gwei, и Алиса решает включить чаевые в размере 10 Gwei.

total gas fees = 21,000 * (100 Gwei + 10 Gwei) = 2,310,000 Gwei = 0.00231 ETH

Переменные размеры блоков

До обновления в Лондоне лимит газа в блоках был постоянным для всех блоков. Максимальный объем каждого блока составлял 15 М газа. Во время высокого спроса это приводило к плохому пользовательскому опыту, так как блоки работали на полную мощность, и пользователям приходилось ждать, пока спрос снизится, чтобы попасть в блок.

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

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

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

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

Переменная базовая плата

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

Базовая плата увеличивается максимум на 12,5% за блок, если превышен целевой показатель 15M газа. Такой экспоненциальный рост делает финансово невыгодным, чтобы газ в блоке оставался высоким бесконечно, что позволяет узлам оставаться синхронизированными с сетью и не выполнять постоянно блоки с 30М газа.

В данном примере в блоке 2 наблюдалось максимальное увеличение с целевых 15М до 30М. В результате базовая плата за блок 3 была увеличена на 12,5% со 100 Гвэй до 112,5 Гвэй.

Аналогично, поскольку блок 3 также достиг максимального предела в 30М газа, что является максимально возможным расстоянием от цели, базовая плата для блока 4 была снова увеличена на 12,5% до 126,6 Гвэй. И так далее…

Это продолжалось, и к 8 блоку базовая плата составила 202,7 Гвэй. Это на 102,7% больше, чем 7 блоков назад! К блоку 100 базовая комиссия составила 10302608,6 Gwei – это безумие (и нереальность). Это означает, что простой перевод ETH на блоке 100 будет стоить вам (21000 * 10302608.6 Gwei) = 216 ETH.

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

Улучшенная оценка газа

По сравнению с механикой, использовавшейся до обновления Лондона, изменение механизма базовой платы позволило сделать прогнозирование платы гораздо более надежным. Следуя приведенной выше таблице, для создания транзакции в блоке номер 9, кошелек может со 100% уверенностью сообщить пользователю, что максимальная базовая комиссия, которая будет добавлена к следующему блоку, составляет текущая базовая комиссия (базовая комиссия предыдущего блока) * 112,5% = 202,8 * 112,5/100 или 228,1 Gwei.

Таким образом, теперь кошельки знают минимальный и максимальный диапазон базовых комиссий, которые они могут предоставить пользователю при расчете. Минимум – это текущая базовая плата, а максимум – текущая базовая плата * 112,5% Пользователь может просто скорректировать чаевые, которые обычно составляют часть базовой платы, для майнера.

Зачем существует Gas?

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

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

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

contract Gas {
    uint public i = 0;

    // Using up all of the gas that you send causes your transaction to fail.
    // State changes are undone.
    // Gas spent are not refunded.
    function forever() public {
        // Here we run a loop until all of the gas are spent
        // and the transaction fails
        while (true) {
            i += 1;
        }
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Снижение платы за газ

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

Основная цель Ethereum – быть высокозащищенной и высокодецентрализованной блокчейн-сетью, способной выполнять смарт-контракты.

Но все это не имеет значения, если пользователям приходится тратить сотни долларов, чтобы перевести один доллар.

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

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

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

Ресурсы

Следующие ресурсы являются рекомендуемыми, но необязательными для чтения/просмотра, чтобы узнать больше о газе:

  • Видео: Ethereum Gas Explained
  • Лондонский апгрейд
  • Оптимизация газа в смарт-контрактах
  • Подробнее о масштабировании второго уровня

Эта статья предоставлена LearnWeb3 DAO. Бесплатная комплексная программа обучения по блокчейну от А до Я для разработчиков по всему миру.

Все от “Что такое блокчейн” до “Взлома смарт-контрактов” – и все, что между ними, а также многое другое!
Присоединяйтесь к нам сейчас, чтобы начать строить вместе с 25 000+ разработчиками.

Сайт
Discord
Twitter

Оцените статью
Procodings.ru
Добавить комментарий