首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniswapV2流动性池准备金为特定地址返回0

UniswapV2流动性池准备金为特定地址返回0
EN

Ethereum用户
提问于 2023-01-13 17:36:51
回答 2查看 123关注 0票数 0

我有一份合同,它试图根据流动性池中的准备金计算象征性的价格。当我调用契约函数getTokenPriceAB()并输入WBTC的对地址作为参数时,它成功地返回了金额。

但是,当我将它改为另一个类似WETH的函数时,它会返回0。

代码语言:javascript
复制
   function getTokenPriceAB(address pairAddress) public override view returns(uint) {

        IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);

        IERC20 token1 = IERC20(pair.token1());
        (uint Res0, uint Res1,) = pair.getReserves();

        require(Res1 != 0, "Division by zero");

        // decimals
        uint res0 = Res0.mul(10**token1.decimals());

        // return amount of _tokenA needed to buy _tokenB
        // to improve precision, multiply before dividing
        return((1000000000000000000*res0)/Res1); 
    }

我期待的任何其他结果,而不是0独立于对地址。

我还确保在那里输入了一个有效的地址,并检查了这个池在以太扫描上的流动性。

EN

回答 2

Ethereum用户

发布于 2023-01-14 02:04:05

停止使用getReserves(),使用kLast()

代码语言:javascript
复制
   function getTokenPriceAB(address pairAddress) public view returns(uint256) {

        IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);
        uint256 price = pair.kLast();
        return price;

    }

在这个上下文中,使用kLast()函数而不是getReserves()是有意义的,因为它返回令牌对的最后交易价格。它不返回令牌对的当前储备,而是返回令牌对的最后交易价格,该交易价格是以token0价格与token1价格的比率计算的。

票数 1
EN

Ethereum用户

发布于 2023-01-17 17:37:06

我尝试在以太扫描上对kLast()使用WETH-USDC对 (),但是即使是read契约函数对于kLast()也总是返回0。所以我至少正确地调用了这个函数。为什么这个值总是0?流动性池中显然有资金,因此它应该能够计算出kLast的价格。

在检查getReserves()函数时,它成功地返回了两个值。

这完全没有意义,我在文档中也找不到任何信息。

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

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

复制
相关文章

相似问题

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