не проходит, чтобы она не писалась в блокчейн и не тратился газ?
Не проходит т.е. по какому то условию?
assert, require
спасибо
используйте estimateGas [1] перед отправкой транзакции. Это позволит вам не потратить газ вообще, если транзакция фейлится (с оговорками [2]). Но это не солидити, конечно. На уровне смартконтракта вам верно посоветовали require или revert. Но в этом случае газ вы всё равно потратите, просто меньше. Чем раньше require ипользуется в коде — тем лучше. [1] https://eth.wiki/json-rpc/API#eth_estimategas [2] https://gist.github.com/spalladino/a349f0ca53dbb5fc3914243aaf7ea8c6#about-gas
Если коротко то нет. Если транзакция не проходит, какой то газ все равно потратишь.
не из-за газа не проходит, а потому что при вызове функции на контрактеА, которая обращается к другому контрактуБ, на стороне контракта Б как раз require не выполняется, транзакция не проходит, пишется в блок, газ тратится.
а если я require из контрактаБ продублирую в контрактА, то все равно будет писаться в блокчейн транза?
либо estimateGas, либо еще все проверки можно сделать как view метод и перед вызовом транзы сначала вызвать метод проверки. Но суть в том что даже если require, то это не изменит стейт контракта (все изменения откатаны будут) но майнер потратит ресурсы на исполнение и ты за них заплатишь
но если функция, которую хочу вызвать на контарктеА, изменяет стейт контрактаБ, а require только слушает Б, и стейт не меняет на Б (при этом меняет, допустим, одну переменную на А), то заплачено газа будет меньше, чем если будет неудачная попытка поменять стейт Б?
Обсуждают сегодня