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

Товарищи, как контракту посчитать эфир, затраченный на его вызов? Это

для того, чтобы контракт смог возместить вызывающему расход на свой вызов. Вариант такой: засекаем gasleft() вначале и в конце вызванной функции, добавляем константу, умножаем на tx.gasprice. Есть ли тут уязвимеость?

8 ответов

9 просмотров

уязвимость в том что если возвращаешь больше 100% от потраченного, можно задрать gas price

banteg
уязвимость в том что если возвращаешь больше 100% ...

А этого можно добиться с помощью газтокенов / chi / селфдестрактов

Denis-Glotov Автор вопроса
banteg
уязвимость в том что если возвращаешь больше 100% ...

Ну вот кажется, что разница gasleft() на входе и выходе должна быть строго меньше 100% газа всей транзакции. С константой надо аккуратно, согласен, учитывая, что цены за операции меняются при хардфорках. Правильно понимаю?

А может, сделать через подписывание сообщений тогда ничего компенсировать не придется

Denis Glotov
Ну вот кажется, что разница gasleft() на входе и в...

Ну вот кажется, что разница gasleft() на входе и выходе должна быть строго меньше 100% газа всей транзакции это не совсем верно: function attack() { callFunctionWithRefund() // вызвать функцию которая возмещает затраты chi.free(10) // сжечь chi токены и получить рефанд } таким образом отправителю можно затратить меньше газа, чем будет учитываться в вашей функции

Denis-Glotov Автор вопроса
Mikhail Dobrokhvalov
Ну вот кажется, что разница gasleft() на входе и в...

Да, очень интересно. Проэкспериментирую в ремуксе. Эта фмоя ункция и должна вызываться другими контрактами.

Denis-Glotov Автор вопроса
Mikhail Dobrokhvalov
Ну вот кажется, что разница gasleft() на входе и в...

Кстати тут должно быть все в порядке - ведь измерения gasleft() мы проводим внутри callFunctionWithRefund() и значит внешние действия с газовыми токенами не должны нарушить логику.

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

Карта сайта