http://www.7klian.com

Hyperledger Fabric中的Protobuf是什么?


所有记录都作为世界状态记录存储在CouchDB中。工具以JSON数据名目存储为键值对。CouchDB可以更快地从数据库查询JSON荟萃。在区块链状态下,所有这些记录都存储在字节中,而且是不行变的。



首先,我们需要遵循一些安装进程来利用protobuf编译器。

func (m *Financial) XXX_DiscardUnknown() {
金融SmartContract

}
您可以看到protobuf文件已生成为financial.pb.go。此文件是与proto包的兼容性数据模子,它将用于将proto动静名目转换为字节。


0xc5, 0x99, 0x98, 0x9c, 0xec, 0x57, 0x9a, 0x9b, 0x94, 0x5a, 0x24, 0xc1, 0x0c, 0x96, 0x44, 0x08,
if err != nil {
fmt.Println("IFSCCode : "+financial.GetIfscCode())
0xcc, 0xb4, 0xe2, 0x64, 0xe7, 0xfc, 0x94, 0x54, 0x09, 0x26, 0x88, 0x1c, 0x8c, 0x2f, 0x24, 0xc3,
}

Age string `json:"age"`
}


return ""
syntax="proto3";
type Financial struct {

Age string `json:"age"`
return m.AccNumber

// A compilation error at this line likely means your copy of the
例子
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

func (*Financial) ProtoMessage() {}
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4f, 0xcb, 0xcc, 0x4b,


string ifscCode = 2;


}
financialByteData, err := proto.Marshal(financialData)
Email: "james@example.com",
正如我们所看到的,有两个SmartContract将信息存储到同一个用户的分类帐中,这意味着用户存储根基的信息,金融存储用户的银行具体信息。


return fileDescriptor_a283ebe7677acfbc, []int{0}

0x44, 0x01, 0xf8, 0x14, 0xa5, 0x00, 0x00, 0x00,
为了办理这个问题,Protobuf提供了一个更快、更机动的办理方案。我们只需要编写一个.proto文件来描写数据布局,在本例中,就是我们要存储的金融数据布局。


2. GetState——它从分类帐状态中检索差异键的工具。
)
financialdata, err := proto.Marshal(financial)
indexName := "id"

userDataJSONasBytes, err := json.Marshal(userdata)
Protobuf是如何运作的?


因此,protobuf动静名目标字节功效直接挪用用户SmartContract并完全删除金融SmartContract。
CreatedDate string `json:"createdDate"`
func (m *Financial) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
}
}
编译原型文件,生成用于金融动静名目标protobuf数据模子文件。
type User struct {

譬喻:假如需要将一些用户记录存储到分类帐中,,那么我们需要一个SmartContract来界说所有需要的数据字段

用户SmartContract

AccNumber: "8765",
此刻,安装protobuf编译器
// proto package needs to be updated.

func (m *Financial) GetIfscCode() string {

$ sudo apt install protobuf-compiler


在本文中,我将表明在Hyperledger Fabric中利用Protobuf序列化布局化数据时利用的技能。Protobuf简化了数据处理惩罚和名目化。它利用非凡生成的源代码来结构数据,以便在沟通的SmartContract中轻松地读写数据。

userdata := &User {
var _ = proto.Marshal
ID string `json:"id"`
安装
0xcc, 0x53, 0x6a, 0x66, 0xe4, 0xe2, 0x74, 0x83, 0xc9, 0x08, 0x49, 0x71, 0x71, 0x24, 0x25, 0xe6,
首先,我们需要缔造一个金融原型文件。它由金融范例的动静名目构成,包括四个字段:银行名称、ifsc代码、帐号、建设日期。
}

log.Fatal("unmarshaling error: ", err)
CreatedDate string `protobuf:"bytes,4,opt,name=createdDate,proto3" json:"createdDate,omitempty"`

ID string `json:"id"`
string bankName = 1;
Mobile string `json:"mobile"`
if m != nil {
proto "github.com/golang/protobuf/proto"


// 136 bytes of a gzipped FileDescriptorProto

return shim.Error(err.Error())

package main

可是,假如我们从查询目标的角度来研究SmartContract,就会发明两个数据收集之间没有接洽。我们不能为用户和金融数据模子界说沟通的ID作为密钥,因为分类帐数据存储在键-值对中,对付沟通的密钥,信息将被包围。

Mobile: "8765432",
}

)
XXX_NoUnkeyedLiteral struct{} `json:"-"`
IFSCCode: "1234",
0xcc, 0x4b, 0xce, 0x4c, 0xcc, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0xc9, 0x4d, 0xcc,
Hyperledger fabric还利用了一种名为SmartContract的数据名目技能,该技能是为链码中特定的一组数据模子界说的。Chaincode可以有多组SmartContract作为生意业务逻辑来节制差异的数据模子。简朴来说,SmartContract打点详细,而Chaincode打点如何打包SmartContract举办陈设。

return xxx_messageInfo_Financial.Marshal(b, m, deterministic)
func (m *Financial) GetAccNumber() string {


return xxx_messageInfo_Financial.Unmarshal(m, b)

结论
string accNumber = 3;
var _ = math.Inf
fmt.Println("CreatedDate : "+financial.GetCreatedDate())
return ""


协议缓冲区(简称protobuf)是谷歌利用语言无关、平台无关、可扩展的机制序列化布局化数据的机制。与传统的数据名目(如XML或JSON)对比,序列化的布局化数据以字节、更小、更快、更简朴的方法举办编译。

SmartContract主要执行世界状态下的Put、Get、Delete和GetHistory。

因此,这两个SmartContract将被陈设到Chaincode中。并将处理惩罚的生意业务逻辑为两个分类帐状态-世界状态,区块链。



financial.pb.go

2. https://developers.google.com/protocol-buffers/doc...

Email string `json:"email"`
// Code generated by protoc-gen-go. DO NOT EDIT.

XXX_unrecognized []byte `json:"-"`




}
func (m *Financial) Reset() { *m = Financial{} }

log.Fatal("marshaling error: ", err)


if err != nil {

Protobuf简化了数据处理惩罚和名目化。它利用非凡生成的源代码来结构数据,以便在沟通的SmartContract中轻松地读写数据。
此刻,我们将 在 User smartcontract中建设一个特另外数据字段financial

财政信息名目参考
}
在Hyperledger布局中,Chaincode是一个特定的措施,它处理惩罚由区块链网络

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。