для того, чтобы контракт смог возместить вызывающему расход на свой вызов. Вариант такой: засекаем gasleft() вначале и в конце вызванной функции, добавляем константу, умножаем на tx.gasprice. Есть ли тут уязвимеость?
уязвимость в том что если возвращаешь больше 100% от потраченного, можно задрать gas price
А этого можно добиться с помощью газтокенов / chi / селфдестрактов
Ну вот кажется, что разница gasleft() на входе и выходе должна быть строго меньше 100% газа всей транзакции. С константой надо аккуратно, согласен, учитывая, что цены за операции меняются при хардфорках. Правильно понимаю?
А может, сделать через подписывание сообщений тогда ничего компенсировать не придется
Ну вот кажется, что разница gasleft() на входе и выходе должна быть строго меньше 100% газа всей транзакции это не совсем верно: function attack() { callFunctionWithRefund() // вызвать функцию которая возмещает затраты chi.free(10) // сжечь chi токены и получить рефанд } таким образом отправителю можно затратить меньше газа, чем будет учитываться в вашей функции
Да, очень интересно. Проэкспериментирую в ремуксе. Эта фмоя ункция и должна вызываться другими контрактами.
Кстати тут должно быть все в порядке - ведь измерения gasleft() мы проводим внутри callFunctionWithRefund() и значит внешние действия с газовыми токенами не должны нарушить логику.
Обсуждают сегодня