使用安全帽通过 Uniswap 流动性供应测试代币

Posted

技术标签:

【中文标题】使用安全帽通过 Uniswap 流动性供应测试代币【英文标题】:Testing Token with Uniswap liquidity provisioning using hardhat 【发布时间】:2021-10-01 12:13:54 【问题描述】:

我正在尝试分叉 Safemoon(或真正的 NotSafeMoon),并将其用作学习智能合约开发的工具。 (我有大量你可能称之为“Web 2.0”的开发经验)。

所以说我的构造函数中有类似的东西:

constructor () 
        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);       // binance PANCAKE V2
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

当我使用 npx hardhat test 运行测试时,出现以下错误:

Compilation finished successfully


  TestToken contract
    Deployment
      1) "before each" hook for "Has the right name"


  0 passing (807ms)
  1 failing

  1) TestToken contract
       "before each" hook for "Has the right name":
     Error: Transaction reverted: function call to a non-contract account

现在,这确实很有意义,毕竟我试图调用 Pancakeswap v2 路由器合约。我如何绕过这个限制?有没有办法将路由器的合同地址作为环境变量注入?我可以使用 UniswapRouter 的模拟构造函数吗?一般来说,这种事情是如何通过智能合约开发以可测试(以及如何测试)的方式完成的?

【问题讨论】:

【参考方案1】:

安全帽测试将合约部署到安全帽本地网络(默认情况下)。这个本地网络只有几个预先注资和解锁的账户,但没有部署智能合约。包括 PancakeSwap v2 路由器 (0x10ED43...)。


您可以创建一个从生产 BSC 分叉的新安全帽网络,而不是部署和配置路由器合约的本地副本及其所有依赖项。

https://hardhat.org/guides/mainnet-forking.html

这将运行具有可用路由器合约的本地网络,但您的操作只会影响本地网络(而不是主网)。

【讨论】:

Hardhat 建议使用 Alchemy,但目前不支持 BSC 主网。

以上是关于使用安全帽通过 Uniswap 流动性供应测试代币的主要内容,如果未能解决你的问题,请参考以下文章

OccamRazer的流动性挖矿

什么是DeFi自动化做市商(AMM)?

Uniswap:如何使用 API 读取代币价格

如何使用 UNISWAP API 获取代币价格

了解 uniswap 中的价格影响和流动性

如何在代币合约中区分在 uniswap 上买卖 erc-20 代币