Skip to main content

Genesis Config (Old)

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

warning

This page does not take JIP-5 into account. The new version is available here.

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).

All Specs

Every spec has a unique genesis header hash. All genesis headers generated in the same manner as the tiny header. The only difference between them are the initial authorities.

  • Tiny 0x476243ad7cc4fc49cb6cb362c6568e931731d8650d917007a6037cceedd62244
  • Small 0x67cfc50bfec9d5408ca5c72bf90cd7f109cd3a001787900f68a8e666c6665bd4
  • Medium 0x3756763d49854b97de440b301f1c69ef0f6981c64c4ffc764c0ad5a8870f1901
  • Large 0xb3d06530c201be34522f4df0df3e572f37f046b8f26e74dc24307c3b36d05e22
  • xLarge 0x1031339ffb6e132953a3d97ee0e38728bebadfef4cc7453642226cb0ccb53b27
  • 2xLarge 0x8e5a7a7e28a973b45927da8539fe222faa45dcb0d1d6133afe0dbc398cfdcbe5
  • 3xLarge 0xe53cfeb7a3f892be40dbe6098efa5f5ba6b28e9a9edde447a56664540c02f901
  • Full 0xef6195f355ae03123e065990d34470be9a112df37029d340e1a8428e5d541a55