Посты
avatar

Контракт, который продолжает выполнение после неудачного вызова, сегодня не имеет надежного способа определить, был ли откат вызванного контракта намеренным или просто вызван нехваткой газа, выбранной отправителем. Этот пробел является корнем атаки «недостаточного газа», и новое предварительное предложение пытается устранить его на уровне EVM. EIP-8456, открытое для обсуждения на Ethereum Magicians в понедельник, добавляет инструкцию под названием CALLSTATUS, предварительно с opcode 0xA5 за 2 газа. Она помещает статус завершения последнего вызова или создания операции в текущем фрейме в виде трех битов. Бит 0 означает откат, бит 1 — исключительную остановку, например, нехватку газа, а бит 2 — остановку в каком-либо фрейме ниже. Автор отмечает, что единственным доказательством сегодня является арифметика gasleft() после вызова, и каждый форк переоценки газа нарушал эти пороги. Предлагаемая двухмерная система газа EIP-8037 сделает эту арифметику еще слабее, поскольку ее резервуар недоступен через opcode GAS. Так почему же третий бит? Большинство реальных вызовов проходят через посредников, таких как прокси, обертка functionCall от OpenZeppelin, Multicall3 или проверщики подписей ERC-1271. Если бы сообщался только конечный статус прямого вызванного контракта, обертка, перехватывающая остановку из-за нехватки газа и выполняющая откат с причиной, выглядела бы как намеренный откат. Черновик сохраняет «липкий» флаг, который передается вверх по каждому фрейму, так что отправитель, контролирующий только газ, никогда не сможет заставить вызывающий контракт прочитать простой откат. Он сообщает результаты, а не причины, и вызванный контракт все еще может намеренно вызвать остановку с помощью INVALID. Он защищает только код, написанный после его внедрения, поскольку развернутые контракты его не будут читать. Пока нет внешних обзоров, номер opcode остается открытым, а прототип и тесты для 58 указанных случаев все еще ожидают реализации. Ссылка - https://t.co/KnByUBgWrY

Этот контент предназначен исключительно для информационных и образовательных целей. Он может содержать информацию от третьих лиц, спонсорский контент или рекламные материалы, за которые креатор может получить вознаграждение. Ничто в этой ленте не является инвестиционным советом или гарантией прибыли. Вы несете полную ответственность за свои собственные инвестиционные решения. Всегда проводите самостоятельные исследования и проявляйте осторожность перед торговлей. Мы не гарантируем точность информации третьих лиц и не несем ответственности за понесенные убытки. Прошлые результаты не являются показателем будущих. Пожалуйста, ознакомьтесь с нашими Условиями сообщества и Заявлением о раскрытии информации о рисках для получения подробной информации.

avatarОставьте свой ответ

Комментарий