Ethereum Genesis Block Private Network

{
"config": {
           "chainId":2010,
           "homesteadBlock":0,
           "eip155Block":0,
           "eip158Block":0
           },
"gasLimit": "0x8000000",     
"difficulty": "0x400",
"alloc": {}
}

Only above Attributes are accepted in Geth version 1.9 (go1.9)


You can simple take the generated one here and modify the accounts and balances.

Also put the gas limit to a higher number like 0x2dc6c0 (3mio) and move the difficulty down to 0xb


{
    "nonce": "0x0000000000000042",
    "difficulty": "0x000000100",
    "alloc": {

    },
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "0x16388"
}

You can basically create any Genesis Block that you like, as long as it is valid according to the Yellowpaper, 4.3.4. Block Header Validity.

The Genesis Block does not indicate on which Blockchain a miner works. This is defined by connecting to the right peer-to-peer network or, if you are using the discovery mechanism on a network with multiple Blockchains running, using the network ID.

The (Genesis) Block describes the parameters of this specific Block and they are set according to the Miner's algorithm. Of course, any illegal behavior will be rejected by the consensus mechanism.

In conclusion, you can use the same GB for all custom Blockchains.

The values that have to be of correct in terms of mathematical validation are nonce (Proof of Work), mixhash (Fowler–Noll–Vo reduced DAG value set), timestamp (creation time). The geeky values in this example are a copy from the original Frontier release Genesis Block. The parentHash points to the parent block in the chain and the Genesis Block is the only Block where 0 is allowed and required. alloc allows to "pre-fill" accounts with Ether, but that's not needed here since we can mine Ether very quickly.

The difficulty defines the condition to satisfy by the Miner (hash) algorithm to find a valid block. On a test network, it's generally kept small in order to find a block for every iteration. This is useful for testing since needed to execute transactions on the Blockchain. The block generation frequency is kind of the response time of the Blockchain.

The gasLimit is the upper limit of Gas that a transaction can burn. It's inherited into the next Block. extraData is 32 bytes of free text where you can et(h)ernalise smart things on the Blockchain :) The coinbase is the address that got the mining and transaction execution rewards, in Ether, for this Block. It can be 0 here, since it will be set for each new block according to the coinbase of the Miner that found the Block (and added the transactions).

I have documented this a bit more in detail here.

Hope this helps :)