Как была выбрана стоимость газа для инструкций виртуальной машины Ethereum?

Разные инструкции EVM имеют разную стоимость попутного газа - вы можете посмотреть список цен на газ в приложении G к желтой книге .

Хотя грубые значения этих чисел выглядят вполне разумными, точные значения по-прежнему выглядят так, как будто они были выбраны несколько произвольно. С другой стороны, некоторые значения выглядят странно конкретными. Есть ли более глубокая причина для выбора именно этих значений?

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

Ответы (3)

Я делюсь с вами электронной таблицей , которая объясняет формулу стоимости газа для каждого OPCODE.

Версия 1.0 была создана Core Devs of Ethereum. Я с нетерпением жду, как сформулировать будущие обновления этого. Это метаконсенсусный вызов, который необходимо решить.

Сопутствующий вопрос - стоимость газа в Testnet одинакова или отличается?
@BrianArmstrong Да, такие же EVM и затраты на газ в тестовых сетях Ethereum.

Общая стоимость транзакции, которая создает контракт или выполняет контракт, основана на 2 факторах:

gasUsedэто весь газ, который потребляется

gasPriceуказанный в сделке

Total cost = gasUsed * gasPrice

газиспользованный

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

Для оценки gasUsedсуществует API оценки Gas, который можно использовать, но с некоторыми оговорками .

газЦена

Пользователь создает и подписывает транзакцию, и каждый пользователь может указать все gasPrice, что пожелает, включая ноль. Однако клиенты Ethereum, запущенные на Frontier, по умолчанию имели gasPrice 0,05e12 wei. Поскольку майнеры оптимизируют свой доход, если большинство транзакций отправляются с gasPrice 0,05e12 wei, будет сложно убедить майнера принять транзакцию, в которой указана более низкая или нулевая gasPrice. Как было выбрано значение по умолчанию, задается в этом вопросе .

Пример

Возьмем контракт, который просто добавляет 2 числа. Из таблицы выше ADDпотребляет 3 газа.

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

3 * 0,05e12 = 1,5e11 вэй

Поскольку 1 эфир равен 1e18 wei, общая стоимость составит 0,00000015 эфира.

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

В случае, если этот ответ не имеет большого смысла, это потому, что он изначально был ответом на ethereum.stackexchange.com/q/799/42 до того, как он был объединен/перемещен сюда.

Каждая инструкция в виртуальной машине Ethereum имеет стоимость, измеряемую в единицах газа. Таблица таких затрат для каждой инструкции называется «График комиссий» и является приложением к желтой бумаге Ethereum (хотя в будущем она может измениться). Единственный способ определить (в общем), сколько газа будет стоить определенный вызов контракта, — это запустить его (не обязательно в блокчейне, а в «локальном симуляторе»). Однако, если код контракта взаимодействует с состоянием блокчейна (например, с помощью инструкций BLOCKHASH, TIMESTAMP, BALANCE), выполнение не может быть точно смоделировано. Поэтому в некоторых случаях реальная стоимость исполнения будет известна только тогда, когда транзакция будет включена в блок. Вот почему вы можете попытаться оценить верхнюю границу того, сколько газа потребуется, и отправить достаточное количество эфира с транзакцией.

В случае, если этот ответ не имеет большого смысла, это потому, что он изначально был ответом на ethereum.stackexchange.com/questions/799/… до того, как он был объединен/перемещен сюда.