Tiga store
Blok terkomit
Ledger storetransaksi · output · event · write set · akumulator · metadata blok
Replay dan audit
State KV storenilai kini dan historis, 16 shard, state panas di tier tersendiri
Query dan eksekusi
State Merkle storesparse Merkle tree berversi, plus indeks node yang digantikan
Verifikasi — bukti
Pembacaan yang hanya butuh nilai tidak membayar penelusuran pohon, dan bukti tidak direkonstruksi dari store yang dioptimalkan untuk point lookup.
Autentikasi
Dua struktur Merkle mengerjakan tugas yang berbeda.Sparse Merkle tree berversi
Akumulator
Key Anda dan nilainya
hash sibling
hash sibling
State root, dikomit konsensus
Transaksi Anda, atau event
Akumulator transaksi · akumulator eventmasing-masing mengikat semua yang masuk, berurutan
Ledger root, dikomit konsensus
Pohon membuktikan berapa nilai sebuah key; akumulator membuktikan apa yang terjadi dan urutannya. Bersama-sama keduanya membuat “transaksi ini ada di chain pada posisi ini” bisa dibuktikan tanpa menyimpan chain.
State spekulatif
Hasil sebuah blok sudah ada sebelum blok itu dikomit. Alih-alih menulisnya ke pohon durabel lalu membatalkannya jika blok itu tidak jadi dikomit, state yang belum terkomit ditahan di dalam overlay sparse Merkle in-memory di atas versi terakhir yang terkomit. Eksekusi membaca menembus overlay itu dan melihat tampilan yang konsisten. Jika blok terkomit, overlay dimaterialisasi. Jika tidak, overlay dibuang dan tidak ada apa pun yang durabel pernah tersentuh. Inilah yang menjaga eksekusi spekulatif agar tidak meninggalkan sampah di penyimpanan.Caching
Node pohon di-cache pada dua tingkat: cache yang sadar versi sehingga versi-versi terbaru tetap bisa dialamatkan, dan di bawahnya cache least-recently-used. Pola akses chain trading — sekumpulan kecil key panas yang tersentuh setiap blok, berhadapan dengan ekor panjang yang jarang tersentuh — persis bentuk yang menjadi alasan keduanya ada.Pruning
Menyimpan setiap versi selamanya adalah pilihan, bukan keharusan. Tiga pruner independen berjalan terhadap ketiga store, masing-masing dengan kebijakan retensinya sendiri: satu untuk ledger, satu untuk nilai state, satu untuk node Merkle. Pruner Merkle dan pruner nilai state digerakkan oleh indeks stale yang ditulis bersamaan dengan datanya. Ketika satu versi menggantikan node atau nilai, entri yang digantikan itu dicatat sebagai stale pada versi tersebut. Dengan begitu pruning menjadi range scan atas indeks, bukan pencarian sampah — penulisnya sudah menyatakan apa yang akan bisa dibuang dan kapan.Retensi adalah keputusan operator dengan konsekuensi nyata. Node yang di-prune secara agresif melayani state terkini dengan efisien tetapi tidak bisa menjawab query historis atau melayani sinkronisasi state untuk node yang mulai dari titik yang jauh di belakang. Node arsip menyimpan segalanya dan membayar harganya. Lihat Menjalankan node.
Backup dan restore
Store dapat di-backup dan di-restore secara independen dari node yang sedang berjalan, dan itulah yang memungkinkan node dibangun dari snapshot alih-alih me-replay dari genesis, sekaligus memverifikasi state node hasil restore terhadap root yang terkomit alih-alih memercayai backup-nya.Ke mana selanjutnya
Sinkronisasi state
Bagaimana node menyusul chain tanpa harus me-replay seluruhnya.
Model state
Apa yang disimpan, dan representasi mana yang otoritatif.
Indexer
Merekonstruksi riwayat dari catatan yang terkomit.
Menjalankan node
Peran node, dan cara menanyakan soal menjalankannya.