209 похожих чатов

Можно ли в солидити сделать так, что если транзакция

не проходит, чтобы она не писалась в блокчейн и не тратился газ?

10 ответов

6 просмотров

Не проходит т.е. по какому то условию?

Iván
да

assert, require

Iván- Автор вопроса

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

Если коротко то нет. Если транзакция не проходит, какой то газ все равно потратишь.

Iván- Автор вопроса
Kosta
используйте estimateGas [1] перед отправкой транза...

не из-за газа не проходит, а потому что при вызове функции на контрактеА, которая обращается к другому контрактуБ, на стороне контракта Б как раз require не выполняется, транзакция не проходит, пишется в блок, газ тратится.

Iván- Автор вопроса
ALΞX 📍Seoul
Если коротко то нет. Если транзакция не проходит, ...

а если я require из контрактаБ продублирую в контрактА, то все равно будет писаться в блокчейн транза?

Iván
а если я require из контрактаБ продублирую в контр...

либо estimateGas, либо еще все проверки можно сделать как view метод и перед вызовом транзы сначала вызвать метод проверки. Но суть в том что даже если require, то это не изменит стейт контракта (все изменения откатаны будут) но майнер потратит ресурсы на исполнение и ты за них заплатишь

Iván- Автор вопроса
ALΞX 📍Seoul
либо estimateGas, либо еще все проверки можно сдел...

но если функция, которую хочу вызвать на контарктеА, изменяет стейт контрактаБ, а require только слушает Б, и стейт не меняет на Б (при этом меняет, допустим, одну переменную на А), то заплачено газа будет меньше, чем если будет неудачная попытка поменять стейт Б?

Похожие вопросы

Обсуждают сегодня

Карта сайта