我想从区块链中获取某些地址(地址A)的所有收据记录。我使用web3.eth.getBlock和web3.eth.getTransaction来获取与A相关的所有事务。 但我发现如果通过在合同中调用'A.send'或'A.transfer'函数将ethers转移到地址A,我只能得到一个从调用者地址到合同地址的合同调用事务。而且我找不到此交易和地址A之间的关系。 有没有办法让合同为A调用交易? 感谢。
答案 0 :(得分:1)
简短回答:听取事件而不是监控交易。
为什么我找不到"调用的交易"合同?
合同不会调用/创建自己的交易(它没有私钥来签署一个)。正如您所见,合约可以在其自己的执行期间调用其他合约,但这些调用都是作为同一交易的一部分执行的。
发现已执行函数调用的推荐方法是使用事件。如果您要观看的合约没有在您想要观看的电话上指定一个事件,那么您可能需要进行一些繁重的工作:跟踪EVM级别的每个事务的执行情况(大块资源管理器执行的操作)他们提供的一些额外信息。)
如果您遇到跟踪:您可以在此Ethereum StackExchange Question about internal transactions上找到有关使用ethereumjs-vm
或geth debug_traceTransaction
的更多信息。