ethereum - 如何从区 block 链获取智能合约调用的交易

标签 ethereum smartcontracts

我想从区 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/

相关文章:

reactjs - 如何将安全帽导入此存储库

ethereum - 使用 web3swift 与自定义智能合约交互

ethereum - 与 Uni V2 交互时如何修复 'TransferHelper: ETH_TRANSFER_FAILED'

blockchain - 在不使用 geth 或 tuffle 或 ganache 的情况下仅使用 EVM API 在区 block 链上部署智能合约?

blockchain - 重新混合 solidity 契约(Contract)如何将多个参数传递到创建按钮

javascript - 正确的 node.js 抽象可防止访问以太坊区 block 链时的竞争条件

blockchain - 是否可以在 Solidity 智能合约创建上预留一个地址用于收税?

javascript - Web3/元掩码 : Error: Contract has not been deployed to detected network (network/artifact mismatch) on Kovan network

python - AttributeError: 'NoneType' 对象没有属性 '_with_attr' - Python 使用 pytest 运行测试

javascript - 如何通过单击 webapp 上的按钮(如 opensea)来检测、启动和连接到 metamask 移动应用程序?