首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniswapV2 addLiquidity恢复ds-数学-子-底流

UniswapV2 addLiquidity恢复ds-数学-子-底流
EN

Ethereum用户
提问于 2021-04-10 13:10:40
回答 4查看 14K关注 0票数 10

我试着用Uniswapv2Router和trying和Ganache,但是还没能识别出我做错了什么。我使用addLiquidty方法如下:await uniswapV2Router02.addLiquidity(token0.address, token1.address, 500, 250, 250 , 125, accounts[0], 1618158769);,它抛出错误Error: Returned error: VM Exception while processing transaction: revert ds-math-sub-underflow -- Reason given: ds-math-sub-underflow.

但是,如果我注释掉.minto(to),代码将一直正确执行。

代码语言:javascript
复制
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        IUniswapV2Pair(pair);//.mint(to);
    }

即使我有一个简单的薄荷实现来测试正在发生的事情,也会发生这种情况。

代码语言:javascript
复制
  function mint(address to) external lock returns (uint liquidity) {
        liquidity = 3;
    }
EN

回答 4

Ethereum用户

回答已采纳

发布于 2021-04-10 20:10:02

问题在于,在使用UniswapV2Factory时,只应按照docs https://uniswap.org/docs/v2/smart-contract-integration/quick-start/中的说明部署来自@uniswap的构建目录中预编译的UniswapV2Factory契约。所以,即使我在我的UniswapV2Pair合同上注释掉了一些东西,它也没有效果,因为UniswapV2Factory也使用预编译的UniswapV2Pair契约。另一方面,ds-math-sub-underflow错误是因为在UniswapV2Pair契约上,function mint(address to)检索了每个令牌的余额,而且由于没有足够的时间,liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);导致了一个underflow

票数 7
EN

Ethereum用户

发布于 2021-07-25 16:26:09

如果与池相关的Uniswap令牌未被批准用于发送事务的钱包,则也会发生这种情况。

解决方案:使用spender调用新对合同的审批方法为0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

票数 9
EN

Ethereum用户

发布于 2022-08-02 06:22:49

下流通常只发生在数学运算中,在这种情况下,下流误差看起来来自您作为amountA和amountB传入的参数。在使用pancakeSwap时也会出现同样的问题,要输入的最小金额为1000。这样做解决了我的地下流量问题,希望它能解决你的问题!

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/97032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档