Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Incremental Cardano DB in client library #2214

Open
26 of 34 tasks
Tracked by #2047
jpraynaud opened this issue Jan 13, 2025 · 0 comments · May be fixed by #2289
Open
26 of 34 tasks
Tracked by #2047

Implement Incremental Cardano DB in client library #2214

jpraynaud opened this issue Jan 13, 2025 · 0 comments · May be fixed by #2289
Assignees
Labels
feature 🚀 New implemented feature

Comments

@jpraynaud
Copy link
Member

jpraynaud commented Jan 13, 2025

Why

The client library should be able to list, get details and certify Incremental Cardano DB.

What

Implement the Incremental Cardano DB signed entity type in the Mithril client library.

How

  • Implement a new client in mithril-client as unstable:
    • list
    • get
    • download functions:
      • ImmutableFileRange is an enum with the variants (Full, From(ImmutableFileNumber), Range(ImmutableFileNumber,ImmutableFileNumber), UpTo(ImmutableFileNumber))
      • DownloadUnpackOptions in a struct with fields include_ancillary: bool and allow_override: bool
      • Verification is done with these steps:
        • Download and unpack the immutable archives:
          • Selection of file locations based on an order
          • With fail-over mechanism
          • Unpack in a immutable folder (with overriding support if enabled)
          • Implement feedback events
          • Parallelize the download and unpack
          • Implement Retry
        • Download the digest file (with overriding support if enabled)
          • Download the digest file
          • Implement feedback events
        • Create a Merkle proof
          • Create a Merkle tree with all the digests in the file
          • Compute the digests of the downloaded immutable files
          • Verify that the computed digests exist in the Merkle tree
          • Compute the Merkle proof
        • Verify that the Merkle proof is valid
        • Verify that the Merkle proof root is signed in a valid certificate (done in CLI)
        • Download and unpack the ancillary file:
          • If include_ancillary is true (and immutable file number snapshotted is in the ImmutableFileRange?)
          • With overriding support if enabled
          • In the root of the download folder (as ledger, volatile and immutable are already in the archive)
          • Implement feedback events
        • Write the protocolMagicId file if the immutable file number 0 is in the range restored (done in CLI)
  • Write integration test
  • Add example
    • Fix feedback receivers
  • Fix TODOs

Later

  • How to verify an existing database (create Proof without digest file)?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 🚀 New implemented feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant