内部交易其实并不是一笔真实的交易, 而是合约之间的调用或转账,这些信息不能通过 web3 api 直接拿到, 像 etherscan 显示的内部交易,是他们使用修改过的 geth 客户端获得相信的信息,索引到数据库里。
现在 Geth 和 OpenEthereum 也提供了一些工具来获取交易内部的信息,比如 Geth 可以使用debug_traceTransaction:
var web3 = require('web3').web3;
web3.currentProvider.sendAsync({
method: "debug_traceTransaction",
params: ['0x3fac854179691e377fc1aa180b71a4033b6bb3bde2a7ef00bc8e78f849ad356e', {}],
jsonrpc: "2.0",
id: "2"
}, function (err, result) {
...
});
OpenEthereum 有 trace_replayTransaction
:
web3.currentProvider.sendAsync({
method: "trace_replayTransaction",
params: [desiredTransactionHash, ['trace']],
jsonrpc: "2.0",
id: "1"
}, function (err, out) {
console.log(out);
}