feat: external block provider for genesis sync
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- rust
Direzione di ricerca
La issue non indica file, test o punti di ingresso esistenti. Inizia individuando l’archivio dei blocchi corrente, il flusso di sincronizzazione iniziale, l’applicazione delle transizioni di stato e la configurazione del nodo, quindi determina dove può integrarsi un’API del provider. Il lavoro è completato quando l’API, il server basato sull’archivio, la sincronizzazione del client, la possibilità di riprendere e la configurazione dell’URL del provider funzionano come indicato nei criteri di accettazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Nodes running in pruning mode (default) discard old blocks to bound disk growth. To support syncing new nodes from genesis without requiring every node to be a full archive node, we need an external block serving service.
Motivation
- Block archive storage now prunes by default (retention window of ~100k blocks)
- Chain-index (SQLite) serves RPC/explorer queries independently of the block archive
- Only seed/archive nodes need full block history
- New nodes joining the network need a way to sync from genesis without requiring every peer to store all blocks
Design
An external block provider service that:
- Stores all blocks from genesis (potentially using commonware's
immutable::Archivewith freezer for minimal memory + compression) - Serves block data over a well-defined API (HTTP/gRPC) to syncing nodes
- Can be operated independently of the P2P network -- e.g., a centralized service, cloud storage, or a dedicated archive node
Sync flow
New Node Block Provider
| |
|-- request blocks [0, N) --->|
|<--- stream ArchivedBlock ---|
| |
|-- apply blocks to STF --- |
|-- build chain-index --- |
| |
|-- join P2P, continue from |
| latest block |
Considerations
- The provider does not need to be trusted for correctness -- the node validates state roots against the chain's state transition function
- Provider could be backed by object storage (S3/R2) serving pre-compressed block segments
- Protocol should support range requests and resumable sync
- Consider using commonware's
immutable::Archive(freezer) as the backing store for the provider -- it's designed for exactly this workload (write-once, read-many, minimal memory, compressed)
Acceptance Criteria
- Define block provider API (gRPC service definition or HTTP endpoints)
- Implement block provider server backed by full block archive
- Implement client-side sync that fetches blocks from provider and applies them
- Support resumable sync (track last synced block)
- Node config option to specify block provider URL for initial sync
- Lingua principale
- Rust
- Stelle
- 4
- Fork
- 0
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di evstack/ev-rs
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
Tutte le issue di evstack/ev-rs
Issue simili
-
[Bug]:设置的关于页面,“系统信息”部分排版异常Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
metasequoiaime/msime#7328 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
eclipse-opensovd/classic-diagnostic-adapter#616 ·
I maintainer di solito rispondono entro 2 giorni
-
documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
track: content
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
0xAndersen/witness-log#10 ·
-
follow-up main-defect wave-A
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
carrick-sh/carrick#249 ·
I maintainer di solito rispondono entro 1 giorno