Невозможно сопоставить вычисленное значение "использованный газ" с помощью 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 - это стоимость выполнения, а значение "газ, используемый транзакцией" в эфире - "стоимость транзакции".

Затраты на выполнение основаны на стоимости вычислительных операций, которые выполняются в результате транзакции.

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

  1. базовая стоимость сделки (21000 газа)
  2. Стоимость контракта на размещение (32000 газа)
  3. стоимость каждого нулевого байта данных или кода для транзакции.
  4. стоимость каждого ненулевого байта данных или кода для транзакции.

Вы можете легко понять это изображение введите описание изображения здесь

Надеюсь, что этот ответ очистит ваши сомнения.

Хороший вопрос, я тоже проверял. Это означает, что, 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();
    }
}
Другие вопросы по тегам