Help Center
Genesis Document
A genesis document contains a set of parameters that outline the initial state of an Oasis network.
The state defined in the network’s genesis document contains all the necessary information for launching that particular network (i.e. Mainnet, Testnet), including initial token allocations, network parameters, and more.
INFO
For a more in-depth explanation of the genesis document, see the Genesis Document part of Oasis Core’s developer documentation.
The important thing to note is that the genesis document is used to compute the genesis document’s hash. This hash is used to verify for which network a given transaction is intended for.
Genesis File vs. Genesis Document
A genesis file is a JSON file corresponding to a serialized genesis document. As such, it is more convenient for distribution and sharing.
When Oasis Node loads a genesis file, it converts it to a genesis document.
INFO
Up to date information about the current genesis file and the current genesis document’s hash can be found on the Network Parameters page.
Parameters
This sections explains some of the key parameters of the genesis document.
CAUTION
The concrete parameter values in the following sections pertain to the Mainnet. Other Oasis networks (e.g. Testnet) might use different values.
DANGER
The token balances in a genesis document (or a genesis file) are enumerated in base units.
The staking.token_value_exponent parameter defines the token value’s base-10 exponent. For the Mainnet it is set to 9 which means 1 ROSE equals 10^9 (i.e. billion) base units.
Height, Genesis Time and Chain ID
The height parameter specifies the network’s initial block height. When a network is upgraded, its height is retained. For example, for the Cobalt upgrade the height of the Mainnet state dump was bumped by 1 from 3,027,600 to 3,027,601.
The genesis_time parameter is an ISO8601 UTC timestamp that specifies when the network is officially going to launch. At the time of genesis, validators are expected to come online and start participating in the consensus process for operating the network. The network starts once validators representing more than 2/3 of stake in the initial consensus committee are online.
The chain_id is a human-readable version identifier for a network.
CAUTION
It is important to note that this value alone doesn’t dictate the version of an Oasis network. Rather, the hash of the whole genesis document, i.e. the genesis document’s hash, is the network’s unique identifier.
Epoch Time
CAUTION
The epochtimesection will be removed in the Cobalt upgrade since it became obsolete with the new improved random beacon. It will be replaced with the new beacon section described below.
The epochtime.params.interval specifies the number of blocks in an epoch. Epochs are used as a measure of time for the staking reward schedule, debonding intervals, network expiration period, and more. This value is set to 600, indicating that a new epoch transpires each time 600 new blocks are generated.
Registry
Within the registry object, there are a broad range of parameters that specify the initial set of node operators and their corresponding initial node statuses.
registry.params.max_node_expirationThe maximum duration (in epochs) that node registrations last. The starting value is set to 2 in order to ensure that a node is continuously online, since the node’s registration would expire each time 2 epochs pass, requiring the node to re-register.registry.params.enable_runtime_governance_modelsThe set of runtime governance models that are allowed to be used when creating/updating registrations. It is set to{"entity": true, "runtime": true}which means a runtime can choose between entity governance and runtime-defined governance.registry.entitiesThe entity registrations for initial node operators, including public key and signature information.registry.runtimesThe runtime registrations for initial node operators. Each item describes a runtime’s operational parameters, including its identifier, kind, admission policy, committee scheduling, storage, governance model, etc. For a full description of the runtime descriptor see theRuntimestructure documentation.registry.suspended_runtimesThe suspended runtime registrations for initial node operators. Each item describes a suspended runtime’s operational parameters, including its identifier, kind, admission policy, committee scheduling, storage, governance model, etc. For a full description of the runtime descriptor see theRuntimestructure documentation.registry.nodesThe node registrations for initial node operators, including public key and signature information.
INFO
For a new network, the entity and node registrations are obtained via the entity package collection process (e.g. Mainnet Network Entities).
For an upgrade to an existing network, the network’s state dump tool captures the network’s current entity and node registrations.
Gas Costs
The following parameters define the gas costs for various types of transactions on the network:
staking.params.gas_costs.add_escrowThe cost for an add escrow (i.e. stake tokens) transaction. The value is set to 1000.staking.params.gas_costs.burnThe cost for a burn (i.e. destroy tokens) transaction. The value is set to 1000.staking.params.gas_costs.reclaim_escrowThe cost for a reclaim escrow transaction (i.e. unstake tokens). The value is set to 1000.staking.params.gas_costs.transferThe cost for a transfer transaction. The value is set to 1000.staking.params.gas_costs.amend_commission_scheduleThe cost for amending, or changing, a commission schedule. The value is set to 1000.registry.params.gas_costs.deregister_entityThe cost for a deregister entity transaction. The value is set to 1000.registry.params.gas_costs.register_entityThe cost for a register entity transaction. The value is set to 1000.registry.params.gas_costs.register_nodeThe cost for a register node transaction. The value is set to 1000.registry.params.gas_costs.register_runtimeThe cost for a register ParaTime transaction. The value is set to 1000.registry.params.gas_costs.runtime_epoch_maintenanceThe cost of a maintenance fee that a node that is registered for a ParaTime pays each epoch. The value is set to 1000.registry.params.gas_costs.unfreeze_nodeThe cost for unfreeze node (i.e. after the node is slashed and frozen) transaction. The current value is 1000.registry.params.gas_costs.update_keymanagerThe cost for update keymanager transaction. The value is set to 1000.roothash.params.gas_costs.compute_commitThe cost for a ParaTime compute commit. The value is set to 10000.roothash.params.gas_costs.merge_commitThe cost for a ParaTime merge commit. The value is set to 10000.
CAUTION
In addition to the gas costs specified above, each transaction also incurs a cost proportional to its size.
The consensus.params.gas_costs.tx_byte parameter specifies the additional gas cost for each byte of a transaction. The value is set to 1.
For example, a staking transfer transaction of size 230 bytes would have a total gas cost of 1000 + 230.
Root Hash
The roothash object contains parameters related to the Root Hash service and a minimal state related to the runtimes.
roothash.params.max_runtime_messagesThe global limit on the number of messages that can be emitted in each round by the runtime. The value is set to 256.roothash.params.max_evidence_ageThe maximum age (in the number of rounds) of submitted evidence for compute node slashing. The value is set to 100.
Staking
The staking object contains parameters controlling the Staking service and all state related to accounts, delegations, special pools of tokens…
Token Supply & Ledger
The following parameters specify the total token supply, total token pool reserved for staking rewards, and account balances across the network at the time of genesis:
staking.total_supplyThe total token supply (in base units) for the network. This is fixed at 10 billion ROSE tokens (the value is set to 10,000,000,000,000,000,000 base units).staking.common_poolThe tokens (in base units) reserved for staking rewards to be paid out over time.staking.governance_depositsThe tokens (in base units) collected from governance proposal deposits.staking.ledgerThe staking ledger, encoding all accounts and corresponding account balances on the network at the time of genesis, including accounts for initial operators, backers, custodial wallets, etc.staking.delegationsThe encoding of the initial delegations at the time of genesis.
INFO
Interpreting your account balance in the staking.ledger
Your account’s general.balance includes all of your tokens that have not been staked or delegated. Within your account’s escrow field, the active.balanceholds the total amount of tokens are (actively) delegated to you.
Delegations
The following parameters control how delegations behave on the network:
staking.params.debonding_intervalThe period of time (in epochs) that must pass before staked or delegated tokens that are requested to be withdrawn are returned to the account’s general balance. The value is set to 336 epochs, which is expected to be approximately 14 days.staking.params.min_delegationThe minimum amount of tokens one can delegate. The value is set to 100,000,000,000 base units, or 100 ROSE tokens.staking.params.allow_escrow_messagesIndicator whether to enable support forAddEscrowandReclaimEscrowruntime messages . The value is set to true.
Node & ParaTime Token Thresholds
There are several staking.params.thresholds parameters that specify the minimum number of tokens that need to be staked in order for a particular entity or a particular type of node to participate in the network.
The entity, node-compute, node-keymanager, node-storage, and node-validator parameters are set to 100,000,000,000 base units for each, indicating that you need to stake at least 100 ROSE tokens in order to have your entity or any of the specified nodes go live on the network.
The staking.params.thresholds parameters also specify the minimum thresholds for registering new ParaTimes. The runtime-compute and runtime-keymanager parameters are set to 50,000,000,000,000 base units, indicating that you need to stake at least 50,000 ROSE tokens in order to register a compute/key manager ParaTime.
Rewards
The following parameters control the staking rewards on the network:
staking.params.reward_scheduleThe staking reward schedule, indicating how the staking reward rate changes over time, defined at an epoch-by-epoch granular basis. The reward schedule uses a tapering formula with higher rewards being paid out at earlier epochs and then gradually decreasing over time. For more details, see the Staking Incentives doc.staking.params.signing_reward_threshold_numeratorandstaking.params.signing_reward_threshold_denominatorThese parameters define the proportion of blocks that a validator must sign during each epoch to receive staking rewards. The set fraction of 3/4 means that a validator must maintain an uptime of at least 75% blocks during an epoch in order to receive staking rewards for that period.staking.params.fee_split_weight_proposeThe block proposer’s share of transaction fees. The value is set to 2.staking.params.fee_split_weight_next_proposeThe next block proposer’s share of transaction fees. The value is set to 1.staking.params.fee_split_weight_voteThe block signer’s/voter’s share of transaction fees. The value is set to 1.staking.params.reward_factor_epoch_signedThe factor for rewards distributed to validators who signed at least threshold blocks in a given epoch. The value is set to 1.staking.params.reward_factor_block_proposedThe factor for rewards earned for block proposal. The value is set to 0, indicating validators get no extra staking rewards for proposing a block.
Commission Schedule
The following parameters control how commission rates and bounds can be defined and changed:
staking.params.commision_schedule_rules.rate_change_intervalThe time interval (in epochs) at which rate changes can be specified in a commission schedule. The value is set to 1 indicating that the commission rate can change on every epoch.staking.params.commision_schedule_rules.rate_bound_leadThe minimum lead time (in epochs) needed for changes to commission rate bounds. This is set to protect the delegators from unexpected changes in an operator’s commission rates. The value is set to 336, which is expected to be approximately 14 days.staking.params.commision_schedule_rules.max_rate_stepsThe maximum number of rate step changes in a commission schedule. The value is set to 10, indicating that the commission schedule can have a maximum of 10 rate steps.staking.params.commision_schedule_rules.max_bound_stepsThe maximum number of commission rate bound step changes in the commission schedule. The value is set to 10, indicating that the commission schedule can have a maximum of 10 rate bound steps.
Slashing
These parameters specify key values for the network’s slashing mechanism:
staking.params.slashing.consensus-equivocation.amountThe amount of tokens to slash for equivocation (i.e. double signing). The value is set to 100,000,000,000 base units, or 100 ROSE tokens.staking.params.slashing.consensus-equivocation.freeze_intervalThe duration (in epochs) for which a node that has been slashed for equivocation is “frozen,” or barred from participating in the network’s consensus committee. The value of 18446744073709551615 (the maximum value for a 64-bit unsigned integer) means that any node slashed for equivocation is, in effect, permanently banned from the network.staking.params.slashing.consensus-light-client-attack.amountThe amount of tokens to slash for light client attack. The value is set to 100,000,000,000 base units, or 100 ROSE tokens.staking.params.slashing.consensus-light-client-attack.freeze_intervalThe duration (in epochs) for which a node that has been slashed for light client attack is “frozen,” or barred from participating in the network’s consensus committee. The value of 18446744073709551615 (the maximum value for a 64-bit unsigned integer) means that any node slashed for light client attack is, in effect, permanently banned from the network.
Committee Scheduler
The scheduler object contains parameters controlling how various committees (validator, compute, key manager) are periodically scheduled.
scheduler.params.min_validatorsThe minimum size for the consensus committee. The value is set to 15 validators.scheduler.params.max_validatorsThe maximum size for the consensus committee. The value is set to 100 validators.scheduler.params.max_validators_per_entityThe maximum number of nodes from a given entity that can be in the consensus committee at any time. The value is set to 1.
Random Beacon
The beacon object contains parameters controlling the network’s random beacon.
beacon.baseNetwork’s starting epoch. When a network is upgraded, its epoch is retained. For example, for the Cobalt upgrade the epoch of the Mainnet state dump was bumped by 1 from 5,046 to 5,047.beacon.params.backendThe random beacon backend to use. The value is set to “pvss” indicating that the beacon implementing a PVSS (publicly verifiable secret sharing) scheme should be used.
PVSS Beacon
These parameters control the behavior of the new improved random beacon introduced in the Cobalt upgrade:
beacon.params.pvss_parameters.participantsThe number of participants to be selected for each beacon generation protocol round. The value is set to 20.beacon.params.pvss_parameters.thresholdThe minimum number of participants which must successfully contribute entropy for the final output to be considered valid. The value is set to 10.beacon.params.pvss_parameters.commit_intervalThe duration of the Commit phase (in blocks). The value is set to 400.beacon.params.pvss_parameters.reveal_intervalThe duration of the Reveal phase (in blocks). The value is set to 196.beacon.params.pvss_parameters.transition_delay__ The duration of the post Reveal phase (in blocks). The value is set to 4.
Governance
The governance object contains parameters controlling the network’s on-chain governance introduced in the Cobalt upgrade:
governance.params.min_proposal_depositThe amount of tokens (in base units) that are deposited when creating a new proposal. The value is set to 10,000,000,000,000 base units, or 10,000 ROSE tokens.governance.params.voting_periodThe number of epochs after which the voting for a proposal is closed and the votes are tallied. The value is set to 168, which is expected to be approximately 7 days.governance.params.quorumThe minimum percentage of voting power that needs to be cast on a proposal for the result to be valid. The value is set to 75 (i.e. 75%).governance.params.thresholdThe minimum percentage ofVoteYesvotes in order for a proposal to be accepted. The value is set to 90 (i.e. 90%).governance.params.upgrade_min_epoch_diffThe minimum number of epochs between the current epoch and the proposed upgrade epoch for the upgrade proposal to be valid. Additionally, it specifies the minimum number of epochs between two consecutive pending upgrades.The value is set to 336, which is expected to be approximately 14 days.governance.params.upgrade_cancel_min_epoch_diffThe minimum number of epochs between the current epoch and the proposed upgrade epoch for the upgrade cancellation proposal to be valid. The value is set to 192, which is expected to be approximately 8 days.
Consensus
The following parameters are used to define key values for the network’s consensus protocol:
consensus.backendDefines the backend consensus protocol. The value is set to “tendermint” indicating that the Tendermint Core BFT protocol is used.consensus.params.timeout_commitSpecifies how long to wait (in nanoseconds) after committing a block before starting a new block height (this affects the block interval). The value is set to 5,000,000,000 nanoseconds, or 5 seconds.consensus.params.max_tx_sizeMaximum size (in bytes) for consensus-layer transactions. The value is set to 32,768 bytes, or 32 kB.consensus.params.max_block_sizeMaximum block size (in bytes). The value is set to 22,020,096 bytes, or 22 MB.consensus.params.max_block_gasMaximum block gas. The value is set to 0, which specifies an unlimited amount of gas.consensus.params.max_evidence_sizeMaximum evidence size (in bytes). The value is set to 51,200 bytes, or 50 kB.consensus.params.public_key_blacklistA list of the public keys that cannot be used on the network. Currently, there are no blacklisted public keys.consensus.params.state_checkpoint_intervalThe interval (in blocks) on which state checkpoints should be taken. The value is set to 10000.consensus.params.state_checkpoint_num_keptThe number of past state checkpoints to keep. The value is set to 2.consensus.params.state_checkpoint_chunk_sizeThe chunk size (in bytes) that should be used when creating state checkpoints. The value is set to (8,388,608 bytes, or 8 MB).
Halt Epoch
The halt_epoch parameter specifies the epoch when the network is scheduled to halt. This parameter is set to intentionally force an upgrade before this epoch is reached. For example, if it is set to 9940, it indicates that the network should be upgraded before epoch 9940, otherwise it will halt.