github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/docs/reference/genesis.md (about) 1 # Genesis 2 3 A blockchain network stores a series of deterministically agreed upon states indexed by a sequentially increasing number called the block height. 4 Once a block is committed at a particular height we can always discover the total state at that height by querying more than 1/3 of the chain. 5 6 The state at block `n+1` is the result of applying the transactions accepted at height `n` on top of the state at height `n`. Following this induction backwards 7 we therefore require some initial state. This initial state is called the 'genesis state'. Unlike all subsequent states that are arrived at by the application of consensus 8 amongst validators this state is defined a priori and defines the identity of the chain that will be built on top of it. Producing the genesis document is a singular big bang 9 event performed by a single party. It cannot occur under consensus because it defines who can participate in consensus at block 1. 10 11 ## GenesisDoc 12 13 In burrow we define the genesis facts in a canonical JSON document called the `GenesisDoc`. The sha256 of this document (with whitespace, as it happens) forms the `GenesisHash` 14 which acts as if it were the hash of a virtual zeroth block. 15 16 17 | Field | Purpose | 18 |-------|---------| 19 | GenesisTime | The time at which the GenesisDoc was produced - the zero time for this chain - also a source of entropy for the GenesisHash | 20 | ChainName | A human-readable name for the chain - also a source of entropy for the GenesisHash | 21 | Params | Initial parameters for the chain that control the on-chain governance process | 22 | GlobalPermissions | The default fall-through permissions for all accounts on the chain, see [permissions](permissions.md) | 23 | Accounts | The initial EVM accounts present on the chain (see below for more detail) | 24 | Validators | The initial validators on the chain that together will decide the value of the next state (see below for more detail) | 25 26 Here is an example `genesis.json`: 27 28 ```json 29 { 30 "GenesisTime": "2019-05-17T10:33:23.476788642Z", 31 "ChainName": "BurrowChain_8B1683", 32 "Params": { 33 "ProposalThreshold": 3 34 }, 35 "GlobalPermissions": { 36 "Base": { 37 "Perms": "send | call | createContract | createAccount | bond | name | proposal | input | batch | hasBase | hasRole", 38 "SetBit": "root | send | call | createContract | createAccount | bond | name | proposal | input | batch | hasBase | setBase | unsetBase | setGlobal | hasRole | addRole | removeRole" 39 } 40 }, 41 "Accounts": [ 42 { 43 "Address": "8E32521F19ADC32E88EACA2D23D05A3583D35A55", 44 "PublicKey": { 45 "CurveType": "ed25519", 46 "PublicKey": "CED12BECB1BCB11F8E0268C87E4D5EE07C0224649737AAE3468373BD3F89DA1E" 47 }, 48 "Amount": 9999999999, 49 "Name": "Validator_0", 50 "Permissions": { 51 "Base": { 52 "Perms": "bond", 53 "SetBit": "bond" 54 } 55 } 56 }, 57 { 58 "Address": "51CA318CD3FB12697DD4FD4435C959BE025CD200", 59 "PublicKey": { 60 "CurveType": "ed25519", 61 "PublicKey": "36F74993A6EACEB134CF02F1176EFC89E85720A5001D8D5AF46A2BCC99FBCD1E" 62 }, 63 "Amount": 9999999999, 64 "Name": "Developer_0", 65 "Permissions": { 66 "Base": { 67 "Perms": "send | call | createContract | createAccount | name | proposal | input | hasRole | removeRole", 68 "SetBit": "send | call | createContract | createAccount | name | proposal | input | hasRole | removeRole" 69 } 70 } 71 } 72 ], 73 "Validators": [ 74 { 75 "Address": "8E32521F19ADC32E88EACA2D23D05A3583D35A55", 76 "PublicKey": { 77 "CurveType": "ed25519", 78 "PublicKey": "CED12BECB1BCB11F8E0268C87E4D5EE07C0224649737AAE3468373BD3F89DA1E" 79 }, 80 "Amount": 9999999998, 81 "Name": "Validator_0", 82 "UnbondTo": [ 83 { 84 "Address": "8E32521F19ADC32E88EACA2D23D05A3583D35A55", 85 "PublicKey": { 86 "CurveType": "ed25519", 87 "PublicKey": "CED12BECB1BCB11F8E0268C87E4D5EE07C0224649737AAE3468373BD3F89DA1E" 88 }, 89 "Amount": 9999999998 90 } 91 ] 92 } 93 ] 94 } 95 96 ```