在chaincode中,每個狀態只能有一個與之關聯的值。但是,通過將該「一個值」作爲列表可以模擬多個值。所以你可以做這樣的事情
stub.PutState("a",[]byte("100,v1,v2"))
「a」的狀態現在是一個逗號分隔的列表。當你想檢索這些值,請執行下列操作:
Avals, err := stub.GetState("a")
AvalsString := string(Avals)
fmt.Println(AvalsString)
應打印以下字符串
100,V1,V2
如果您有需要的個人參數,只需在逗號分割字符串,並轉換爲適當的類型。 Bam,你現在可以存儲和檢索元素。或者,如果你的數據結構比這個更復雜,那麼把你的數據放入一個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
}
的一個