Argomenti di tendenza
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
eip-8032 (e eip-2926 per quel che riguarda) comportano un processo di conversione. Mi è stato fatto notare che questo processo è poco compreso, anche dagli sviluppatori principali. In vista del prossimo ACDE, sto scrivendo una breve spiegazione.
Alla base, non è altro che un semplice iteratore, che scorre sugli account e conta le foglie. Quando tutte le foglie sono state contate, quel conteggio viene aggiunto come campo all'account. Ad ogni blocco, l'iteratore avanza di N posizioni. La conversione si ferma quando si raggiunge l'ultima posizione.
Qui, "posizione" significa sia un account che uno slot, ovunque l'iteratore possa "fermarsi". A causa della quantità di dati, è importante che l'iterazione si fermi in un punto "sicuro" e riprenda al blocco successivo.
Esaminiamo il seguente esempio semplificato. Ci sono molti meno dati nello stato rispetto alla vita reale, e l'albero è un albero binario, ma l'esempio è altrimenti accurato. Il simbolo ∅ significa un account senza storage. Se mancante, allora l'account ha un albero di storage.

Inizialmente, l'iteratore è impostato su 0, cioè.
- posizione dell'hash dell'account = 0
- posizione dell'hash dello slot = 0
È rappresentato con una freccia rossa.

In questo esempio, prendiamo il passo dell'iteratore N = 2 (in pratica, N > 10_000). Al blocco di fork, l'iteratore si sposta di due posizioni.
La prima posizione è un account senza storage, quindi non viene fatto nulla.

Ancora al blocco fork, l'iteratore si sposta nella 2ª posizione, che è uno slot (cioè l'iteratore si ferma nella memoria di un account prima di fermarsi all'account stesso).
Il contatore degli slot è impostato su 1, e poiché l'iteratore ha completato il suo intero passo per il blocco fork, si ferma.

Nel blocco successivo, l'iteratore copre ancora due posizioni:
- La 1ª è il 2° slot del 2° account, per il quale il contatore è stato incrementato
- La 2ª è il 2° account stesso. Il valore del contatore viene aggiunto come campo dell'account e il contatore viene azzerato.

Nel blocco seguente (fork + 2), l'iteratore passa attraverso i due slot del 3° account, ma il suo passo viene raggiunto prima che l'account stesso (prossima posizione) venga aggiornato con il contatore (che è 2).

Ultimo blocco della conversione, al 3° account viene dato un contatore, e poi l'ultimo account viene controllato per lo stato (che non ha, quindi non è necessaria alcuna aggiornamento).

Poiché non ci sono ulteriori conti, l'iteratore termina e la conversione è completa.

Cosa succede se lo storage viene aggiunto all'account A dopo che l'iteratore ha superato l'account A?
Il contatore all'interno di A viene semplicemente aumentato.
Cosa succede se lo storage viene aggiunto all'account in fase di conversione?
- prima dell'iteratore: nulla da fare poiché l'iteratore lo conterà quando arriverà lì
- dopo che l'iteratore è passato: memorizzarlo nell'account, aggiungerlo al contatore dell'iteratore dopo che la enumerazione degli slot è terminata
Quando si applicano i costi del gas?
Quando l'account è stato convertito.
Quanto durerà la conversione?
A seconda del passo, fino a un mese. Il valore è scelto in modo che il calcolo aggiuntivo sia trascurabile rispetto all'operazione normale del blocco. 10_000 è ereditato da verkle e richiederebbe un mese. I benchmark troverebbero sicuramente un valore più veloce.
E questo è tutto, grazie per aver letto fino alla fine 🫶
302
Principali
Ranking
Preferiti
