gpt4 book ai didi

Solidity Uniswap : get token price

转载 作者:行者123 更新时间:2023-12-05 06:00:57 26 4
gpt4 key购买 nike

我正在尝试获取 UniswapV2 上一对的价格:这是我的代码:

pragma solidity ^0.5.1;

import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol';
import './IERC20.sol';


contract Uniswap {

// calculate price based on pair reserves
function getTokenPrice(address pairAddress, uint amount) public view returns(uint)
{
IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);
IERC20 token1 = IERC20(pair.token1);
(uint Res0, uint Res1,) = pair.getReserves();

// decimals
uint res0 = Res0*(10**token1.decimals());
return((amount*res0)/Res1); // return amount of token0 needed to buy token1
}

}

我手动导入了openzeppelin IERC20接口(interface),编译版本为0.5.1,因为uniswap v2外设当前版本是0.5.1

但是对于行 IERC20 token1 = IERC20(pair.token1); 我有以下错误:

Explicit type conversion not allowed from "function () view external returns (address)" to "contract IERC20". IERC20 token1 = IERC20(pair.token1); ^-----------------^

关于如何解决这个问题的任何想法?谢谢!

最佳答案

IUniswapV2Pair 接口(interface) defines token1() 函数 - 不是 token1 属性。

他们的 contract然后使用属性的签名与函数的签名相同的事实,因此它不需要实现该函数(只要它具有同名的公共(public)属性)。

但是当外部合约(比如你的)使用接口(interface)调用函数时,它需要完全遵循它。


所以你可以简单地替换

IERC20 token1 = IERC20(pair.token1); // original code

IERC20 token1 = IERC20(pair.token1()); // function `token1()`

关于Solidity Uniswap : get token price,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67415698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com