Статьи

Ethereum: как рассчитываются транзакционные издержки

Эта статья о Ethereum Transaction Costs была первоначально опубликована на веб-сайте Bruno’s Bitfalls и воспроизводится здесь с разрешения.

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


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

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


С Ethereum, учитывая, что мы говорим о языке программирования в протоколе, возможно быть очень требовательным в вычислительном отношении с очень небольшим количеством текста или кода (что было бы очень дешево в BTC-стихе). Давайте посмотрим на этот цикл, например:

while (i++ < 1000) {
    j = j + i;
}

Этот цикл означает «до тех пор, пока iijji

Чтобы справедливо оплатить эти вычислительные затраты — поскольку они должны выполняться сразу на машинах всех майнеров, а они тратят на это свои ресурсы и время, — была введена концепция газа . Газ используется для оплаты этих так называемых умных контрактов (программ Ethereum) внутри EVM. Например, приведенное выше ij

Чтобы правильно объяснить газ , давайте сначала рассмотрим EVM .

EVM

EVM расшифровывается как Ethereum Virtual Machine . Но что такое виртуальная машина?

Виртуальная машина

Виртуальная машина — это программное обеспечение, работающее на определенном компьютере, на котором установлена ​​другая операционная система, полностью инкапсулированная в основную. Например, виртуальная машина позволяет вам запускать Windows внутри Linux, Linux внутри Windows, Windows на macOS, как показано на рисунке ниже, или любую другую комбинацию.

Windows внутри macOS

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

EVM

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

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

Однако выполнение этих программ не является бесплатным. Шахтеры тратят на это свое электричество, время и оборудование. Чтобы оплатить их усилия по выполнению компьютерных инструкций (например, «сохранить значение 5 в переменной X»), была введена концепция газа .

Газ, Эфир и GWei

Газ — это единица стоимости для конкретной операции, которую должен выполнить компьютер, и он выполняет эту инструкцию, когда мы транслируем транзакцию, которая содержит программу Ethereum для запуска dapp . Например, сложение двух чисел стоит 3 газа. Умножение их стоит 5 газов. Хранение 256-битного слова в блокчейне стоит 20000 газа, что означает, что хранение 1 КБ данных стоит 640000 газа.

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

единица измерения вэй
вэй 1
квэй / ада / фемтосетер +1,000
mwei / babbage / picoether 1.000.000
гвей / шеннон / наноэфир / нано 1.000.000.000
сабо / микроэфир / микро 1.000.000.000.000
Финни / Миллиер / Милли 1.000.000.000.000.000
эфир 1.000.000.000.000.000.000

Совет: используйте этот конвертер для преобразования между единицами эфира.

Согласно этому информативному сайту , текущая средняя цена на газ составляет 10 ГВтэй (10 гигавей). Учитывая, что 1 ГВтэй составляет одну миллиардную часть эфира, вышеупомянутая стоимость хранения слова в 1 килобайт составляет 640000 * 10, что составляет 6,4 миллиона ГВтэй. Это составляет 0,0064 эт, что при цене 450 долларов за эфир составляет около 2,88 доллара.

Текст от начала таблицы выше до >>this specific marker<< Поэтому хранение этого небольшого количества текста в блокчейне на самом деле стоит $ 2,88. Однако это только стоимость хранения! У нашего умного контракта также может быть некоторая логика, например, суммирование или умножение, а затем сохранение чисел или триггеры, которые активируются в конкретном добытом блоке и т. Д. Очевидно, что хранение данных в самой цепочке блоков невероятно дорого. Хранение лучше в BigchainDB или IPFS , в то время как блокчейн — лучшее решение для глобальной обработки и проверки этих данных.

Почему газ?

Зачем платить за газ, а не эфир напрямую?

Все цены на газ для всех возможных операций, которые может выполнять EVM, жестко прописаны в протоколе Ethereum и в клиентах (программах), к которым мы к нему подключаемся, таких как Geth, Eth, Parity и т. Д. Если код перечисляет их в эфире, тогда мы должны были бы обновлять код каждый раз, когда значение эфира колебалось, чтобы поддерживать цену вычислительных усилий в нормальном диапазоне и поддерживать работоспособность системы, что, очевидно, неустойчиво.

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

Это приводит нас к нашему последнему разделу.

Лимит / стоимость против цены

Лимит газа — это максимальное количество газа, которое мы готовы потратить на транзакцию. Большая часть программного обеспечения, которое мы используем для трансляции транзакций Ethereum, имеет возможность автоматически оценивать количество газа, которое будет необходимо для выполнения функции. Обычно он предлагает фигуру сразу. Например, простые денежные транзакции A-> B обычно требуют только 21000 газа. Более сложные, которые вызывают определенные умные контрактные функции, могут столкнуться с сотнями тысяч или даже миллионами газа. Израсходованное количество газа называется стоимостью газа .

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

Стоимость газа — это цена GWei за единицу газа.

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

Давайте посмотрим на пример.

25 гвей

На изображении выше мы выполняем транзакцию, которая, из-за ее сложности, оценивает, что ей потребуется 135963 газа. При цене 25 GWei максимальная комиссия за транзакцию, которую мы будем платить, составляет 1,57 долл. США, что тривиально, если смотреть на общую сумму, которую мы отправляем (0,38 долл. США = 178 долл. США). Если мы поднимем цену на газ до 250 ГВтэй, сделка станет пропорционально дороже:

250 ГВт

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

Вывод

Газ — это единица работы, затраченная на одну вычислительную операцию в виртуальной машине Эфириума. Он оплачивается в эфире, токене протокола Ethereum, и каждая вычислительная операция имеет свою стоимость газа. Цена на газ (в GWei или 1 миллиардная часть эфира) варьируется в зависимости от загруженности сети и предпочтений пользователя для быстрого подтверждения.

Для умного контракта, который мы хотим развернуть в сети Ethereum, важны два условия: лимит газа и цена на газ. Лимит газа — это максимальное количество газа, которое мы готовы потратить на выполнение транзакции. Фактически необходимое количество газа (известное только после выполнения транзакции) называется стоимостью газа . Цена на газ — это цена за единицу газа, выраженная в GWei (или миллиардных долях эфира). Общая стоимость транзакции будет зависеть от цены газа и цены на газ, а максимальная комиссия за транзакцию будет зависеть от лимита газа и цены на газ. Разница возвращается отправителю транзакции, чтобы система была честной и работоспособной.