Хранение газа внутри контракта - PullRequest
0 голосов
/ 08 декабря 2018

Можно ли хранить газ, который не используется внутри контракта, чтобы его можно было использовать позднее (при условии, что можно потребовать определенное количество газа для вызова функции)?

IЯ пытаюсь написать контракт, который требует ввода данных пользователем и что-то делает на основе этого ввода в более поздний момент времени, который потребует газа.

Поскольку это не кажется действительно привлекательным, платить этот газ владельцам контрактакарман Я ищу способ заставить пользователя контракта платить за газ, необходимый для выполнения запроса.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

На самом деле в контракте действительно возможно хранить газ для последующего использования.

В EVM есть некоторые операции, которые могут вернуть часть газа, который был оплачен ранее:

  • SSTORE : изменение значения хранения с ненулевого значения на ноль выпускает 15000 газов
  • SELFDESTRUCT : уничтожение контракта выпускает 24000 газов

Тоозначает, что, например, для хранения некоторого значения требуется 20 тыс. газа, а для удаления его из хранилища требуется только 5 тыс. газа и высвобождается 15 тыс. газа для последующего использования в той же транзакции .На самом деле это награда за очистку хранилища блокчейнов.

Более подробную информацию вы можете получить, выполнив поиск "Возврат" в Желтая бумага .

Существует GasToken проект, который использует эту функцию для хранения газа по контракту, когда он дешевый, и для выпуска (и использования), когда он дорогой.транзакции без оплаты газа вообще.

0 голосов
/ 08 декабря 2018

Похоже, вы немного перепутали значение газа.Газ - это эфир, который вы должны заплатить, чтобы добыть вашу транзакцию.Газ всегда оплачивается по адресу, который вызывает функцию (Контракт), а не из самого Контракта или владельца Контракта, поэтому он не выходит из кармана владельцев.Кроме того, газ - это в основном эфир, поэтому «хранение газа» означает хранение эфира в контракте, но вы не можете хранить газ, который используется для добычи транзакции.Если вы хотите сохранить Ether, вы должны отправить Ether в контракт или пользователи должны отправлять Ether при вызове функции.

...