Topik trending
#
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 (dan EIP-2926 dalam hal ini) dilengkapi dengan proses konversi. Menjadi perhatian saya bahwa proses ini kurang dipahami, bahkan oleh pengembang inti. Menjelang ACDE berikutnya, saya menulis penjelasan singkat.
Pada intinya, ini tidak lain adalah iterator sederhana, membahas akun dan menghitung daun. Ketika semua daun telah dihitung, jumlah tersebut ditambahkan sebagai bidang ke akun. Setiap blok, iterator maju dengan posisi N. Konversi berhenti ketika posisi terakhir tercapai.
Di sini, "posisi" berarti akun atau slot, di mana pun iterator dapat "berhenti". Karena jumlah data, penting bahwa iterasi berhenti di titik "aman", dan dilanjutkan di blok berikutnya.
Mari kita lihat contoh sederhana berikut. Ada jauh lebih sedikit data dalam keadaan daripada di kehidupan nyata, dan pohon tersebut adalah pohon biner, tetapi contohnya akurat. Simbol ∅ berarti akun tanpa penyimpanan. Jika hilang, maka akun memiliki pohon penyimpanan.

Awalnya, iterator diatur ke 0, yaitu
- posisi hash akun = 0
- posisi hash slot = 0
Itu diwakili dengan panah merah.

Dalam contoh ini, kita mengambil langkah iterator N = 2 (dalam praktiknya, N > 10_000). Pada blok garpu, iterator bergerak dengan dua posisi.
Posisi pertama adalah akun tanpa penyimpanan, jadi tidak ada yang dilakukan.

Masih di blok fork, iterator bergerak ke posisi ke-2, yang merupakan slot (yaitu iterator berhenti di penyimpanan akun sebelum berhenti di akun yang tepat).
Penghitung slot diatur ke 1, dan karena iterator telah menjalankan seluruh langkahnya untuk blok garpu, itu berhenti.

Pada blok berikutnya, iterator sekali lagi mencakup dua posisi:
- Yang ke-1 adalah slot ke-2 dari akun ke-2, yang penghitungnya ditambah
- Yang ke-2 adalah akun ke-2 itu sendiri. Nilai penghitung ditambahkan sebagai bidang akun, dan penghitung diatur ulang.

Pada blok berikutnya (fork + 2), iterator melewati dua slot akun ke-3, tetapi langkahnya tercapai sebelum akun itu sendiri (posisi berikutnya) diperbarui dengan penghitung (yaitu 2).

Blok terakhir konversi, akun ke-3 diberi penghitung, dan kemudian akun terakhir diperiksa untuk status (yang tidak dimilikinya, jadi tidak ada pembaruan yang dijamin).

Karena tidak ada akun lebih lanjut, iterator berakhir, dan konversi selesai.

Bagaimana jika penyimpanan ditambahkan ke akun A setelah iterator melewati akun A?
Penghitung di dalam A hanya ditingkatkan.
Bagaimana jika penyimpanan ditambahkan ke akun yang sedang dikonversi?
- Ahead of the Iterator: Tidak ada yang bisa dilakukan karena iterator akan menghitungnya ketika sampai di sana
- Setelah iterator berlalu: simpan di akun, tambahkan ke penghitung iterator setelah pencacahan slot berakhir
Kapan biaya gas berlaku?
Ketika akun telah dikonversi.
Berapa lama konversi akan berlangsung?
Tergantung pada langkahnya, hingga sebulan. Nilai dipilih sehingga perhitungan tambahan dapat diabaikan dibandingkan dengan operasi blok biasa. 10_000 diwarisi dari Verkle, dan akan memakan waktu sebulan. Tolok ukur pasti akan menemukan nilai yang lebih cepat
Dan itu saja, terima kasih telah membaca sampai akhir 🫶
302
Teratas
Peringkat
Favorit
