Fabric操作用例

如何利用configtxlator工具查看ledger bloc

2018-07-30  本文已影响95人  CodingCode

如何利用configtxlator工具查看ledger block的内容。

第一步:从orderer获取block

输入条件时blockid。

$ cat get.sh
#!/bin/bash

# The block to get
export BLOCKID=$1

export FABRIC_CFG_PATH=$(pwd)
export CORE_PEER_LOCALMSPID=Org1MSP
export CORE_PEER_MSPCONFIGPATH=${FABRIC_CFG_PATH}/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

export CHANNEL=mychannel

peer \
    channel fetch ${BLOCKID} ${CHANNEL}block${BLOCKID}.pb \
    -o orderer.example.com:7050 \
    -c ${CHANNEL} \
    --tls \
    --cafile ${FABRIC_CFG_PATH}/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.ordererorg.example.co
m-cert.pem

如果orderer不是TLS enabled,那么可以把--tls和--cafile参数去掉。

这一步生成本地文件${CHANNEL}block${BLOCKID}.pb,这是一个二进制文件。

第二步,把上面的pb文件转换成json可读文件。

利用configtxlator 工具

$ configtxlator proto_decode --input ${CHANNEL}block${BLOCKID}.pb --type common.Block --output ${CHANNEL}block${BLOCKID}.json

第三步,查看json的内容

例如,查看proposal内容:

$ jq ".data.data[0].payload.data.actions[0].payload.chaincode_proposal_payload" mychannelblock3.json                                  {
  "input": {
    "chaincode_spec": {
      "chaincode_id": {
        "name": "mychaincode",
        "path": "",
        "version": ""
      },
      "input": {
        "args": [
          "aW52b2tl",
          "Yg==",
          "YQ==",
          "MQ=="
        ]
      },
      "timeout": 0,
      "type": "GOLANG"
    },
    "id_generation_alg": ""
  }
}

我们可以看到调用的chaincode的名字(mychaincode),以及调用的输入参数(input.args)。
再看具体input.args的值:

$ echo "aW52b2tl" | base64 -d
invoke
$ echo "Yg==" | base64 -d        
b
$ echo "YQ==" | base64 -d    
a
$ echo "MQ==" | base64 -d    
1

正好是从b转账1块钱到a的请求。

再看proposal response的值。

$ jq ".data.data[0].payload.data.actions[0].payload.action.proposal_response_payload" mychannelblock3.json 
{
  "extension": {
    "chaincode_id": {
      "name": "mychaincode",
      "path": "",
      "version": "1.0"
    },
    "response": {
      "message": "",
      "status": 200
    },
    "results": "EhsKBGxzY2MSEwoRCgtteWNoYWluY29kZRICCAESNwoLbXljaGFpbmNvZGUSKAoHCgFhEgIIAgoHCgFiEgIIAhoJCgFhGgQxMDAyGgkKAWIaBDE5OTg="
  },
  "proposal_hash": "roxMAR4hqXMnIjUZx0w8Uo3TuOrDeSGDTvVCYHu9YZU="
}

解析results的值:

$ echo "EhsKBGxzY2MSEwoRCgtteWNoYWluY29kZRICCAESNwoLbXljaGFpbmNvZGUSKAoHCgFhEgIIAgoHCgFiEgIIAhoJCgFhGgQxMDAyGgkKAWIaBDE5OTg=" | base6 -d
�
lscc��
�

mychaincode���7

mychaincode�(

�a��

�b���
�a��1002�
�b��1998 

这是一个二进制数据,不能完全解析,但是部分可见的字符我们可以猜测他的含义:包含一个readset和writeset,其中writeset里面包含b要写入的值是1002,a要写入的值是1998,是不是?

上一篇下一篇

猜你喜欢

热点阅读