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

catchup: state-proof-based catchup #5720

Draft
wants to merge 6 commits into
base: nickolai/state-proof-catchup-base
Choose a base branch
from

Commits on Aug 31, 2023

  1. state-proof-based catchup

    Add support for catchup to use state proofs to validate new blocks.
    
    The main changes are:
    
    - The catchup service now has a state proof fetcher, whose job is to
      retrieve state proofs for rounds beyond the current ledger state.
      These state proofs are stored in an sqlite DB, since there might be
      many state proofs that we need to fetch.
    
    - The catchup service exposes a way to set trusted "renaissance"
      parameters for authenticating the initial state proofs, for cases
      when we can't use state proofs from the genesis block (like the
      situation we have on mainnet now).
    
    - The BlockService HTTP interface adds support for retrieving a
      state proof, and for getting a light block header proof instead
      of a cert when retrieving a block.
    
    - The catchup service uses state proofs, if possible, to authenticate
      new blocks, in lieu of agreement certificates.  The catchup service
      is backwards-compatible: if it requests a state proof from the
      BlockService, but receives an agreement certificate instead (e.g.,
      because the BlockService has not been upgraded with the above
      changes), the catchup service will validate the certificate instead.
    
    - The config file has additional fields to optionally specify the
      renaissance catchup parameters, to allow catchup to start validating
      state proofs from some (trusted through out-of-band channels) block.
    
    It may be a good idea, for performance, to pre-compute the state proofs
    and distribute them in a single file, rather than asking many relays to
    find the state proofs on-demand.  This is not done yet, because it largely
    depends on how we would want to distribute these bundled state proofs.
    It should be reasonably straightforward to feed a bundle of state proofs
    into the stateProofFetcher.
    zeldovich committed Aug 31, 2023
    Configuration menu
    Copy the full SHA
    4f835aa View commit details
    Browse the repository at this point in the history
  2. make codegen checks happy

    zeldovich committed Aug 31, 2023
    Configuration menu
    Copy the full SHA
    ca71bf2 View commit details
    Browse the repository at this point in the history
  3. make go vet happy

    zeldovich committed Aug 31, 2023
    Configuration menu
    Copy the full SHA
    4cbc453 View commit details
    Browse the repository at this point in the history
  4. go fmt

    zeldovich committed Aug 31, 2023
    Configuration menu
    Copy the full SHA
    6046269 View commit details
    Browse the repository at this point in the history
  5. try to make lint happy

    zeldovich committed Aug 31, 2023
    Configuration menu
    Copy the full SHA
    d4bf217 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    87cfe4f View commit details
    Browse the repository at this point in the history