Когда я звоню (отправляю транзакцию) контракту, как мне определить, сколько газа использовать? Есть ли способ рассчитать это заранее и что произойдет, если я отправлю слишком много / слишком мало газа?
API-интерфейсы AssessmentGas есть как в JSON-RPC, так и в Javascript .
Это оценки , и для разработчиков, которые хотят большей точности, требуется тестирование, возможно, в частной цепочке.
Если подается слишком много газа, избыточный газ преобразуется в эфир и возвращается обратно. Если указано слишком мало газа, весь указанный газ конфискуется майнером, и транзакция отменяется: точно так же, как контракт никогда не вызывался.
Пользователи, как правило, должны доверять DApp, который они используют, и DApps, которые имеют хороший пользовательский интерфейс и UX, могут указывать пользователю некоторые предполагаемые затраты или, возможно, даже скрывать такие детали, отправляя учетную запись пользователя немного эфира или давая новому пользователю аккаунт, на котором есть немного эфира.
Это возможно, потому что для большинства транзакций требуется очень небольшое количество эфира; 1 эфир равен 10^18 вэй и может выполнять множество транзакций. Например, если кто-то просто использует Ethereum для передачи wei/ether, при текущей цене на газ в 5 Gigawei пользователь может сделать около 9523 переводов с 1 эфиром. Это связано с тем, что транзакция по передаче стоимости стоит 21000 газа, поэтому вычисление составляет 1e18 / (21000 * 5e9) = 9523.80
.
Вопрос также помечает вызов контракта, поэтому вот как это сделать в 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
Джефф Коулман