如何将结构写入分类帐状态
How to write struct onto ledger state
我正在尝试为具有映射的 Hyperledger 编写链代码,它存储映射到字符串的结构值。这是我第一次为 Hyperledger 编写合约,也是我第一次使用 go,看来我没有以正确的方式处理这个问题。
这是显示问题的我的映射、数据结构、Init 函数和 addVData 函数。
type Data struct{
Timestamp string
Velocity string
Location string
}
var all_data map[string]Data
func (t *DataContract) Init(stub shim.ChaincodeStubInterface) peer.Response {
all_data = make(map[string]Data)
return shim.Success(nil)
}
func (t *DataContract) addVData(stub shim.ChaincodeStubInterface, args []string) peer.Response {
params := stub.GetStringArgs()
fmt.Println("The params passed in are:", params)
if len(params) != 4 {
fmt.Println("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
return shim.Error("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
}
var d = Data{Timestamp:params[1], Velocity:params[2], Location:params[3]}
all_data[params[1]] = d
var err = stub.PutState(params[1],d)
return shim.Success(nil)
}
我得到的错误其实很清楚:
./data.go:79:35: cannot use d (type Data) as type []byte in argument to stub.PutState
我想知道,由于我的数据不是字节数组形式,我该如何存储它?
另外,我不确定我是否以正确的方式实现了 Init 方法和映射,但很难找到示例。如果您能解释并指出正确的方向,我们将不胜感激,谢谢。
使用json.Marshal
函数将struct
转换为bytes
type UserData struct {
a string
}
userdata := &UserData{a: "hello"}
// Mashelling struct to jsonByte object to put it into the ledger
userDataJSONBytes, err := json.Marshal(&userdata)
if err != nil {
return shim.Error(err.Error())
}
var err = stub.PutState(params[1],userDataJSONBytes)
我正在尝试为具有映射的 Hyperledger 编写链代码,它存储映射到字符串的结构值。这是我第一次为 Hyperledger 编写合约,也是我第一次使用 go,看来我没有以正确的方式处理这个问题。
这是显示问题的我的映射、数据结构、Init 函数和 addVData 函数。
type Data struct{
Timestamp string
Velocity string
Location string
}
var all_data map[string]Data
func (t *DataContract) Init(stub shim.ChaincodeStubInterface) peer.Response {
all_data = make(map[string]Data)
return shim.Success(nil)
}
func (t *DataContract) addVData(stub shim.ChaincodeStubInterface, args []string) peer.Response {
params := stub.GetStringArgs()
fmt.Println("The params passed in are:", params)
if len(params) != 4 {
fmt.Println("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
return shim.Error("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
}
var d = Data{Timestamp:params[1], Velocity:params[2], Location:params[3]}
all_data[params[1]] = d
var err = stub.PutState(params[1],d)
return shim.Success(nil)
}
我得到的错误其实很清楚:
./data.go:79:35: cannot use d (type Data) as type []byte in argument to stub.PutState
我想知道,由于我的数据不是字节数组形式,我该如何存储它? 另外,我不确定我是否以正确的方式实现了 Init 方法和映射,但很难找到示例。如果您能解释并指出正确的方向,我们将不胜感激,谢谢。
使用json.Marshal
函数将struct
转换为bytes
type UserData struct {
a string
}
userdata := &UserData{a: "hello"}
// Mashelling struct to jsonByte object to put it into the ledger
userDataJSONBytes, err := json.Marshal(&userdata)
if err != nil {
return shim.Error(err.Error())
}
var err = stub.PutState(params[1],userDataJSONBytes)