Будет ли revert() возмещать весь газ транзакции или только оставшийся газ?

Согласно документам revert() не будет потреблять никакого газа:

Обратите внимание, что исключения в стиле утверждения потребляют весь газ, доступный для вызова, в то время как исключения в стиле возврата не будут потреблять никакого газа, начиная с выпуска Metropolis.

Но я часто читаю, что revert()возместят неиспользованный газ, например, в этом ответе .

Я думаю, что возврат ВСЕГО газа откроет ворота для DOS-атак, поэтому я предполагаю, что будет возмещен только неиспользованный газ. Но хотелось бы подтверждения :-)

Ответы (1)

Только оставшийся газ.

revertсохранит неиспользованный газ: это означает, что у вызывающего абонента будет неиспользованный газ для выполнения дальнейших вычислений. отличается, и вы правы, что если revertвернуть газ вызывающему абоненту, это позволит атаковать DoS (вызывающий абонент может зацикливаться много раз, затем revertзацикливаться и revertбесконечно).

Итак, можем ли мы сказать, что использование revert() будет предпочтительнее, чем throw, поскольку это экономит вызывающему абоненту немного газа? Например, в случаях, когда вызывающая сторона делает ошибку и предоставляет неправильные параметры, что приводит к возникновению ошибки в контракте.
@TripleSpeeder Да, throwустарело.
@eth, какова стоимость самого реверта?
@ user2284570, согласно этому ответу, require (который, по сути, обертывает возврат), делает очень мало, около 23 газов: stackoverflow.com/a/48085107/10261711