genesis.json文件用于配置生成以太坊私鏈網(wǎng)絡(luò)的創(chuàng)世區(qū)塊,當(dāng)我們需要去創(chuàng)建一個創(chuàng)世區(qū)塊時,我們可以通過修改genesis.json文件內(nèi)的初始參數(shù)將這些數(shù)據(jù)寫入創(chuàng)世區(qū)塊。下面是以太坊官方文檔給出的一個例子:
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "8000000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
字段解讀
config
config是決定私鏈設(shè)置的核心配置。
chainId:鏈ID,用于標(biāo)識當(dāng)前這條鏈,主要用于重放保護(hù)。
homesteadBlock:以太坊“家園”版本啟用的區(qū)塊高度,homesteadBlock被設(shè)置為0則意味著我們將直接使用以太坊的“家園”版本,在以太坊主網(wǎng)中此設(shè)置為0.
eip150Block:第150號以太坊改進(jìn)提案(EIP150)啟用的區(qū)塊高度,該提案主要用于解決因denial-of-service問題導(dǎo)致gas價格提高的問題主網(wǎng)中其啟用高度為2463000。
eip155Block:EIP155提案啟用的區(qū)塊高度,該提案主要是為了預(yù)防重放攻擊。
eip158Block:EIP158提案啟用的區(qū)塊高度,該提案的提出主要是為了改變以太坊客戶端處理空賬戶的方式。在EIP158提案中以太坊客戶端會將空賬戶視為不存在的對象,這能有效節(jié)省區(qū)塊鏈上的存儲空間。
byzantiumBlock:拜占庭硬分叉啟用的區(qū)塊高度,最大的改動是將出塊獎勵從5ETH減少到了3ETH,主網(wǎng)中該分叉的啟用區(qū)塊高度為4370000。
constantinopleBlock:君士坦丁堡硬分叉啟用的區(qū)塊高度,該分叉的目的是提高以太坊的運(yùn)行效率,并移除/推遲難度炸彈,同時將出塊獎勵從拜占庭硬分叉后的3ETH減少為2ETH。主網(wǎng)中君士坦丁堡硬分叉的啟用區(qū)塊高度為7280000。
petersburgBlock:圣彼得堡硬分叉啟用的區(qū)塊高度,該硬分叉是為解決君士坦丁堡硬分叉中的安全漏洞問題,將EIP1283提案移除。主網(wǎng)中圣彼得堡和君士坦丁堡分叉同時激活,區(qū)塊高度為7280000。
ethash:標(biāo)識當(dāng)前私鏈?zhǔn)褂玫墓沧R算法為ethash。
mixhash
一個256為的哈希散列,結(jié)合nonce一同證明已在此區(qū)塊上執(zhí)行了足夠量的計算(POW)。nonce和mixhash的組合必須滿足黃皮書4.3.4中描述的數(shù)學(xué)條件,即區(qū)塊頭有效性(44)。它允許驗證該區(qū)塊是否被加密挖掘。
?nonce
一個用于標(biāo)記發(fā)送方發(fā)送的交易數(shù)量的值,是一個64位哈希值,與mixhash值一起證明已在區(qū)塊上進(jìn)行了足夠量的計算。
difficulty
出塊難度,對應(yīng)發(fā)現(xiàn)該區(qū)塊的nonce期間所應(yīng)用的難度級別,難度越高,礦工發(fā)現(xiàn)有效區(qū)塊所需的計算就越多。該值主要用于控制出塊時間,使得出塊效率保持在目標(biāo)范圍之內(nèi)。
alloc
預(yù)定義的錢包列表,可以通過該字段預(yù)先在指定錢包地址內(nèi)預(yù)存一定數(shù)量得原生代幣。這是以太坊預(yù)售期間所執(zhí)行得特定功能。
coinbase
一個160位地址,用于標(biāo)識出塊獎勵的收益地址。
timestamp
時間戳,相當(dāng)于Unix中的time()函數(shù)的輸出。引入時間戳的機(jī)制能夠在時間方面實(shí)現(xiàn)出塊的穩(wěn)態(tài),時間戳還允許驗證出塊順序。(黃皮書,4.3.4.(43))。
parentHash
整個父塊頭的Keccak256位哈希(包括父塊頭的nonce和mixhash),若區(qū)塊是創(chuàng)世區(qū)塊,則該值為0。
extraData
一個可以自由設(shè)置的選項,最大32個byte。該字段用于將數(shù)據(jù)保存在區(qū)塊鏈上
gasLimit
每個區(qū)塊的gas消耗限制。每個區(qū)塊所消耗的gas不能超過這個值。
參考資料
https://github.com/ethereum/go-ethereum/tree/feeccdf4ec1084b38dac112ff4f86809efd7c0e5/params
Ethereum private network configuration guide. · GitHub文章來源:http://www.zghlxwxcb.cn/news/detail-446008.html
第一個為以太坊相關(guān)源碼,第二個為genesis.json文件解析。文章來源地址http://www.zghlxwxcb.cn/news/detail-446008.html
到了這里,關(guān)于以太坊私鏈搭建(二)——genesis.json字段解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!