11

Hyperledger (ファブリック実装) でトランザクションを実行できます。ユーザーのキーを渡すことによってユーザーが開始したすべてのトランザクションとそのペイロードの詳細を確認したいと考えています。

例えば:

A transfers 10 units to B
A transfers 5 units to C
D transfers 8 units to A

A のキーを渡すと、ファブリックは A のすべてのトランザクションを提供する必要があります。方法はありますか? または、どのファブリック API 関数呼び出しを使用すればよいですか?

4

5 に答える 5

5

/chain/blocks/{Block}エンドポイントは、指定されたブロック内のトランザクションの順序付きリストを運びます。

エンドポイントを使用/chainしてチェーンの高さ (ブロック数) を取得し、/chain/blocks/{Block}REST エンドポイントを使用して各ブロックからトランザクションを取得します。

于 2016-11-09T09:09:44.417 に答える
3

チェーンコードで適切なインデックス作成とクエリ関数を開発できます。

つまり、トランザクションごとに、ユーザーをキーとして内部キー/値ストア (stub.PutState) に詳細を保存し、クエリ (stub.GetState) でユーザーに関連付けられたすべてのトランザクションを返します。

于 2016-11-07T23:10:10.377 に答える
1

composer-client を使用している場合は、単に Historian コマンドを使用できます。

 var historian = await businessNetworkConnection.getHistorian();
 historian.getAll().then(historianRecords => console.log(historianRecords));
于 2018-09-17T07:36:01.093 に答える
1

誰かが Java SDK と go チェーンコードの組み合わせを必要とする場合。どうぞ

ここで同様の質問に答えました

Java コード

public List<HistoryDao> getUFOHistory(String key) throws Exception {
    String[] args = { key };
    Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO, "UFO communication history - " + args[0]);

    Collection<ProposalResponse> responses1Query = ucc.getChannelClient().queryByChainCode("skynetchaincode", "getHistoryForUFO", args);
    String stringResponse = null;
    ArrayList<HistoryDao> newArrayList = new ArrayList<>();
    for (ProposalResponse pres : responses1Query) {
        stringResponse = new String(pres.getChaincodeActionResponsePayload());
        Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO, stringResponse);
        newArrayList = gson.fromJson(stringResponse, new TypeToken<ArrayList<HistoryDao>>() {
        }.getType());
    }
    if (null == stringResponse)
        stringResponse = "Not able to find any ufo communication history";
    return newArrayList;
}

chancode の実装は次のとおりです。

コードに行く

func (t *SmartContract) getHistoryForUFO(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {

    if len(args) < 1 {
            return shim.Error("Incorrect number of arguments. Expecting 1")
    }

    ufoId := args[0]
    resultsIterator, err := APIstub.GetHistoryForKey(ufoId)
    if err != nil {
            return shim.Error(err.Error())
    }
    defer resultsIterator.Close()

    var buffer bytes.Buffer
    buffer.WriteString("[")

    bArrayMemberAlreadyWritten := false
    for resultsIterator.HasNext() {
            response, err := resultsIterator.Next()
            if err != nil {
                    return shim.Error(err.Error())
            }
            // Add a comma before array members, suppress it for the first array member
            if bArrayMemberAlreadyWritten == true {
                    buffer.WriteString(",")
            }
            buffer.WriteString("{\"TxId\":")
            buffer.WriteString("\"")
            buffer.WriteString(response.TxId)
            buffer.WriteString("\"")

            buffer.WriteString(", \"Value\":")
            // if it was a delete operation on given key, then we need to set the
            //corresponding value null. Else, we will write the response.Value
            //as-is (as the Value itself a JSON)
            if response.IsDelete {
                    buffer.WriteString("null")
            } else {
                    buffer.WriteString(string(response.Value))
            }

            buffer.WriteString(", \"Timestamp\":")
            buffer.WriteString("\"")
            buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String())
            buffer.WriteString("\"")

            buffer.WriteString(", \"IsDelete\":")
            buffer.WriteString("\"")
            buffer.WriteString(strconv.FormatBool(response.IsDelete))
            buffer.WriteString("\"")

            buffer.WriteString("}")
            bArrayMemberAlreadyWritten = true
    }
    buffer.WriteString("]")

    fmt.Printf("- History returning:\n%s\n", buffer.String())
    return shim.Success(buffer.Bytes())

}

質問があれば教えてください。

于 2018-08-30T13:54:33.297 に答える