есть хорошее объяснение для газа?

Я хотел бы развернуть контракт, используя трюфель.

На моем счету 0,02 эфира (20000000000000000 вэй). Я установил gas: 4612390truffle.js и ничего не устанавливал для gasPrice. eth.gasPriceвозвращает 1000000000 вэй. Если я умножу gasPriceна gas, я получу 4 612 390 000 000 000, что меньше моих 20 000 000 000 000 000. Но я получил ошибку insufficient funds for gas * price + value. Если я установлю низкую цену на газ, я получу intrinsic gas too low.

Есть ли способ узнать, сколько газа нужно для развертывания моего контракта? В чем разница между gasи gasPrice?

Ответы (2)

Я могу ответить на ваш вопрос о разнице между газом и ценой на газ.

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

Подробнее об этом можно прочитать здесь: https://hackernoon.com/ether-purchase-power-df40a38c5a2f

Спасибо. Означает ли это, что я могу попытаться развернуть свой контракт в тестовой сети, чтобы узнать, сколько газа нужно?
Да, вы можете, например, зайти на remix.ethereum.org и вставить свой код вместо того, который вы видите по умолчанию. Затем справа выберите вкладку «Выполнить» и выберите виртуальную машину JavaScript для среды. Затем нажмите розовую кнопку «Создать». Ваш контракт будет запущен. Затем в средней части, в самом низу, нажмите на иконку с двумя стрелками вверх. Вы увидите консоль, и если развертывание прошло успешно, вы должны увидеть две кнопки «Подробности» и «Отладка». Нажмите «Подробнее». Там вы найдете информацию о вашей транзакции.
Там вы найдете информацию о вашей транзакции, а также стоимость транзакции, которая является ценностью, которую вы ищете. О, еще кое-что. К сожалению, из того, что я вижу, в remix IDE «газ» означает «газ * цена газа», поэтому это может немного сбить с толку, если вы только что прочитали мой предыдущий ответ.

Прежде всего, попробуем прояснить, что такое gas и gasPrice.

Если вы хотите выполнить что-то на виртуальной машине Ethereum (EVM), например транзакцию, для вычислений потребуется газ. Точнее, каждая операция имеет четко определенное количество используемого газа. Следовательно, для транзакции газ, который необходим, равен сумме газа, необходимого для каждой операции EVM. Вы можете указать верхний предел максимального количества газа, необходимого для транзакции. Если вам интересно узнать больше, вы можете посетить сайт yellowpaper.io , где все это обсуждается более подробно. Обратите внимание, что создание (или развертывание) смарт-контракта также стоит газа, потому что вы вызываете конструктор и сохраняете весь код в блокчейне.

Кто-то может спросить, а зачем вообще существует такая вещь, как газ? Хорошо, если бы ваш договор, например, содержал бы

function infiniteLoop() public { 
    while (true) { 
        // do some stuff 
    } 
}

вызов транзакции infiniteLoop()никогда не завершится, и майнеры будут выполняться бесконечно. Идея газа состоит в том, чтобы предотвратить именно это: если есть только ограниченное количество газа, которое можно использовать, исполнение должно остановиться в какой-то момент. Вы можете использовать компилятор Solidity solc, чтобы получить оценку того, сколько газа будет использовать функция. То же самое можно сделать онлайн, используя remix.ethereum.org (скомпилируйте контракт и щелкните конструктор, чтобы получить оценку стоимости газа для развертывания).

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

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