Как узнать, сколько газа использовать при заключении контракта?

Когда я звоню (отправляю транзакцию) контракту, как мне определить, сколько газа использовать? Есть ли способ рассчитать это заранее и что произойдет, если я отправлю слишком много / слишком мало газа?

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

Ответы (2)

API-интерфейсы AssessmentGas есть как в JSON-RPC, так и в Javascript .

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

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

Пользователи, как правило, должны доверять DApp, который они используют, и DApps, которые имеют хороший пользовательский интерфейс и UX, могут указывать пользователю некоторые предполагаемые затраты или, возможно, даже скрывать такие детали, отправляя учетную запись пользователя немного эфира или давая новому пользователю аккаунт, на котором есть немного эфира.

Это возможно, потому что для большинства транзакций требуется очень небольшое количество эфира; 1 эфир равен 10^18 вэй и может выполнять множество транзакций. Например, если кто-то просто использует Ethereum для передачи wei/ether, при текущей цене на газ в 5 Gigawei пользователь может сделать около 9523 переводов с 1 эфиром. Это связано с тем, что транзакция по передаче стоимости стоит 21000 газа, поэтому вычисление составляет 1e18 / (21000 * 5e9) = 9523.80.

Для тех, кто читал это в июне 2017 года, сейчас это 40 центов США (0,40 доллара США) за транзакцию. Когда это было написано, ETH стоил 1,53 доллара, то есть около 0,16 цента США (0,0016 доллара) цента за транзакцию. Поскольку эфир так резко вырос, ключевым моментом станет эффективное программирование контрактов. Если бы я хотел перевести деньги прямо сейчас, минимальный газ составляет 0,0024 ETH, что составляет 91 цент США. Цены транзакций растут, потому что валюта сейчас так высоко ценится.
Я обновил ответ, чтобы отразить, что цены на газ теперь составляют около 5 Gwei вместо 50 Gwei. Если эфир стоит 300 долларов, то комиссия за транзакцию составляет 3,15 цента (21000 * 5e9 / 1e18 * 300 = 0,0315) . ethgasstation.info также предлагает текущую безопасную низкую цену на газ в размере 2 Gwei, что приводит к комиссии в размере 1,26 цента.

Вопрос также помечает вызов контракта, поэтому вот как это сделать в web3js:

//whitelist control
const sender = "0xB1C8C55C812ec8A6296D98bD225baC443127a5cc"; 

const argumentsArray = [
    //argument address to whitelist
    "0xbA1d45a797F0f4474F47996551EC983B3FBa80BA"
];

const whitelistAddressContractCall = whitelistContract.methods["whitelistFunction"];

const gasEstimate = await whitelistAddressContractCall
    .apply(null, argumentsArray)
    .estimateGas({
        gas: 8000000,
        from: sender
    });

console.log("gasEstimate: " + gasEstimate)

Обратите внимание, что контракт (в данном случае whitelistContract) также может быть создан из ABI.

Подробности здесь: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-estimategas