如何映射具有链式链接和稳定性的资产的价格?



我有一个合同,必须通过chainlink节省eth的时间和价格。时间工作,没有问题。另一方面,价格既不能用数组记录,也不能用映射记录。我尝试了几种解决方案,其中包括push()

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
interface EACAggregatorProxy {
function latestAnswer() external view returns (int256);
}
contract oracleLink {
uint256 deadline;

uint256 startTime = startTimes[block.timestamp]; 
mapping(uint => uint) startTimes; 
address public chainLinkETHUSDAddress = 0x9326BFA02ADD2366b30bacB125260Af641031331;
uint public ethPrice = 0; 
uint256 price = ethPrice;
mapping(uint => uint) ethPrice;
function priceOnTime() public payable {
deadline = block.timestamp + (numberOfSeconds * 1 seconds);
int256 chainLinkEthPrice = EACAggregatorProxy(chainLinkETHUSDAddress).latestAnswer();
ethPrice = uint(chainLinkEthPrice / 100000000);
return ethPrice;
}
}

源代码中硬编码的chainLinkETHUSDAddress地址仅包含Kovan测试网上的合约。也就是说,这段代码只在这个测试网络或它的分支上工作,在其他网络上失败。

如果你想在Remix中使用返回值,你需要创建Kovan测试网的一个本地分支,然后使用Remix中的环境选择框连接到这个本地网络。

您的代码没有正确使用映射。I映射就像一个数组,只是在某些方面更有效,但也有一些限制。

所以要使用你的映射你需要使用

ethPrice[x] = y;

其中x和y都是int(如您指定的映射)。使用uint)。因此,每个唯一的单元映射(引用)到另一个单元。

ethPrice[x] = uint(chainLinkEthPrice/100000000);

其中x是一个int,稍后使用。

查找值。

您错误地存储了映射。映射必须存储为variable[key]=value

https://www.tutorialspoint.com/solidity/solidity_mappings.htm

相关内容

  • 没有找到相关文章

最新更新