Make ChainStore agnostic to block serialization format

Aperta
#2,999 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
rust
Ambito
blockchain

Direzione di ricerca

Inizia esaminando ChainStore.blocks e ChainStore.ancestor_block, insieme alle assunzioni individuate nei PR #2886 e #2998. Segui il modo in cui questi metodi deserializzano i blocchi serializzati e il modo in cui la object safety vincola l'API. Il lavoro è completato quando i chiamanti forniscono istruzioni di deserializzazione, la gestione delle ricevute delle transazioni rimane appropriata e i formati di blocco non Ethereum possono essere riletti nella propria serializzazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

PR #2886 and #2998 still leave some assumptions about how blocks are serialized and deserialized in the ChainStore. In particular, they assume that the serialization follows the form of an EthereumBlock. That can cause issues for other chains if they store blocks with a different serialization format and try to read them, assuming they get their own serialization back.

A more robust fix would parametrize ChainStore.blocks and ChainStore,ancestor_block (the only methods that read the serialized data from the chain store and now return a json::Value) so that the caller passes in instructions on how to deserialize instead of leaving it up to the store. That is not entirely trivial because

  • the current code does not read transaction receipts in ChainStore.blocks which helps reduce the data that needs to be deserialized.
  • ChainStore needs to be object safe, so blocks and ancestor_block can't be parametrized on some sort of FromChainStoreData trait
Lingua principale
Rust
Stelle
3.2k
Fork
1.1k
Merge medio
4g 1h
PR unite (30g)
1

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di graphprotocol/graph-node

Tutte le issue di graphprotocol/graph-node

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.