繁体   English   中英

获取 Chainlink ETH/USD 价格反馈作为 uint256 而不是 int solidity

[英]Get Chainlink ETH/USD Price Feed answer as uint256 instead of int solidity

我想用美元的最新 ETH 价格来计算我可以从 AAVE 借多少 USDC。

我遵循了所有教程:

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

}

将合约用于 ETH/USD 价格馈送:

https://etherscan.io/address/0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419

AggregatorV3Interface internal priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);

创建了获取价格的函数:

 function getLatestPrice() public view returns (int) {
        (
            uint80 roundID, 
            int price,
            uint startedAt,
            uint timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price;
    }

我想调用的函数是这个:

 AaveLendingPool.borrow(address(USDT),getLatestPrice(), 1, 0, address(this));

这是我得到的错误:

TypeError: Type int256 is not implicitly convertible to expected type uint256.

我需要将 int 转换为单位

编辑:不需要使用chainlink,我只是找到了USDC/ETH的Uniswap矿池并计算了价格。

这是为未来的读者提供的一个小的 Python 解释:

r0 = 104819795186660           #USDC
r1 = 24863944415094446691123   #ETH

r0 = r0 / 10**6    # DECIMALS
r1 = r1 / 10**18

print("USDC in pool:", "{:,}".format(r0))
print("ETH in pool:", "{:,}".format(r1))

eth_price_usd = (r0 / r1)

print("ETH price in USD:", "{:,}".format(eth_price_usd))

>>> USDC in pool: 104,819,795.18666
>>> ETH in pool: 24,863.944415094447
>>> ETH price in USD: 4,215.734777906993

您可以使用以下语法将int类型转换为uintuint256(input)

例子:

pragma solidity ^0.8;

contract MyContract {
    function foo() external {
        borrow(uint256(getLatestPrice()));
    }
    
    function getLatestPrice() internal returns (int256) {
        return 1;
    }
    
    function borrow(uint256 _number) internal {
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM