tenderly初识

196 阅读6分钟

礼记有言:良冶之子,必学为裘;良弓之子,必学为箕;始驾马者反之,车在马前。
闲来无事,阅读一下tenderly 的官网文档,从别人嘴里听来的只言片语终究了解的不够全面。

Overview

首先看一下tenderly是如何精准解释自己的(总得知道它是干什么的吧!)

Virtual TestNets are simulated blockchain networks, designed to replicate real networks for various stages of dapp development. Use them as risk-free development and staging infrastructure that fully tracks real network state without the need to use real cryptocurrency or assets.

Virtual TestNets 被用来模仿区块链网络,复制真实网络各个开发阶段的数据。

使用 虚拟网络,无风险 开发,完全复刻了真实网络的状态,在虚拟网络上交互无需真实的加密货币。

哦!tenderly 是用来 fork 主网的呀。

如何创建一个Virtual TestNets?

  1. 进入Tenderly 的dashboard-->Virtual TestNets --->Create Virtual TestNet

  2. 选择网络 & chainID & 取一个独一无二的name & set the contract verfication visibily(去控制智能合约的代码是否公开)& state sync (是否保持你的虚拟网络 根据 主网实时更新)

  3. Click Create

  4. Add testNet to Metamask 把你的rpc 添加到小狐狸

  5. 领水。

Every TestNet has an unlimited faucet that allows you to top up or set a new balance for any account on the TestNet instantly.

每一个虚拟网络 都自带 无限水龙头(Faucet)领取测试币

Unlimited Faucet 无限水龙头

领水的步骤和注意点:

如果不想使用水龙头领取水,也可以使用脚本领取水

1. 使用脚本领取ERC20代币 Fund ERC-20 balance

2. 使用脚本领取原生代币Fund native balance

Copy the Testnet RPC link and call the tenderly_setBalance method to set a new balance specified in wei in hexadecimal form.

3. Rpc 身上提供的方法,被植入到prc provider身上,ethers,viem,wagmi...方法当然也可以是现象。

看明白了吗?

!总结:tenderly 提供了fork 主网rpc 的功能 和  领水的功能。此rpc 和chainlink 上testnet rpc 无二。也就是说,该rpc 支持ethers.js 、viem、wagmi....桥接区块链的库。

-----------------------------------------------------------------------------------------

在我看来tenderly的优点有2点:

1. fork 原链rpc, 无限制水龙头,使开发者不必受制于 测试币 

2. 它为fork 的rpc 提供了区块浏览器,使开发者可以通过区块浏览器分析数据。

-----------------------------------------------------------------------------------------

且看它自己是如何说的:

使用 testNets 你可以演示你想在主网做的所有操作。

*(此simulate 与viem 上的一样。)

State sync 状态同步

先上图,个人感觉 tenderly 的图做的不仅赏心悦目,还能说明问题。

看明白了吗?

!解释一下,依然是先贴 tenderly 的原文,这样可以避免口口相传的过程中意思变味。

State sync enables you to access the latest values of storage slots and account balances on the mainnet as they update. Upon writing to a particular storage slot on the Virtual TestNet, synchronization stops for that slot, but remains active for all unmodified ones.

状态同步使你能够访问链上和账户的余额的最新值当原链更新时。

如果你在虚拟网络更改状态,被更改的状态将停止同步主网的数据, 但是未被更改的状态依然保持和主网同步。

在TestNets 上操作的详情:

1. 当一个区块被创建时,区块号与原链的最新区块号匹配。

2. 每当你在 虚拟链发送一个交易时,将创建一个区块,区块号依赖于原链的最新区块号,并将 区块号+1。

3. 在虚拟链“更改”合约的状态之前,虚拟链会跟踪原始链的最新值。

4. 如果你”更改“了某个变量的值,那么该变量将不再与原链的数据同步。

5. 合约中未被更改的变量,其值依旧保持与原链的值一样。

-----------------------------------------------------------------------------------------

怕we理解不了,Tenderly还对此举了一个例子,它举了一个计数器的例子:

1. 在原链上设置值为1,此时,原链和虚拟链的读到的值都是1,这个最新的状态来源于原链

2. 在虚拟链设置值为10,此时,原链读到的值为1,虚拟链读到的值为10.

3. 再在原链设置值为100,此时原链读到的值为100,虚拟链读到的值依然是10

总结:如果在虚拟链没有改变过“状态”,那么虚拟链上的“状态”都与原链同步。

一旦在虚拟链修改了状态,则被修改的状态变量的值 不再与 原链同步,未被修改的值依旧保持与原链同步。

API

rpc 身上被植入很多方法,在前面已经介绍过3个无限领水的方法

Unlimited faucet

再介绍一个我没使用过的方法--State revert状态回滚:

依旧先上图,之前只知道链上数据可以回滚,但我只会git回滚,不知道链上的数据如何回滚 。

哦!其实和git 回滚原理类似。都是根据 flag 作为标识来回滚的。

当然,rpc 身上还有许多别的方法,想要了解的可以取tenderly 官方文档看下详细介绍。

总结:tenderly 主要用于fork 原链rpc. 使开发者可以使用虚拟rpc 做任何 在原链上做的所有操作。并且tenderly 提供了区块浏览器,方便开发者查阅交易详情。