チェーンコードでは、各状態に関連付けられた値は1つのみです。しかし、その "1つの値"をリストにすることで、複数の値をシミュレートすることができます。あなたはこのようなことをすることができます
stub.PutState("a",[]byte("100,v1,v2"))
"a"の状態はカンマ区切りのリストになりました。あなたはこれらの値を取得したい場合は、次の操作を行います。あなたはそこから個々の引数が必要な場合は
Avals, err := stub.GetState("a")
AvalsString := string(Avals)
fmt.Println(AvalsString)
次の文字列
100、V1、V2
を印刷すべきカンマで文字列を分割し、適切な型に変換するだけです。バム、あなたは今、要素を保存して取り出すことができます。
また、データ構造がそれより複雑な場合は、データをjsonオブジェクトに入れる価値があるかもしれません。その後、整列化と非整列化を使用して、[]byte
(状態に直接格納できる)とオブジェクト(これはおそらく使いやすくなります)から前後に変換できます。 JSONと
例は、initメソッドを使用して、それはあなたが
type SomeStruct struct {
AVal string `json:"Aval"`
BVal []string `json:"Bval"`
}
func (t *MyChaincode) Init(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
//recieve args ["someStringA","BVal1","Bval2","Bval3"]
//constructing and storing json object
myStruct := SomeStruct{
AVal: args[0],
BVal: []string{args[1],args[2],args[3]},
}
myStructBytes, err := json.Marshal(myStruct)
_ = err //ignore errors for example
stub.PutState("myStructKey",myStructBytes)
//get state back to object
var retrievedStruct SomeStruct
retrievedBytes, err := stub.GetState("myStructKey")
json.Unmarshal(retrievedBytes,retrievedStruct)
//congratulations, retrievedStruct now contains the data you stored earlier
return nil,nil
}
を述べひとつですので、