Эфириум — высокая стоимость газа

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

У меня есть функция в солидности:

function setMessage(uint8[] _fMessage) public returns (uint256){
    emit Message(_fMessage);
}

И мое событие:

 event Message(uint8[] message);

Когда я вызываю это, используя это: EthProj.setMessage.sendTransaction([72, 193, 77], {from: my address})

где EthProj — мой контракт. Как это использует 25027 газа. Когда я запускаю eth.getTransactionReceipt с transactionHash моей транзакции, он говорит: gasUsed: 25027. В соответствии с этим: https://github.com/djrtwo/evm-opcode-gas-costs/blob/master/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv, более конкретно, эта часть LOG0 375 + 8 * (number of bytes in log data) должна стоить всего около 400 газов, так как в событии всего 3 байта. Откуда такая огромная стоимость?


person Cal W    schedule 13.06.2018    source источник


Ответы (1)


Каждая транзакция имеет непосредственную внутреннюю стоимость газа в размере 21000. Из документации Ethereum:

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

Оттуда каждый выполненный код операции потребляет газ. Это включает в себя такие вещи, как состояние чтения, возврат значения, создание события и т. д. Расчет, на который вы ссылаетесь, относится только к той части, где данные события записываются в состояние.

Для более подробного объяснения того, сколько газа будет потреблять транзакция, см. noreferrer">таблица газовых кодов операций (эта версия относится к первому запуску, но я еще не видел обновленной). Вы также можете ознакомиться с этим описанием транзакционных издержек.

person Adam Kipnis    schedule 13.06.2018
comment
Спасибо за ответ - person Cal W; 13.06.2018