Разное количество газа для одной транзакции
Я хотел бы знать, как я могу точно рассчитать количество газа, используемого в транзакции.
В Remix я использовал первую учетную запись и вызывал метод в моем смарт-контракте с 2 параметрами, строкой со значением "p1" и uint со значением 101.
Стоимость сделки составляет 198996 газа, а стоимость исполнения - 176892 газа.
Я использовал вторую учетную запись и вызывал тот же метод с тем же параметром {строка со значением "p1" и uint со значением 101}, но стоимость транзакции составила 145032 газа, а стоимость выполнения - 122928.
У меня вопрос: как общее количество потребляемого газа может быть разным? Хотя я использовал одинаковую загрузку входных данных (одинаковую длину строки и одинаковое значение uint)? Как я могу рассчитать, сколько газа будет стоить каждый узел в сети, если они передают один и тот же параметр и тот же метод, но стоимость отличается?
Если 2 узла в сети вызывают один и тот же метод с одним и тем же параметром, предполагается, что оба платят одинаковое количество газа, я пишу? Если нет, то как я могу проанализировать, сколько газа будет стоить каждый узел для взаимодействия со смарт-контрактом?
Спасибо
1 ответ
Если вы поделитесь кодом смарт-контракта, вам будет легче помочь.
В качестве обоснованного предположения я предполагаю, что каждая транзакция устанавливает переменную состояния? Это включает в себя код операции SSTORE, а стоимость газа в SSTORE зависит от значения, которое будет сохранено, и значения, ранее находившегося в хранилище. Хранение ненулевого значения там, где раньше был ноль (например, непустая строка, где раньше была пустая строка), стоит 20 000 газов, а хранение ненулевого значения, где уже был ненулевой, стоит всего 5000 газов.