hyperledger-fabric - Hyperledger Fabric Go SDK:如何解析块
问题描述
我正在使用 Hyperledger Golang SDK 来实现客户端以使用分类帐。我的应用程序依赖于发送的事件,但是,我想使用 BlockEvents 以便我可以确保给定的数据已经写入分类帐而不是链码事件。不幸的是,关于这类事件的文档非常有限。我注册了 BlockEvents,并使用它们每个引用的结构func (c *Client) RegisterBlockEvent()...
获取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:"-"`
}
但是,此时我迷路了,只有一个原始字节数组作为数据。我想针对特定的资产创建事件,并且需要解析块数据以搜索数据。该数据使用什么结构或结构?我假设每个数组条目都代表一个事务,但是如果没有映射到它的结构,解析非常困难。
解决方案
用 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)
}
}
推荐阅读
- server - 如何将本地端口绑定到 HTTPS?
- oracle - ORACLE MD5 函数的不同输出与相同输入
- python - 使用 Python 从 PDF 文件中提取标题、副标题和段落
- php - 有没有更短的方法来防止通过未设置的数组“循环”?
- pandas - 绘制具有 3 个特征的箱线图
- reactjs - 如何在 React 中使用 axios 解决获取请求?
- amazon-s3 - 在基于非日期分区的动态帧中检索数据
- laravel - Laravel:向客户端发送数据透视数据
- amazon-dynamodb - 如何获取扫描 dynamodb 表返回的项目的大小?
- c# - 在保持 UI 响应的同时将许多项目添加到 ListBox