Czasami po prostu chcemy bezpiecznie wysłać ETH. Wprowadź nowy `safeMoveETH` od Solady. Istnieje wiele sposobów na wysłanie ETH za pomocą smart kontraktu: - `CALL`: Otwiera na gas griefing, ataki reentrancy. - `transfer`: To tak naprawdę `CALL` z limitem gazu wynoszącym 3000 gazu pod maską. Jeśli ceny gazu się zmienią (np. L2 z niestandardowymi kosztami gazu) lub jeśli celem jest kontrakt z funkcją fallback, to się psuje. - `WETH`: Nie ma kanonicznego kontraktu WETH we wszystkich L2. Nikt nie ma miejsca na bajty, aby zakodować wszystkie różne adresy). Ponadto wydasz 20k gazu na świeże SSTORE, 5k gazu na aktualizację SSTORE. Bardzo drogie. - `SELFDESTRUCT`: Możemy coś z tym ugotować. Po EIP-6780 można to wykorzystać do dość efektywnego wymuszonego transferu. `safeMoveETH` używa kanonicznego minimalnego `SELFDESTRUCT`, aby przenieść ETH bez wywoływania `fallback` kiedykolwiek. Jeśli `SELFDESTRUCT` kiedykolwiek zostanie zablokowany w przyszłości (proszę, deweloperzy rdzeniowi, nie róbcie tego), to elegancko przechodzi do per-adres-just-in-time-create2-vault, aby gromadzić ETH w sposób niezależny od łańcucha. W zasadzie, niezależnie od tego, co się stanie, ETH nigdy nie utknie.
26,98K