4

RSK トランザクションのトランザクション ハッシュがある場合、その内部トランザクションを取得するにはどうすればよいですか?つまり、スマート コントラクトが他のコントラクトの関数を呼び出すとき、または RBTC 転送を行うとき? web3.js を使用してメイン トランザクションを取得できますが、これを取得すると、それを解析して発生する内部トランザクションを抽出することができません。私が試したもう1つのことは、web3.jsを使用してトランザクションが発生したブロックを照会することでしたが、これを解析して内部トランザクションを取得することもできませんでした.

4

1 に答える 1

3

私の元のコメントを繰り返すには:

RSK 仮想マシン (EVM など) は「内部トランザクション」を定義しないため、クエリを実行する RPC はありません。これらの内部構造を再構築するには、トランザクションの実行を「デバッグ」する必要がありますが、これは非常に困難です。通常、ブロック エクスプローラーがこれを行います。

幸いなことに、RSK Block Explorer は API を公開しているため、プログラムでクエリ可能です。したがって、質問で要求したように、これにweb3.jsを使用することはできませんが、それでも内部トランザクションを取得できます。

0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8たまたま多くの内部トランザクションがある次のトランザクションの例を使用してみましょう。

curl \
  -X GET \
  -H  "accept: application/json" \
  "https://backend.explorer.rsk.co/api?module=internalTransactions&action=getInternalTransactionsByTxHash&hash=0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8"

上記のコマンドは、この特定のトランザクションの内部トランザクションを取得します。別のトランザクションでこれを行う場合はhash、リクエスト URL のクエリ パラメータの値を変更するだけです。

これにより、かなり大きな JSON 応答が得られますが、ここでは完全にはコピーしません。次に、JS コードを使用してこれを解析できます (既に web3.js を使用しているため)。

jqコマンド ラインでは、コマンド ライン ユーティリティで利用可能な応答フィルターを使用して、データをさらに調べることができます。

curl \
  -X GET \
  -H  "accept: application/json" \
  "https://backend.explorer.rsk.co/api?module=internalTransactions&action=getInternalTransactionsByTxHash&hash=0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8" \
  | jq -c '.data[].action.callType'

上記は、curlコマンドの出力をパイプして、次jqのフィルターを適用します。

  • プロパティを見てdata、配列内のすべての項目を返します
  • 各アイテム内でオブジェクトにドリルダウンし、その値actionを返しますcallType

これにより、次の出力が得られます。

"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"staticcall"
"delegatecall"
"call"

delegatecallしたがって、このトランザクションには、staticcall、および...が混在する 18 の内部トランザクションが含まれておりcall、かなり複雑なトランザクションです。

ここjqで、別のフィルターを使用するコマンドを実行して、最終的な内部トランザクション (たまたま唯一のcall内部トランザクション) の完全な詳細のみを取得できるようにします。

curl \
  -X GET \
  -H  "accept: application/json" \
  "https://backend.explorer.rsk.co/api?module=internalTransactions&action=getInternalTransactionsByTxHash&hash=0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8" \
  | jq -c '.data[17].action'

前のコマンドとの唯一の違いは、フィルタが.data[17].action. これにより、次の出力が得られます。

{
  "callType": "call",
  "from": "0x3f7ec3a190661db67c4907c839d8f1b0c18f2fc4",
  "to": "0xa288319ecb63301e21963e21ef3ca8fb720d2672",
  "gas": "0x20529",
  "input": "0xcbf83a040000000000000000000000000000000000000000000000000000000000000003425443555344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f36650548d5c400000000000000000000000000003f7ec3a190661db67c4907c839d8f1b0c18f2fc4000000000000000000000000000000000000000000000000000000000036430c000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b0000000000000000000000000000000000000000000000000000000000000005d6328b4db96469d968348a852e6978d18b7dc9bda776727991b83f171abe4a4040ebab67dee8e9711683af91e05c3970bcb6a29502f9b35b14b7a9225d43f6e3e0cf4ae577be626ae350d8e103df88f55205167eaad7267fdbf247e4b35ec674457ac87e13451d2fa9985c854b2f84982e3b611c3b48f5045f2cdc3c6acff44d1735d2771581dc2cc7477fc846767ad088182fc317424d468477cf3a54724543000000000000000000000000000000000000000000000000000000000000000516a3d4cf7e73d17e2230c87f6ef48f38d82885c64d47fef646987f8d6fbb86405515760c786315cac84d7df048e2ba054868f2b9e2afeec0b63ebf2dcac59c8848f254382abf73cf6ce2d5134b5bc065c0706fb7a2f7886a15e79a8953ed11006c5a7d14b4fbf1bb6ff8d687a82a548dcdbd823ebec4b10e331bee332df1a7ae0e45fdac4f6648e093b90a6b56f33e31f36d4079526f871f51cafa710cdde4c3",
  "value": "0x0"
}
于 2021-07-29T10:10:32.407 に答える