0

JSONオブジェクトをコードに渡すWeb APIを介してアクセスされるハイパーレジャーチェーンコードを設計しようとしています。ただし、invoke メソッドを実行するたびに、json 応答で実際にユーザーに値を返すことはできません。

たとえば、サンプル コードを次に示します。

func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
    //Do some stuff
    return []byte("Some string"), nil
}

エラーを返すためのサンプルコード

func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
    //Try to do some stuff
    //Get some sort of error
    return nil, errors.New("someError")
}

ただし、これらはどちらも次のようなメッセージを返します。メッセージは常に以下のようなランダムな文字列です (ある種のハッシュが疑われます)。

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "1e1123e3-b484-4120-a28e-c3a8db384557"
  },
  "id": 11
}

ご覧のとおり、この応答には、返された応答 (最初のケース) も、返されたエラー (2 番目のケース) も含まれていません。返されたバイト、または返されたエラーを返されたjsonに取得するにはどうすればよいですか?

編集: 別のチェーンコードから呼び出しメソッドを呼び出すと、正しい戻り値が返されることに注意してください。正しく機能しないのは、ユーザーに返されたときだけです。

4

2 に答える 2

2

「呼び出し」は同期呼び出しではありません。ピアは、Web 要求を受信するとすぐにこの OK メッセージを生成します。その後、検証ピアが新しいブロックを生成しようとすると、この「invoke」メソッドがキャッシュされた他のトランザクションと一緒に実行されます。

次に、チェーンコードからチェーンコードへの呼び出しは同期的であり、同時に実行されます。

回避策として、別の Query リクエストを使用して、この送信された Invoke のステータスを確認します。誰かがより良い解決策を提案できれば幸いです。

于 2016-07-20T18:09:42.910 に答える