2017-09-18 9 views
1

hyperledger SDKのドキュメントに基づいて、nodeJS SDKを使用してブロックとトランザクション情報を照会することができます。このSDKを使用して、最新のワールド状態をクエリできますか?たとえば、指定されたキーの値をクエリしますか?Hyperledger 1.0 Nodejs SDK

+0

https://stackoverflow.com/a/46255691/6160507 –

答えて

2

あなたのチェーンコードはこの機能を提供する必要があります。つまり、このロジックを実装してチェーンコードに組み込む必要があります。次に、興味のあるキーの値を取得するためにチェーンコードを実行するだけです。あなたが必要とするすべての資産IDでchaincode渡して関数名getAssetを起動することであり、その資産の最新の状態を取得します

package main 

import (
    "fmt" 

    "github.com/hyperledger/fabric/core/chaincode/shim" 
    "github.com/hyperledger/fabric/protos/peer" 
) 

// Person 
type Asset struct { 
    ID string `json:"id"` 
    Name string `json:"name"` 
    Price string `json:"price"` 
} 

// assetManagement the chaincode interface implementation to manage 
// the ledger of person records 
type assetManagement struct { 
} 

func (p *assetManagement) Init(stub shim.ChaincodeStubInterface) peer.Response { 
    return shim.Success(nil) 
} 

func (p *assetManagement) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 
    actionName, params := stub.GetFunctionAndParameters() 

    if actionName == "addAsset" { 
     return p.addAsset(stub) 
    } else if actionName == "getAsset" { 
     return p.getAsset(stub) 
    } 

    return shim.Error("Unknown function name") 
} 
func (p *assetManagement) getAsset(stub shim.ChaincodeStubInterface) peer.Response { 
    _, params := stub.GetFunctionAndParameters() 

    assetID := params[0] 
    state, err := stub.GetState(assetID) 
    if err != nil { 
     return shim.Error(fmt.Sprintf("%s", err)) 
    } 

    return shim.Success(state) 
} 

func (p *assetManagement) addAsset(stub shim.ChaincodeStubInterface) peer.Response { 
    // TODO add loggic adding new asset 
} 

func main() { 
    err := shim.Start(new(assetManagement)) 
    if err != nil { 
     fmt.Printf("Error starting Simple chaincode: %s", err) 
    } 
} 

次へ:

たとえば、あなたは、これに似た何かを行うことができます。 Go SDKに基づくコードは次のとおりです。

// Skipped initialization. 

txRequest := apitxn.ChaincodeInvokeRequest{ 
    Targets:  []apitxn.ProposalProcessor{p}, 
    Fcn:   "getAsset", 
    Args:   []string{"42"}, 
    TransientMap: map[string][]byte{}, 
    ChaincodeID: "assetChaincode", 
} 

proposalResponse, _, err := ch.SendTransactionProposal(txRequest) 
if err != nil { 
    fmt.Println(err) 
    return 
} 

fmt.Printf("%v\n", proposalResponse[0].ProposalResponse) 

tx, err := ch.CreateTransaction(proposalResponse) 
if err != nil { 
    fmt.Println(err) 
    return 
} 

txResponse, err := ch.SendTransaction(tx) 
if err != nil { 
    fmt.Println(err) 
    return 
} 

fmt.Println(txResponse[0]) 
関連する問題