mirror of
https://github.com/Instadapp/dsa-resolvers-deprecated.git
synced 2024-07-29 22:38:16 +00:00
Added chainlink resolver
This commit is contained in:
parent
d0375b3f92
commit
15e4ac77ca
63
contracts/protocols/chainlink_aggregator.sol
Normal file
63
contracts/protocols/chainlink_aggregator.sol
Normal file
|
@ -0,0 +1,63 @@
|
|||
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";
|
||||
}
|
Loading…
Reference in New Issue
Block a user