如果我有RSK事务的事务哈希,我如何获取其内部事务——即当智能合约调用其他合约上的函数或进行RBTC传输时?我可以使用web3.js获得主事务,但是一旦获得了它,我无法解析它来提取发生的内部事务。我尝试过的另一件事是使用web3.js查询事务发生的块,但也无法解析它来获取内部事务。
重申我最初的评论:
RSK虚拟机(类似于EVM)不定义";内部交易";,因此没有RPC来查询它们。您需要";调试";事务执行以重建这些内部结构-这很难做到。块探索者通常会为您完成这项工作。
幸运的是RSK块资源管理器公开API,因此可以通过编程进行查询。因此,虽然您将无法使用web3.js进行此操作,正如你在问题中所要求的,尽管如此,您还是可以获得内部交易。
让我们举一个例子,使用下面的事务0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8
,它恰好有很多内部事务。
curl
-X GET
-H "accept: application/json"
"https://backend.explorer.rsk.co/api?module=internalTransactions&action=getInternalTransactionsByTxHash&hash=0x01fbd670ea2455d38e83316129765376a693852eca296b3469f18d2a8dde35d8"
上面的命令检索该特定事务的内部事务。如果您希望为不同的事务执行此操作,只需更改请求URL中CCD_ 2查询参数的值。
这为您提供了相当大的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"
因此,该事务包含18个内部事务,用delegatecall
、staticcall
和call
的混合物。。。确实是一笔相当复杂的交易!
现在让我们使用CCD_ 12命令来使用不同的过滤器,以便我们只获得最终内部交易的全部细节,这恰好是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'
请注意,与上一个命令的唯一区别是,现在过滤器为CCD_ 14。这将产生以下输出:
{
"callType": "call",
"from": "0x3f7ec3a190661db67c4907c839d8f1b0c18f2fc4",
"to": "0xa288319ecb63301e21963e21ef3ca8fb720d2672",
"gas": "0x20529",
"input": "0xcbf83a040000000000000000000000000000000000000000000000000000000000000003425443555344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086f36650548d5c400000000000000000000000000003f7ec3a190661db67c4907c839d8f1b0c18f2fc4000000000000000000000000000000000000000000000000000000000036430c000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b0000000000000000000000000000000000000000000000000000000000000005d6328b4db96469d968348a852e6978d18b7dc9bda776727991b83f171abe4a4040ebab67dee8e9711683af91e05c3970bcb6a29502f9b35b14b7a9225d43f6e3e0cf4ae577be626ae350d8e103df88f55205167eaad7267fdbf247e4b35ec674457ac87e13451d2fa9985c854b2f84982e3b611c3b48f5045f2cdc3c6acff44d1735d2771581dc2cc7477fc846767ad088182fc317424d468477cf3a54724543000000000000000000000000000000000000000000000000000000000000000516a3d4cf7e73d17e2230c87f6ef48f38d82885c64d47fef646987f8d6fbb86405515760c786315cac84d7df048e2ba054868f2b9e2afeec0b63ebf2dcac59c8848f254382abf73cf6ce2d5134b5bc065c0706fb7a2f7886a15e79a8953ed11006c5a7d14b4fbf1bb6ff8d687a82a548dcdbd823ebec4b10e331bee332df1a7ae0e45fdac4f6648e093b90a6b56f33e31f36d4079526f871f51cafa710cdde4c3",
"value": "0x0"
}