Невозможно сопоставить вычисленное значение "использованный газ" с помощью IDE Solidity с проводником etherscan "Газ, используемый транзакцией"
Я пытаюсь найти газ, используемый транзакцией при нажатии на метод в IDE твердости ремикса. мой код, как показано ниже. Значение, которое я получаю в переменной gasUsed, отличается от значения, которое отображается в проводнике etherscan для этой транзакции. Было бы полезно, если бы кто-то помог мне исправить мой код.
pragma solidity ^0.4.22;
contract id{
uint public id;
uint public senderValue;
uint256 public gasUsed;
constructor() public {
senderValue= msg.sender;
}
function setId(uint _id) public {
uint256 gasInitial = gasleft();
id= _id;
setGasUsed(gasInitial - gasleft());
}
function setGasUsed(uint256 _gasUsed) private {
gasUsed = _gasUsed;
}
}
2 ответа
Значение "использованный газ" в ремиксе IDE - это стоимость выполнения, а значение "газ, используемый транзакцией" в эфире - "стоимость транзакции".
Затраты на выполнение основаны на стоимости вычислительных операций, которые выполняются в результате транзакции.
Затраты на транзакции всегда основаны на стоимости данных, которые вы будете отправлять в блокчейн. Это зависит от того,
- базовая стоимость сделки (21000 газа)
- Стоимость контракта на размещение (32000 газа)
- стоимость каждого нулевого байта данных или кода для транзакции.
- стоимость каждого ненулевого байта данных или кода для транзакции.
Вы можете легко понять это изображение
Надеюсь, что этот ответ очистит ваши сомнения.
Хороший вопрос, я тоже проверял. Это означает, что, gasleft()
равняется 20020 газу перед выполнением gasUsed2 = gasleft();
, И после выполнения gasUsed2 = gasleft();
, gasleft()
= 0
test () транзакция стоит 61475 газа
gasUsed1 равно 40033 газа
gasUsed2 равно 20020 газа
pragma solidity ^0.4.22;
contract id {
uint256 public gasUsed1;
uint256 public gasUsed2;
function test() public {
gasUsed1 = gasleft();
gasUsed2 = gasleft();
}
}