Иногда мы просто хотим безопасно отправить ETH. Представляем новый `safeMoveETH` от Solady. Существует множество способов отправить ETH через смарт-контракт: - `CALL`: Открывает возможность газового грифинга и атак повторного входа. - `transfer`: На самом деле это `CALL` с газовым лимитом в 3000 газа под капотом. Если цены на газ изменятся (например, L2 с пользовательскими затратами на газ) или если целевой адрес — это контракт с функцией обратного вызова, это сломается. - `WETH`: Нет канонического контракта WETH для всех L2. Никто не имеет места в байт-коде, чтобы жестко закодировать все разные адреса). Также вы потратите 20k газа на новое SSTORE, 5k газа на обновление SSTORE. Очень дорого. - `SELFDESTRUCT`: Мы можем что-то с этим сделать. После EIP-6780 это можно использовать для довольно эффективного принудительного перевода. `safeMoveETH` использует канонический минимальный `SELFDESTRUCT`, чтобы перемещать ETH, не вызывая `fallback` никогда. Если `SELFDESTRUCT` когда-либо будет заблокирован в будущем (основные разработчики, пожалуйста, не делайте этого), он плавно переходит к созданию хранилища per-address-just-in-time-create2, чтобы аккумулировать ETH в цепно-независимом формате. В общем, независимо от того, что произойдет, ETH никогда не застрянет.
21,44K