2016-07-23 8 views
0

chaincode initの間に、["a"、 "100"、 "b"、 "200" ]Chaincode shim:値のより多くの値または非整数を許可する

しかし、私は以下のようなキーと値のペアを配備したいと思います: 100、v1、v2はaの値です。 2つのノート: 1.値は整数ではありません 2.値はコンマで区切られます。 "、"

これは可能ですか?

私はchaincodeシムチェック:/home/standards/go/src/github.com/hyperledger/fabric/core/chaincode/shim/chaincode.goを

機能:

// PutState writes the specified `value` and `key` into the ledger. 
func (stub *ChaincodeStub) PutState(key string, value []byte) error { 
    return handler.handlePutState(key, value, stub.UUID) 

handlePutState(key、value、stub.UUID)を呼び出します。どのようにそれを変更する上の任意のライトは、それが望ましいように動作するのですか?ありがとう、

答えて

1

チェーンコードでは、各状態に関連付けられた値は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 
} 
を述べひとつですので、
関連する問題