Skip to main content

Genesis Config

The genesis config provides the initial values that are needed by all nodes to start the JAM chain. Each field is explained below.

Authorities

A list of Validator Key Tuples, called K\mathbb{K} in the Graypaper. This defines the validators that are permissioned to seal blocks for the current epoch. The accounts are the Dev Accounts.

Genesis Block Header

The genesis block header (H0H_0) is the initial header in the chain, upon which consensus is inherently assumed.

For the purpose of simplifying interoperability testing - such as importing test vectors - we define the following values for the genesis header.

  {
"parent": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parent_state_root": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extrinsic_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"slot": 0,
"epoch_mark": {
"entropy": "0x0000000000000000000000000000000000000000000000000000000000000000",
"tickets_entropy": "0x0000000000000000000000000000000000000000000000000000000000000000",
"validators": [
"0x5e465beb01dbafe160ce8216047f2155dd0569f058afd52dcea601025a8d161d",
"0x3d5e5a51aab2b048f8686ecd79712a80e3265a114cc73f14bdb2a59233fb66d0",
"0xaa2b95f7572875b0d0f186552ae745ba8222fc0b5bd456554bfe51c68938f8bc",
"0x7f6190116d118d643a98878e294ccf62b509e214299931aad8ff9764181a4e33",
"0x48e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e3",
"0xf16e5352840afb47e206b5c89f560f2611835855cf2e6ebad1acc9520a72591d"
]
},
"tickets_mark": null,
"offenders_mark": [],
"author_index": 65535,
"entropy_source": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"seal": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}

Expected hash: 0x476243ad7cc4fc49cb6cb362c6568e931731d8650d917007a6037cceedd62244

Binary encoding must adhere to the Block serialization specification established in the Gray Paper.

Chosen Values Rationale

  • parent: Set to zero because there is no parent block preceding the genesis block.
  • parent_state_root: Set to zero since there is no parent preceding the genesis state.
  • extrinsic_hash: There is no extrinsic to hash.
  • slot: Set to 0 (representing the count of slots since the start of the Jam Common Era).
  • epoch_mark: The first block in an epoch should contain the validators for the next epoch.
    • entropy: Set to zero.
    • tickets_entropy: No tickets exist, meaning no entropy is utilized.
    • validators: Defined as the dev authorities accounts.
  • tickets_mark: No tickets are available to share.
  • offenders_mark: No offenders have been identified yet.
  • author_index: As this block has not been authored by a specific validator, use 0xffff as a wildcard.
  • entropy_source: This block has not been signed by a specific validator.
  • seal: Similarly, this block has not been signed by a specific validator.

For technical accuracy, the state referenced by this header hash, which represents the genesis state (σ0σ_0), should match with some of the values presented within the header:

  • slot: expected to match σ0τ\sigma_0 \cdot \tau.
  • epoch_mark.entropy expected to match σ0η1\sigma_0 \cdot \eta_1.
  • epoch_mark.tickets_entropy expected to match σ0η2\sigma_0 \cdot \eta_2.
  • validators expected to match σ0γk\sigma_0 \cdot \gamma_k.

It is important to note that using this header as H0H_0 will inevitably lead to small inconsistencies within the state it references, σ0\sigma_0. These inconsistencies violate certain invariants assumed for posterior states referenced by other block header hashes when computed through the protocol's State Transition Function (STF). Specifically, σ0η0\sigma_0 \cdot \eta_0 is technically expected to be derived from hashing a prior entropy value concatenated with the fresh entropy generated by the entropy_source specified in the header. However, because this header lacks a valid signature for the entropy source, we adopt a lenient approach to these discrepancies during this initial testing phase (and potentially in production as well).