Oracles
Querying an oracle
// Get the oracle price
import { type Address, parseAbi, createPublicClient } from "viem";
import { priceFromTick } from "@mangrovedao/mgv";
const client = createPublicClient(...);
const oracle: Address = "0x...";
const abi = parseAbi([
"function tick() external view returns (int256)"
])
const tick = await client.readContract({
address: oracle,
abi,
functionName: "tick"
})
const rawPrice = priceFromTick(tick); // 1.0001 ** Number(tick)
const adjustedPrice = rawPrice * 1e12 // adjust for decimalsDeploying a chainlink oracle adapter (v2)
Choosing the parameters
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/chainlink/v2/MangroveChainlinkOracleV2.sol#L40-L46
Checking if the oracle is already deployed
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/chainlink/v2/MangroveChainlinkOracleFactoryV2.sol#L18-L37
Deploying the oracle
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/chainlink/v2/MangroveChainlinkOracleFactoryV2.sol#L57-L65
Deploying a Dia oracle adapter
Choosing the parameters
Checking if the oracle is already deployed
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/dia/MangroveDiaOracleFactory.sol#L29-L37
Deploying the oracle
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/dia/MangroveDiaOracleFactory.sol#L57-L65
Combining oracles together
Checking existing oracle
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/OracleCombinerFactory.sol#L29-L32
Deploying the oracle
https://github.com/mangrovedao/mangrove-vault/blob/899abdb187f1801ba44621c0e25a697edda859e7/src/oracles/OracleCombinerFactory.sol#L50-L53
Last updated
Was this helpful?