Hyperledger Fabric Go SDK:如何解析块

时间:2019-05-29 15:20:05

标签: hyperledger-fabric hyperledger chaincode

我正在使用Hyperledger Golang SDK来实现与分类帐一起使用的客户端。我的应用程序依赖于发送的事件,但是,我想使用BlockEvents,以便可以确保已将给定数据而不是chaincode事件写入到分类帐中。不幸的是,有关此类事件的文档非常有限。我使用func (c *Client) RegisterBlockEvent()...注册了BlockEvent,并在每个事件中引用了一个BlockEvent结构的Block响应。块结构如下所示:

type Block struct {
    Header               *BlockHeader   `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
    Data                 *BlockData     `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
    Metadata             *BlockMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
    XXX_NoUnkeyedLiteral struct{}       `json:"-"`
    XXX_unrecognized     []byte         `json:"-"`
    XXX_sizecache        int32          `json:"-"`
}

我可以导航到BlockData

type BlockData struct {
    Data                 [][]byte `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}

但是,在这一点上,我迷路了,只有字节数组的原始数组作为数据。我想处理特定的资产创建事件,并且需要解析块数据以搜索数据。此数据使用什么结构或结构?我假设每个数组项都代表一个事务,但是如果没有映射到它的结构,则解析非常困难。

1 个答案:

答案 0 :(得分:1)

使用protolator编写函数ParseBlock

// import "github.com/hyperledger/fabric-sdk-go/pkg/util/protolator"


func ParseBlock(block *common.Block)  {
    if err := protolator.DeepMarshalJSON(os.Stdout, block); err != nil {
        log.Fatalln("DeepMarshalJSON err:", err)
    }
}