Правило 1/64
До введения стандарта EIP-150, вызывающий (caller) из одного контракта передавал вызываемому (callee) в другой контракт весь свой имеющийся газ.
Тогда, для того, чтобы предотвратить ошибку "stack too deep", максимальное количество вызовов (calls) могло быть не больше 1024, после чего последний вызов обрывался (возвращал fail).
Недобросовестные разработчики могли использовать весь доступный газ из чужого контракта в своих целях, что приводило к тому, что контракт не мог выполнить даже простую транзакцию, типа address.send.
Тогда и был создан стандарт EIP-150, который позволял передать газ не больше, чем рассчитано по специальной формуле, которую можно увидеть на скрине выше.
Правило 1/64 означает, что при любых обстоятельствах у вызывающего останется 1/64 часть от всего доступного газа.
Другой особенность EIP-150 было то, что опкод call теперь имел не фиксированное количество газа, а максимально возможное. При этом, если операция требовала больше газа, чем было возможно по формуле, то транзакция все равно не откатывалась.
Перевод подготовлен на основе ветки Твиттера.
#gas #eip150
Post #642
378
- 👍 2
- ❤ 1