您当前的位置: 首页 > 
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Hyperledger Fabric的区块结构 交易结构

软件工程小施同学 发布时间:2019-11-23 21:04:14 ,浏览量:0

 

 

一、区块整体结构 1. 结构图

 

 

2. json格式
{ 
    header: { 
        number: '37', 
        previous_hash:'b57d891702819c0e62dd7d405743b0663d19e49365d43c6420f281b43492e78d',  
        data_hash:'c730c7f832a24f9906e5224205182a66f25ef92b766c02aba60e23293883361f'
    },
    data: { 
        data: [{ 
            signature:,
            payload: { 
                header: { 
                    channel_header: {
                        type: 3,
                        version: 1,
                        timestamp: '2019-12-27T02: 30: 35.321Z',
                        channel_id: 'mychannel',
                        tx_id:'cbd9e30878c5a9c6887d67596e6cd0a2cb30c253ef32e7dceb4440b4d0ec3b9d',
                        epoch: '0',
                        extension: ,
                        typeString: 'ENDORSER_TRANSACTION'
                    },
                    signature_header: {
                        creator: { 
                            Mspid: 'Org1MSP',
                            IdBytes:'-----BEGIN CERTIFICATE-----\nMIICKTCCAdCgAwIBAgIQWv/vCt79Gp31mVsZBLDTBzAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xOTEyMjcwMTE4MDBaFw0yOTEyMjQwMTE4MDBa\nMGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y\nZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFYP5wn0Nr\n9NXpCXbqDiNa53r9RXcO0qcIgZhj9apQIn1ZOqdj4E7UQ/Yv9J8nOJMfFCwfU6VU\nNJ0B5DI7R/jro00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV\nHSMEJDAigCAfNb1MjsB1bCjo4uzb2roawarG0SSzApS1Qp8u50YO5DAKBggqhkjO\nPQQDAgNHADBEAiBofjUeoqz1oTNc5yeE7R7/5incME4/aQJX8U7Ym8oHMgIgdor2\n40bkUNJmhFdeB2kXoLHGrD9F+bRzN+6zoerkApg=\n-----END CERTIFICATE-----\n'
                        },
                        nonce:
                    }
                },
                data: { 
                    actions: [{
                        header: { 
                            creator: { 
                                Mspid: 'Org1MSP',
                                IdBytes:'-----BEGIN CERTIFICATE-----\nMIICKTCCAdCgAwIBAgIQWv/vCt79Gp31mVsZBLDTBzAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xOTEyMjcwMTE4MDBaFw0yOTEyMjQwMTE4MDBa\nMGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y\nZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATFYP5wn0Nr\n9NXpCXbqDiNa53r9RXcO0qcIgZhj9apQIn1ZOqdj4E7UQ/Yv9J8nOJMfFCwfU6VU\nNJ0B5DI7R/jro00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV\nHSMEJDAigCAfNb1MjsB1bCjo4uzb2roawarG0SSzApS1Qp8u50YO5DAKBggqhkjO\nPQQDAgNHADBEAiBofjUeoqz1oTNc5yeE7R7/5incME4/aQJX8U7Ym8oHMgIgdor2\n40bkUNJmhFdeB2kXoLHGrD9F+bRzN+6zoerkApg=\n-----END CERTIFICATE-----\n'
                            },
                            nonce:
                        },
                        payload: { 
                            chaincode_proposal_payload: { 
                                input: { 
                                    chaincode_spec: { 
                                        type: 1,
                                        typeString: 'GOLANG',
                                        input: { 
                                            args: [ 
                                                ,
                                                
                                            ],
                                            decorations: {}
                                        },
                                        chaincode_id: { 
                                            path: '', 
                                            name: 'mycc', 
                                            version: ''
                                        },
                                        timeout: 0
                                    }
                                }
                            },
                            action: {
                                proposal_response_payload: { 
                                    proposal_hash:'50180bdb986b6b4488a54528e9f002221109ea1f6bb87847783cf4bdabeb2037',
                                    extension: { 
                                        results:{ 
                                            data_model: 0, 
                                            ns_rwset: [{ 
                                                namespace: 'lscc',
                                                rwset: { 
                                                    reads: [{ 
                                                        key: 'mycc', 
                                                        version: { 
                                                            block_num: '1', 
                                                            tx_num: '0'
                                                        }
                                                    }],
                                                    range_queries_info: [],
                                                    writes: [],
                                                    metadata_writes: []
                                                },
                                                collection_hashed_rwset: []
                                            },
                                            { 
                                                namespace: 'mycc',
                                                rwset: { 
                                                    reads: [],
                                                    range_queries_info: [],
                                                    writes: [{ 
                                                        key: '8543b514-1fa8-49f6-a610-cd44d4d5a318',
                                                        is_delete: false,
                                                        value:'{
                                                                "bizType": "HY",
                                                                "bizUUID": "6399e25f-2ad1-4f7c-80cc-6ba720f312b9",
                                                                "count": 5,
                                                                "fillPerson": "许褚",
                                                                "requestID": "89c06e39-403b-430d-9bac-caab738c1aeb",
                                                                "requestTime": "2019-12-27 10:30:24",
                                                                "reviewOpinion": "从许攸,袭乌巢",
                                                                "reviewPass": "通过",
                                                                "reviewer": "曹操",
                                                                "submissionTim": "提交审核时间",
                                                                "toGzwTime": "上报时间",
                                                                "blockTimeTamp": "2019-12-27 10:30:35:320",
                                                                "tx_id": "cbd9e30878c5a9c6887d67596e6cd0a2cb30c253ef32e7dceb4440b4d0ec3b9d"
                                                            }'
                                                        }],
                                                    metadata_writes: []
                                                },
                                                collection_hashed_rwset: []
                                            }]
                                        },
                                        events: { 
                                            chaincode_id: '',
                                            tx_id: '',
                                            event_name: '',
                                            payload: 
                                        },
                                        response: { 
                                            status: 200,
                                            message: 'insert finished successfully',
                                            payload:'8543b514-1fa8-49f6-a610-cd44d4d5a318: {
                                                "bizType": "HY",
                                                "bizUUID": "6399e25f-2ad1-4f7c-80cc-6ba720f312b9",
                                                "count": 5,
                                                "fillPerson": "许褚",
                                                "requestID": "89c06e39-403b-430d-9bac-caab738c1aeb",
                                                "requestTime": "2019-12-27 10:30:24",
                                                "reviewOpinion": "从许攸,袭乌巢",
                                                "reviewPass": "通过",
                                                "reviewer": "曹操",
                                                "submissionTim": "提交审核时间",
                                                "toGzwTime": "上报时间",
                                                "blockTimeTamp": "2019-12-27 10:30:35:320",
                                                "tx_id": "cbd9e30878c5a9c6887d67596e6cd0a2cb30c253ef32e7dceb4440b4d0ec3b9d"
                                            }'
                                        },
                                        chaincode_id: { 
                                            path: '', 
                                            name: 'mycc', 
                                            version: '1.0'
                                        }
                                    }
                                },
                                endorsements: [{ 
                                    endorser: { 
                                        Mspid: 'Org1MSP',
                                        IdBytes:'-----BEGIN CERTIFICATE-----\nMIICKTCCAc+gAwIBAgIRALSEbL20/qyKuufJLYD1EH0wCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMTkxMjI3MDExODAwWhcNMjkxMjI0MDExODAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn\nMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABArT+vAEGJ/5\nOS0ntKWOJS9krod8flniyops3SqN3vFhGfRzmDq5dxARMnCTjT16g9I4Jo4QyFAo\nUAfXu1Zv93qjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAIB81vUyOwHVsKOji7NvauhrBqsbRJLMClLVCny7nRg7kMAoGCCqGSM49\nBAMCA0gAMEUCIQDWlXWhXOkwlANMLmkAB8REFYyqmKQz9UKe3z3VmjOQ+AIgWPq/\nDZgErjIfq7KT5XWVCfvsxbJRWjD3o3aw0TE291A=\n-----END CERTIFICATE-----\n'
                                    },
                                    signature:
                                    }]
                            }
                        }
                    }]
                }
            }
        }]
    },
    metadata: { 
        metadata: [
            { 
                value: '\n\u0000', 
                signatures: [{ 
                    signature_header: { 
                        creator: { 
                            Mspid: 'OrdererMSP',
                            IdBytes:'-----BEGIN CERTIFICATE-----\nMIICCzCCAbKgAwIBAgIQU4Xlp67Edi3tdBugbUNo9TAKBggqhkjOPQQDAjBpMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w\nbGUuY29tMB4XDTE5MTIyNzAxMTgwMFoXDTI5MTIyNDAxMTgwMFowWDELMAkGA1UE\nBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz\nY28xHDAaBgNVBAMTE29yZGVyZXIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAATdnI0rfvsU27XRhbPEp81yTiBpjiP4kLTHtAuXPc58RHHM2zYX\n4oBC+UeOsreh2pibd/J1qJ0gnSlxL8ZmtdKTo00wSzAOBgNVHQ8BAf8EBAMCB4Aw\nDAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCBcNzwBMeyKcdPqnBdYhDyqMKUAYA6W\nUcitApPVWMMjEzAKBggqhkjOPQQDAgNHADBEAiBQegfrUuFYAHqDla+DJlSMHqiW\nQoI8q1Dv8t39c72tOQIgDpg9AbEPgz7s+8HUW+ahlZcYnRsRg1HM3WtElcMRlVM=\n-----END CERTIFICATE-----\n'
                        },
                        nonce:
                    },
                    signature:
                }]
            },
            { 
                value: { 
                    index: '0'
                }, 
                signatures: []
            },
            [0]
        ]
    }
}

 

二、如何查看区块 1. 查看区块链信息
docker exec [container] peer channel getinfo -c [channel]

#返回如下信息
Blockchain info: {"height":3,"currentBlockHash":"MvXGp1W3jK7vnn5V0dGZAgg7iIadjLCl1ArCh5XHXHs=","previousBlockHash":"BxXo7hCkE6Gb4Y/KDi0M85dw/8d7S4BU1hvcVz0DQJw="} 

#区块链高度为3,区块链的编号为0, 1, 2,其中0是创世区块

 

2. 获取区块文件
#获取区块链文件
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 ./

 

3. 解析区块文件

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

 

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

 

三、解析 1. 区块结构

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

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

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

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

 

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

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

  • header
  • data: 包括一个由action组成的数组

 

下面看看action包含哪些东西

actions: 
-	header: ...	//和signature_header一样
	payload: 
		chaincode_proposal_payload: ...	//请求智能合约的函数名、参数等
		action: 
			endorsements: ...	//背书者的id组成的数组
			proposal_response_payload: ...	//链码模拟执行结果对KV类型状态数据库的读写集

 

 

Hyperledger Fabric区块和交易结构解析

https://blog.csdn.net/qq_33657251/article/details/104452568

 

https://www.cnblogs.com/adderhuang/archive/2004/01/13/12108426.html

 

 

 

 

 

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.0471s