A volte, vogliamo semplicemente inviare ETH in modo sicuro. Entra in gioco il nuovo `safeMoveETH` di Solady. Ci sono molti modi per inviare ETH sul contratto intelligente: - `CALL`: apre a problemi di gas, attacchi di reentrancy. - `transfer`: in realtà è un `CALL` con un limite di gas di 3000 gas sotto il cofano. Se i prezzi del gas cambiano (ad esempio, un L2 con costi di gas personalizzati), o se l'obiettivo è un contratto con una funzione di fallback, questo si rompe. - `WETH`: non esiste un contratto WETH canonico su tutti gli L2. Nessuno ha spazio di bytecode per hardcodare tutti i diversi indirizzi). Inoltre, spenderai 20k gas per un nuovo SSTORE, 5k gas per un aggiornamento SSTORE. Molto costoso. - `SELFDESTRUCT`: possiamo cucinare qualcosa con esso. Dopo l'EIP-6780, questo può essere abusato per un trasferimento forzato piuttosto efficiente. `safeMoveETH` utilizza un `SELFDESTRUCT` minimale canonico per spostare ETH senza attivare mai il `fallback`. Se il `SELFDESTRUCT` dovesse mai essere bloccato in futuro (sviluppatori core per favore non fatelo), degrada elegantemente a un vault create2-just-in-time per indirizzo per accumulare ETH in modo indipendente dalla catena. Fondamentalmente, qualunque cosa accada, l'ETH non rimarrà mai bloccato.
24,19K