以太坊虚拟机(EVM)跟踪提供交易每个步骤的详细运行时数据,包括使用的Gas、结果、错误值等信息。与状态和交易不同,EVM跟踪不是区块链的一部分,也不必保留在节点上。
以太坊虚拟机 (EVM) trace
提供交易每个步骤的详细运行时数据,包括使用的 Gas、结果、错误值等信息。与状态和交易不同,EVM 跟踪不是区块链的一部分,也不必保留在节点上。
💁♂️ Etherscan 运行一个经过检测的 EVM,使我们能够查看来自各种客户端(Parity Trace)
当交易在 EVM 中revert
时,状态会记录在交易收据中。但是,没有其他信息来描述失败的原因。唯一的选择是检查trace
以确定原因。
任何智能合约的执行都是从外部账户发起的交易开始的。反过来,智能合约可以与其他合约交互或进行转账。这些活动不会记录在区块链中。例如,智能合约可以向一组用户空投代币(即发送免费代币),但此活动不会作为交易记录在区块链中。对于此类活动,合约可以选择发出事件,然后可以在日志中查看这些事件。否则,观察它们的唯一方法就是监控trace
。
需要监控的一些常见操作是:
CALL跟踪类型指示智能合约何时将以太币转移到另一个账户或调用另一个合约的方法。
CREATE跟踪类型指示智能合约何时部署到以太坊网络。智能合约可以通过 EOA 账户或其他智能合约来部署。
<!--StartFragment-->
其他可能感兴趣的trace
类型是 SELFDESTRUCT(从区块链中删除的合约)和 REWARD(奖励矿工)。通过检查跟踪数据,人们可以更好地了解事务中发生的情况。
trace
?跟踪是一个耗时且占用资源的过程。节点必须能够存储和检索大量跟踪数据。它还降低了节点同步整个区块链历史的能力。由于块验证或挖矿不需要存储trace
,因此大多数节点在不启用跟踪的情况下运行。
有多种方法可以检索交易的 EVM 追踪。
a) 在完整/存档节点中重播交易 :以太坊客户端公开尝试以与之前执行的方式相同的方式重新运行交易并收集跟踪的方法。虽然检索结果需要时间,但只要足够的信息来运行交易,节点就不需要存储跟踪。
b) 运行启用了跟踪的存档节点: 以太坊客户端支持运行启用了跟踪的节点。这将允许节点存储痕迹,以便可以快速检索它们,而无需重新执行交易。然而,这是以更高的成本和更慢的节点性能为代价的。
c) 使用 API: Infura 或 Alchemy 等第三方服务管理启用跟踪的节点,并提供 API 端点来收集交易跟踪。尽管它是迄今为止最简单的,但缺点是您必须依赖中心化实体。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!