Simulation RPC 兼容 Mainnet、Boba 和 Polygon,其他网络将陆续
集成。\ Simulation API 兼容所有 Tenderly 支持的
网络。
集成 Simulation API 的好处
通过集成 Simulation API/Simulation RPC,您可以- 在用户签名并将交易提交上链之前,对其进行预演。
- 更清楚地看到潜在的回滚,避免因 gas 费而损失金钱。
- 更清楚地看到成功应用的结果,包括与用户相关的资产转移和状态变化。
- 基于模拟结果构建逻辑,向用户展示他们的交易是否带来了最佳价值,并提出改进建议。
- 如果您在构建类似钱包的应用,可以展示一笔交易如何转移 ERC-20 代币,让用户看到自己资金的流向。
- 如果您在构建 DeFi 产品,您可以使用事件分析一笔交易是否满足用户在 UI 中设定的最优条件。
- 如果您正在准备一份由若干交易组成的治理提案,可以做一次模拟捆绑,以查看提案的应用效果。
- 您甚至可以将提案交易与几笔测试交易捆绑在一起,以验证您的提案按预期执行,并识别可能的盲点。
示例:向 Uniswap UI 添加模拟
在本示例中,我们将展示如何将 Simulation RPC 集成到 Uniswap UI 中,并显示沿兑换路径的具体代币跳转。这样,我们就能让用户更清楚地看到交易的效果,并帮助他们对是否继续做出明智的决定。Simulation 组件需求
以下是模拟组件的需求:
- 该组件应显示用户在签名并发送交易前后所持有的代币数量。
- 每当交易数据发生变化时都应执行一次模拟,因此它需要接收
trade和allowedSlippage参数。 - 该组件必须跟踪:
- 当前余额(兑换之前)。
- 我们将用于计算新余额的
Swap事件。 - 我们将用于计算新余额的
Transfer事件数组。
在 ConfirmSwapModal 中渲染 Simulation
向用户告知交易结果的最佳位置是 ConfirmSwapModal,正好在他们签名并发送交易之前。
为简洁起见,此处代码已省略:
example
Simulation 组件的实现
该组件的逻辑位于 simulate 函数中:
- 它会在
trade或provider参数变化时运行,因此每当兑换可能发生变化时,它都会更新并重新模拟。 - 它调用
setOldBalances,获取输入和输出 ERC-20 代币的余额并将其存储在oldBalances状态变量中。 - 它调用
simulateRPC,执行对tenderly_simulateTranscation的 Simulation RPC 调用,然后:- 遍历解码后的日志以查找
Transfer事件,并将它们存储在组件的transfers状态变量中。 - 遍历解码后的日志以查找
Swap事件,并将其存储在组件的swap状态变量中。
- 遍历解码后的日志以查找
SimulationDetails 组件,它是一个纯函数式组件。它计算旧状态和新状态,并基于 trade、swap、transfers 和 oldBalances 渲染数据。
example.tsx