我想从区 block 链中获取某个地址(地址A)的所有收据记录。我使用 web3.eth.getBlock 和 web3.eth.getTransaction 来获取与 A 相关的所有交易。 但我发现如果通过调用合约中的“A.send”或“A.transfer”函数将以太币转移到地址A,我只能得到从调用者地址到合约地址的合约调用交易。我找不到这笔交易和地址A之间的关系。 有什么办法可以让 A 的合约调用交易吗? 谢谢。
最佳答案
简短回答:监听事件而不是监视事务。
为什么我找不到合约“调用”的交易?
合约不会调用/创建自己的交易(它没有私钥来签署交易)。如您所见,合约可以在其自身执行期间调用其他合约,但这些调用都是作为同一事务的一部分执行的。
发现已执行函数调用的推荐方法是使用事件。如果您想要监视的合约没有在您想要监视的调用上指定事件,那么您可能会面临一些繁重的工作:在 EVM 级别跟踪每个交易的执行(大型区 block 浏览器为生成一些额外的数据而执行的操作)。他们提供的信息)。
如果您陷入跟踪困境:您可以在此 Ethereum StackExchange Question about internal transactions 上找到有关使用 ethereumjs-vm
或 geth 的 debug_traceTransaction
的更多信息。 .
关于ethereum - 如何从区 block 链获取智能合约调用的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752626/