關(guān)于genesis block的基本概念
- 系統(tǒng)級(jí)別的genesis block
- 每一個(gè)fabric instance都會(huì)有一個(gè)genesis block。
- 這個(gè)genesis block在orderer啟動(dòng)之前必須創(chuàng)建好。
-- 例如使用configtxgen工具從configtx.yaml配置生成。
configtxgen -profile OrdererOrgGenesis -outputBlock genesis.block
- orderer啟動(dòng)的時(shí)候會(huì)用到它,或者
-- 在orderer.yaml文件里面指定,或者
-- 直接在環(huán)境變量中指定(ORDERER_GENERAL_GENESISFILE) - 這個(gè)genesis block其實(shí)就是系統(tǒng)channel testchainid的channel genesis block
-- 我們可以通過peer channel fetch 0 testchainid.pb -c testchainid
-- 生成的testchainid.pb和genesis block內(nèi)容是一樣的。
- Channel級(jí)別的genesis block
- 每一個(gè)channel也有一個(gè)genesis block,這個(gè)genesis block就是Channel的第一個(gè)block。
- channel的genesis block在instance啟動(dòng)之后,調(diào)用orderer的API創(chuàng)建,主要分兩步:
1. 使用configtxgen工具從configtx.yaml生成配置
configtxgen -profile PeerOrgChannel \
-outputCreateChannelTx {CHANNEL}-genesis.tx \
-channelID {CHANNEL}
2. 發(fā)送命令給orderer創(chuàng)建channel
peer channel create -c {CHANNEL} \
-f {CHANNEL}-genesis.tx \
-o {ORDERERADDREEE}
{CHANNEL}-genesis.tx的內(nèi)容,我沒有研究過,主要包含channel的很基本的信息,可以直接用文本編輯器打開,很多內(nèi)容是可讀的呢。
另外還有一點(diǎn)需要注意的是,genesis block文件不等價(jià)于只含一個(gè)genesis block的ledger文件;因?yàn)殡m然ledger文件包含genesis block,但是ledger文件有自己的包裝格式,對(duì)block進(jìn)行了另外的包裝,所以他們不是一樣的文件內(nèi)容。