创世区块配置文件genesis.json的格式解读
2021-03-02 14:29
标签:随机数 you class ips 通过 先来 config work gis 中文网站上关于genesis 的解析大多数都来自于这个Gist:Ethereum private network configuration guide. (github.com),但实际上genesis 中的配置项还有一些其他内容。 首先,genesis.json 是Geth 工具用来创建创世区块以及区块链的配置文件,genesis.json 并不是创世区块本身。 查阅Geth 文档,在Using Geth/ Connecting To The Network 中,举例了一个genesis.json 如下: 我们先来关注该示例中列举出来的keys: 更多的genesis.json 文件中会包含config 参数,例如: 官方文档给出的示例为:To create the initial extradata for your network, collect the signer addresses and encode extradata as the concatenation of 32 zero bytes, all signer addresses, and 65 further zero bytes. 要使用Geth启动一个私有的用于实验的以太坊区块链,可以参考https://geth.ethereum.org/docs/interface/private-network 按步骤进行配置。 其他参考资料: 第二份genesis.json文件来自:float‘s blog 关于homesteadBlock的解释:https://www.liankexing.com/question/622 创世区块配置文件genesis.json的格式解读 标签:随机数 you class ips 通过 先来 config work gis 原文地址:https://www.cnblogs.com/soowin/p/14328195.html创世区块配置文件genesis.json的格式解读
{
"alloc": {
"dbdbdb2cbd23b783741e8d7fcf51e459b497e4a6": {
"balance": "1606938044258990275541962092341162602522202993782792835301376"
},
"e6716f9544a56c530d868e4bfbacb172315bdead": {
"balance": "1606938044258990275541962092341162602522202993782792835301376"
},
...
},
"nonce": "0x000000000000002a",
"difficulty": "0x020000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x2fefd8"
}
alloc
代表初始资产配置,在该区块链产生时,就预先赋予这些账户一定数额的WEI(不是ETH)nonce
预定一个随机数,这是一个与PoW 机制有关的值difficulty
定义了每次挖矿时,最终确定nonce 的难度mixhash
一个与PoW 机制有关的值coinbase
每挖出一个区块,都会获得奖励。该值指定默认情况下把奖励给到哪个账户。实际上,我们每次挖矿开始之前,都会自己指定miner.setEtherbase(UserAddress)
,一般都会把奖励给自己timestamp
时间戳,规定创世区块开始的时间parentHash
在区块链中,区块是相连的,parentHash 指定了本区块的上一个区块Hash。对于创世区块来说,parentHash 为0extraData
???gasLimit
规定该区块链中,gas 的上限{
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"clique": {
"period": 15,
"epoch": 30000
}
},
"gasLimit": "8000000",
"difficulty": "1",
"extraData": "0x00000000000000000000000000000000000000000000000000000000000000008D5090Cbf4AC61BD8da523eDC8C52335a2136BDF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"8D5090Cbf4AC61BD8da523eDC8C52335a2136BDF": {
"balance": "0x1000000000000000000"
}
}
}
chainID
该链的ID。在用geth 启动区块链时,还需要指定一个network 参数。只有当network、chainID、创世区块配置都相同时,才是同一条链。homesteadBlock等
相关协议机制的升级区块所在的高度,签名算法是homestead ->eip155 -> eip158,所以从homesteadBlock 之前区块都通过homestead 相关算法机制来验证,homesteadBlock 到eip155Block 之间的用eip155 算法来验证,依次类推。有关这些Block 的内容,可以参阅go-ethereum 源码中的config.goclique
一种PoA(Proof-of-Authority)的共识方法,与之相对的是Ethash,一种PoW 共识方法。有关Clique 共识方法的详细内容,可参阅EIP-225。如果要使用Clique,则extraData 字段必须按规定设置extraData
在Clique 机制下,新区块只能被签名人(singers)挖掘,区块链生长过程中,可以通过投票来选举或者免除签名人。在区块链开始运行时,需要定义一个初始singer。建议