Fabric区块和交易结构解析

查看区块链信息

docker exec [container] peer channel getinfo -c [channel]
#返回如下信息
Blockchain info: {"height":3,"currentBlockHash":"MvXGp1W3jK7vnn5V0dGZAgg7iIadjLCl1ArCh5XHXHs=","previousBlockHash":"BxXo7hCkE6Gb4Y/KDi0M85dw/8d7S4BU1hvcVz0DQJw="} 
#区块链高度为3,区块链的编号为0, 1, 2,其中0是创世区块

获取区块文件

#获取区块链文件
docker exec [container] peer channel fetch [block-number] -c [channel]
#区块文件保存在当前文件夹,文件名为[channel]_[block-number].block
#拷贝区块文件到宿主机器当前文件夹
docker cp [container]:/opt/gopath/src/github.com/hyperledger/fabric/peer/[channel]_[block-number].block ./

解析区块文件

使用fabric-samples中的二进制工具configtxgen解析区块文件,可以将configtxgen所在文件夹添加到PATH中。再查看环境变量中是否有FABRIC_CFG_PATH,没有的话要设置成configtx.yaml所在文件夹,否则configtxgen会找不到配置文件。

#将区块文件解析成json文件
configtxgen -inspectBlock [.block file] > [.json file]

区块结构

为了增强可读性,可以用在线工具将json转成yaml

---
header: 
	data_hash: ...
	number: ...
	previous_hash: ...
data: 
	data: 
	-	payload: ...
		signature: ...
metadata: 
	metadata: ...

可以看到一个区块包括三部分:

  1. 区块头:包含当前区块哈希、区块序号、前一区块的哈希;
  2. 区块数据:交易组成的数组
  3. 元数据:和当前区块相关的元数据

交易结构

signature: ...
payload: 
	header: 
		channel_header: ...		//包括txid、时间戳、通道等信息
		signature_header: ...	//包括sender的证书、mspid、随机数nonce
	data: 
		actions: 
		-	header: 
			payload: ...

可以看到一个交易包括:交易发送者的签名、数据载荷payload。
payload又包含两部分:

  1. header
  2. data: 包括一个由action组成的数组,下面看看action包含哪些东西
actions: 
-	header: ...	//和signature_header一样
	payload: 
		chaincode_proposal_payload: ...	//请求智能合约的函数名、参数等
		action: 
			endorsements: ...	//背书者的id组成的数组
			proposal_response_payload: ...	//链码模拟执行结果对KV类型状态数据库的读写集

猜你喜欢

转载自blog.csdn.net/qq_33657251/article/details/104452568