Ether

使用安全帽進行測試時,如何獲得價格鏈環價格饋送?

  • October 10, 2022

我已經使用鍊鍊接價格回饋編寫了一個智能合約。現在我想測試我在智能合約中計算的價格是否正確。

在solidity中,我像這樣獲取目前的美元/乙太幣價格:

priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
(,int value,, ,) = priceFeed.latestRoundData();
...

但是如何在 JavaScript 測試文件中獲取目前的 ETH 值呢?

兩個主要選項,分叉主網,或使用 mockPriceFeed。您可以在智能合約入門套件repo中查看跨不同框架的範例。

模擬價格飼料

例子

使用可變地址部署您的合約以獲取價格資訊。

   constructor(address _priceFeed) {
       priceFeed = AggregatorV3Interface(_priceFeed);
   }

在您的測試中,部署一個模擬價格饋送,然後將該地址用作您的合約的輸入。

安全帽範例:


     beforeEach(async () => {
       await deployments.fixture(["mocks", "feed"])
       mockV3Aggregator = await ethers.getContract("MockV3Aggregator")
       priceConsumerV3 = await ethers.getContract("PriceConsumerV3")
     })

分叉主網

對於分叉主網,您只需讀取主網合約的價格並將其與您的合約返回的價格進行比較。

const price = await myContract.getPrice()
const priceFromFeed = await priceFeed.getPrice()
assert.equal(price.toString(), priceFromFeed.toString())

引用自:https://ethereum.stackexchange.com/questions/137169