超级账本Fabric Go SDK:如何解析区块

3

我正在使用Hyperledger Golang SDK实现一个客户端以与账本交互。我的应用程序依赖于发送事件,但我想使用BlockEvents以确保给定的数据已经写入账本,而不是链码事件。不幸的是,关于这些类型事件的文档非常有限。我使用func (c *Client) RegisterBlockEvent()... 注册了BlockEvents,每个BlockEvent响应都包含一个引用了Block结构体的Block结构。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个回答

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)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接