1
hyperledger SDKのドキュメントに基づいて、nodeJS SDKを使用してブロックとトランザクション情報を照会することができます。このSDKを使用して、最新のワールド状態をクエリできますか?たとえば、指定されたキーの値をクエリしますか?Hyperledger 1.0 Nodejs SDK
hyperledger SDKのドキュメントに基づいて、nodeJS SDKを使用してブロックとトランザクション情報を照会することができます。このSDKを使用して、最新のワールド状態をクエリできますか?たとえば、指定されたキーの値をクエリしますか?Hyperledger 1.0 Nodejs SDK
あなたのチェーンコードはこの機能を提供する必要があります。つまり、このロジックを実装してチェーンコードに組み込む必要があります。次に、興味のあるキーの値を取得するためにチェーンコードを実行するだけです。あなたが必要とするすべての資産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])
https://stackoverflow.com/a/46255691/6160507 –