如何解决我的 Solidity 代码中的问题?我2天前开始学习solidity

问题描述 投票:0回答:1

这是我使用图书馆的合同。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./PriceConverter.sol";

contract Fundme{

    using PriceConverter for uint256;//引入Library PriceConverter到uint
    uint256 public minimumUsd=10 * 1e18;

    address[] public funders;
    mapping(address => uint256) public addressToAmountFunded;

    function fund() public payable {
    require(getConversionRate(msg.value)>=minimumUsd, "Didn't send enough!");
    funders.push(msg.sender);
    addressToAmountFunded[msg.sender]=msg.value; 


}

这是图书馆

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

library PriceConverter{
    function getPrice() internal view returns(uint256) {
    //ABI
    //Address 0x694AA1769357215DE4FAC081bf1f309aDC325306
    AggregatorV3Interface priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306);
    (,int256 price,,,)=priceFeed.latestRoundData(); 
    return uint(price*1e10);
}
function getVersion() internal view returns (uint256){
    AggregatorV3Interface priceFeed=AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306);
   return priceFeed.version();
}
function getConversionRate(uint256 ethAmount) internal view returns (uint256) {
    uint256 ethprice = getPrice();
    uint256 ethAmountInUsd=(ethprice*ethAmount)/1e18;
    return ethAmountInUsd;
}
}

但是我遇到了问题:getConversionRate 是未声明的标识符。

我将 getConversionRate(msg.value) 更改为 msg.value.getConversionRate() 并解决了问题。但为什么 getConversionRate(msg.value) 是错误的?

solidity
1个回答
0
投票

您的代码正在尝试访问在此范围内不可用的函数

getConversionRate()
(直接来自
Fundme
合约)。调用函数时需要指定库名:

require(PriceConverter.getConversionRate(msg.value)>=minimumUsd, "Didn't send enough!");
© www.soinside.com 2019 - 2024. All rights reserved.