Эфириум - Высокая стоимость газа - PullRequest
0 голосов
/ 13 июня 2018

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

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

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 байта.Откуда эта огромная стоимость?

1 Ответ

0 голосов
/ 13 июня 2018

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

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

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

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

...