了解Hyperledger Fabric Block Extract

问题描述 投票:0回答:1

我想更好地了解Hyperledger Fabric 1.4.2块的块结构及其内部发生的事情。为此,我使用了FabCar示例,并进行了一个更新过程并提取了此相关块。

下载此块进行分析后,我用以下代码对其进行了解码:

peer channel fetch 5 mychannel5.block -c mychannel 
docker cp peer0.org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric
./configtxlator proto_decode --input mychannel5.block --type common.Block > block5

以下块的摘录:

我想知道,带有字节的长行的内容是什么,例如:1.背书人(签名部分)2. id_bytes(顶部:)3.价值(在我更新的交易中)。

我期望字节的可读版本。如何转换或解码它们?例如,对于背书人,我期望那里显示的字节后面有证书和公钥。

谢谢!

            "payload": {
                "data": {
                    "actions": [
                        {
                            "header": {
                                "creator": {
                                    "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWRDZ0F3SUJBZ0lRUzV3cFlnSHdFS24xVGFYTVpaZnpZVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEV4TWpjd09ERTBNREJhRncweU9URXhNalF3T0RFME1EQmEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6SXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVRKWVdFdlpHV0UKejFxWFNUWTc1ZGw1Q2hQYzNsTElWUFZQODBZeFJGMkZiRjJpR3pad0RJRXZ3Ykc1VkM5UGlobGFhNU92c0lZVgpXaHZYS1VraFFoN2pvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NBbG9tTXk5LzlxNjZIZXBCQXM5QXE0NjQ4WGdTRzljd0Z1bjhWY2Z4SXRNVEFLQmdncWhrak8KUFFRREFnTkhBREJFQWlCSGF6N1ZuajR1aFdjSzE4d0ZQOUUzdGRscGRSZmNZQ1Zkdk9CL08zSHd3Z0lnUm9SegpFTFFyVm9KanFjYkltcFN6dDVQY0FVbWIxRGozSllmL1EvN0RKMFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
                                    "mspid": "Org2MSP"
                                },
                                "nonce": "n9De6IYrKMCvyKHHCT3iv9JeDQOAspmU"
                            },
                            "payload": {
                                "action": {
                                    "endorsements": [
                                        {
                                            "endorser": "CgdPcmcxTVNQEqYGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNKekNDQWM2Z0F3SUJBZ0lRQm0xS0Qvd3g1M3lEdWZZYmVJK0hjekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEV4TWpjd09ERTBNREJhRncweU9URXhNalF3T0RFME1EQmEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1DNXZjbWN4CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVDY2h5bm82Z3lUVWYKT2JuYzZZOEVWekVTdGVYZ0dCZnpqWXlyeVhsYkpvMEJ5a3RPRjI0ZGtBbDdxR2FsWStjajducit2UFMzNDhZLwozQ20zNDJHelo2Tk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FncmFTYWo2dTJSZTVqUkhrTElCN0lDWkNkbmZnUVMzczZGcjJ3YTNJOGxKVXdDZ1lJS29aSXpqMEUKQXdJRFJ3QXdSQUlnV1NFZzVidEVESXdkejdQNWYrUWVrTjVhcm5pMDFnOWZycnFtYjh3ZDJ1UUNJQ2VkcXZpNgpqQ00weUo4SVpwT2FrQ2FnYTd0MnExYnN4M1ZJeG0yTkJuVFMKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
                                            "signature": "MEUCIQDWlfdijJGiKFCsvev5eQptsp2ClJnXVP6yYYV9kxwBrAIgRZjPQRhXe97EV3o4VZJrt7QCejFKnpEgJbB1SHUYPvg="
                                        },
                                        {
                                            "endorser": "CgdPcmcyTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRSVRaYUN1VVQvSkhZTjgwK0w4Z2p0REFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPVEV4TWpjd09ERTBNREJhRncweU9URXhNalF3T0RFME1EQmEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1DNXZjbWN5CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVXM1dFOCthR2RkYWwKVW9wUy9mRm5nSERYdG5LRUplRUQxYlI4ZWZQNE1kdkQrMi9NVjRFTDRpb1FIV1AyTjZXTTk0aDNoaWVCOE41LwpBblY1eVFOenA2Tk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FnSmFKak12Zi9hdXVoM3FRUUxQUUt1T3VQRjRFaHZYTUJicC9GWEg4U0xURXdDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU0wVWg3VVgwbitlZTRBdGJhV204cnZlb29sM2pXaTlMSTdaVGZPN3d5QnNBaUJ5c1VQNwp4QklhaEhSMjV2alNUOWVkamxXbmVBV1lZQk9Vbm1OWWZrS21HZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
                                            "signature": "MEUCIQCWAcc9SCtgY+dBx/bE26zkvFmC7zRpr1fOv7mWj4fuwAIgOZzea7Oukxsi87D1nSe+jT2lMBg7Av/XeC1VRP91AjI="
                                        }
                                    ],
                                    "proposal_response_payload": {
                                        "extension": {
                                            "chaincode_id": {
                                                "name": "fabcar",
                                                "path": "",
                                                "version": "1.0"
                                            },
                                            "events": null,
                                            "response": {
                                                "message": "",
                                                "payload": null,
                                                "status": 200
                                            },
                                            "results": {
                                                "data_model": "KV",
                                                "ns_rwset": [
                                                    {
                                                        "collection_hashed_rwset": [],
                                                        "namespace": "fabcar",
                                                        "rwset": {
                                                            "metadata_writes": [],
                                                            "range_queries_info": [],
                                                            "reads": [],
                                                            "writes": [
                                                                {
                                                                    "is_delete": false,
                                                                    "key": "CAR12",
                                                                    "value": "eyJtYWtlIjoiSG9uZGEiLCJtb2RlbCI6IkFjY29yZCIsImNvbG91ciI6ImJsYWNrIiwib3duZXIiOiJUb20ifQ=="
                                                                }
                                                            ]
                                                        }
                                                    },
hyperledger-fabric extract block hyperledger
1个回答
0
投票

通常,在Hyperledger Fabric中类似的东西都是Base64编码的。

“ id_bytes”字段是提议该块的对等方(此处为org2的对等方,因为mspid为org2MSP)的Admin证书的Base64编码版本。如果将其粘贴到Base64解码器(例如此https://www.base64decode.org/)中,则应该看到与在artifacts / crypto-config / peerOrganizations / org2.example.com / peers / peer0.org2下可以找到的证书相同的证书。 .example.com / msp / admincerts。

“ endorser”字段是经过Base64编码后的认可对等方(即对该块进行签名的对等方)的签名证书。在这里,您有两个代言人。您可以在artifacts / crypto-config / peerOrganizations / org0.example.com / peers / peer0.org0.example.com / msp / signcerts下找到签名证书。

“值”部分只是用于交易的参数,再次使用Base64编码(例如,此处的参数为{“ make”:“ Honda”,“ model”:“ Accord”,“ colour”:“ black“,” owner“:” Tom“},如解码后所见)。


0
投票

Senthil的一篇有关块结构的好文章,可能会对您有所帮助

enter image description here

http://www.bchainledger.com/2017/04/hyperledger-fabric-v10-block-structure.html

© www.soinside.com 2019 - 2024. All rights reserved.