Разное количество газа для одной и той же транзакции - PullRequest
0 голосов
/ 30 апреля 2018

Хотелось бы узнать, как точно рассчитать количество газа, использованного в транзакции.

В Remix я использовал первую учетную запись и вызывал метод в моем смарт-контракте с 2 параметрами, строкой со значением «p1» и uint со значением 101.

Стоимость сделки составляет 198996 газа, а стоимость исполнения - 176892 газа

Я использовал второй аккаунт и вызывал тот же метод с тем же параметром {строка со значением "p1" и uint со значением 101}, но стоимость транзакции составила 145032 газа, а стоимость выполнения - 122928

Мой вопрос: как может быть разным общее количество потребляемого газа? Хотя я использовал одинаковую загрузку входных данных (одинаковую длину строки и одинаковое значение uint)? Как я могу рассчитать, сколько газа будет стоить каждый узел в сети, если они передают один и тот же параметр и тот же метод, но стоимость отличается?

Если 2 узла в сети вызывают один и тот же метод с одним и тем же параметром, предполагается, что оба платят одинаковое количество газа, я пишу? Если нет, то как я могу проанализировать, сколько газа будет стоить каждый узел для взаимодействия со смарт-контрактом ...

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2018

Если вы поделитесь кодом смарт-контракта, вам будет легче помочь.

Как обоснованное предположение, я предполагаю, что каждая транзакция устанавливает переменную состояния? Это включает в себя код операции SSTORE, а стоимость газа в SSTORE зависит от значения, которое хранится, и значения, ранее находившегося в хранилище. Хранение ненулевого значения там, где раньше был ноль (например, непустая строка, где раньше была пустая строка), стоит 20 000 газов, а хранение ненулевого значения, где уже был ненулевой, стоит всего 5000 газов.

...