mirror of
https://github.com/Instadapp/dsa-resolvers-deprecated.git
synced 2024-07-29 22:38:16 +00:00
63 lines
2.1 KiB
Solidity
63 lines
2.1 KiB
Solidity
|
pragma solidity ^0.7.0;
|
||
|
pragma experimental ABIEncoderV2;
|
||
|
|
||
|
interface ChainLinkInterface {
|
||
|
function latestAnswer() external view returns (int256);
|
||
|
function decimals() external view returns (uint256);
|
||
|
}
|
||
|
|
||
|
contract Basic {
|
||
|
ChainLinkInterface ethUsdPriceFeed = ChainLinkInterface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
|
||
|
// ChainLinkInterface ethUsdPriceFeed = ChainLinkInterface(0x9326BFA02ADD2366b30bacB125260Af641031331);
|
||
|
|
||
|
function toUint256(bytes memory _bytes)
|
||
|
internal
|
||
|
pure
|
||
|
returns (uint256 value) {
|
||
|
|
||
|
assembly {
|
||
|
value := mload(add(_bytes, 0x20))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
contract Resolver is Basic {
|
||
|
struct PriceData {
|
||
|
uint price;
|
||
|
uint decimals;
|
||
|
bool status;
|
||
|
}
|
||
|
|
||
|
function getPrices(address[] memory priceFeeds)
|
||
|
public
|
||
|
view
|
||
|
returns (
|
||
|
PriceData memory ethPriceInUsd,
|
||
|
PriceData[] memory tokensPriceInETH
|
||
|
) {
|
||
|
tokensPriceInETH = new PriceData[](priceFeeds.length);
|
||
|
for (uint i = 0; i < priceFeeds.length; i++) {
|
||
|
(bool priceStatus, bytes memory priceData) = priceFeeds[i].staticcall(abi.encodeWithSignature("latestAnswer()"));
|
||
|
(bool decimalstatus, bytes memory decimalsData) = priceFeeds[i].staticcall(abi.encodeWithSignature("decimals()"));
|
||
|
tokensPriceInETH[i] = PriceData({
|
||
|
price: address(ethUsdPriceFeed) == priceFeeds[i] ? 1 : toUint256(priceData),
|
||
|
decimals: toUint256(decimalsData),
|
||
|
status: priceStatus && decimalstatus
|
||
|
});
|
||
|
}
|
||
|
|
||
|
(bool priceStatus, bytes memory priceData) = address(ethUsdPriceFeed).staticcall(abi.encodeWithSignature("latestAnswer()"));
|
||
|
(bool decimalstatus, bytes memory decimalsData) = address(ethUsdPriceFeed).staticcall(abi.encodeWithSignature("decimals()"));
|
||
|
|
||
|
|
||
|
ethPriceInUsd = PriceData({
|
||
|
price: toUint256(priceData),
|
||
|
decimals: toUint256(decimalsData),
|
||
|
status: priceStatus && decimalstatus
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
contract InstaChainLinkResolver is Resolver {
|
||
|
string public constant name = "ChainLink-Aggregator-Resolver-v1";
|
||
|
}
|