Ether
使用安全帽進行測試時,如何獲得價格鏈環價格饋送?
我已經使用鍊鍊接價格回饋編寫了一個智能合約。現在我想測試我在智能合約中計算的價格是否正確。
在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())