Module Mavryk_raw_protocol_001_PtAtLas.Seed_storage

This modules handles the storage of random nonce seeds.

This module is responsible for maintaining the table Storage.Seed.For_cycle.

type seed_computation_status =
  1. | Nonce_revelation_stage
  2. | Vdf_revelation_stage of {
    1. seed_discriminant : Seed_repr.seed;
    2. seed_challenge : Seed_repr.seed;
    }
  3. | Computation_finished
type Mavryk_protocol_environment_001_PtAtLas.Error_monad.error +=
  1. | Unknown of {
    1. oldest : Cycle_repr.t;
    2. cycle : Cycle_repr.t;
    3. latest : Cycle_repr.t;
    }
  2. | Already_accepted
  3. | Unverified_vdf
  4. | Too_early_revelation

Generates the first preserved_cycles+2 seeds for which there are no nonces.

Verifies if a VDF (result, proof) is valid.

  • returns

    Error Too_early_revelation if the nonce revelation threshold is greater than the current level cycle position.

  • returns

    Error Already_accepted if a VDF seed has already been recorded.

Updates the seed with a function of the VDF result.

Returns the seed associated with the given cycle. Returns a generic storage error when the seed is not available.

Returns the seed associated with the given cycle. Returns the Unknown error when the seed is not available.

Computes RANDAO output for cycle #(current_cycle + preserved + 1)

Must be run at the end of the cycle, resets the VDF state and returns unrevealed nonces to know which party has to forfeit its attesting rewards for that cycle.

Return the random seed computation status, that is whether the VDF computation period has started, and if so the information needed, or if it has finished for the current cycle.

Removes the seed associated with the given cycle from the storage. It assumes the seed exists. If it does not it returns a generic storage error.