UNPKG

@celo-tools/celo-ethers-wrapper

Version:

A minimal wrapper to make Ethers.JS compatible with the Celo network.

65 lines 4.05 kB
import { Contract } from "ethers"; import { CELO_REGISTRY_ADDRESS } from "../consts"; const MINIMAL_ORACLE_INTERFACE = [ { constant: true, inputs: [ { internalType: "address", name: "token", type: "address", }, ], name: "medianRate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], payable: false, stateMutability: "view", type: "function", }, ]; const MINIMAL_REGISTRY_ABI = [ { constant: true, inputs: [ { internalType: "string", name: "identifier", type: "string", }, ], name: "getAddressForString", outputs: [ { internalType: "address", name: "", type: "address", }, ], payable: false, stateMutability: "view", type: "function", }, ]; export async function getConversionRateFromCeloToToken(tokenAddress, wallet) { const registry = new Contract(CELO_REGISTRY_ADDRESS, MINIMAL_REGISTRY_ABI, wallet); const oracleAddress = await registry.getAddressForString("SortedOracles"); const oracle = new Contract(oracleAddress, MINIMAL_ORACLE_INTERFACE, wallet); const [numerator, denominator] = await oracle.medianRate(tokenAddress); // The function docs for the Contract are confusing but in ContractKit the Sorted orcles wrapper // defines numerator as the amount of the token and denominiator as equvalent value in CELO // https://github.com/celo-org/developer-tooling/blob/master/packages/sdk/contractkit/src/wrappers/SortedOracles.ts#L80 // https://github.com/celo-org/celo-monorepo/blob/master/packages/protocol/contracts/stability/SortedOracles.sol return [numerator, denominator]; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29yZUNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9Db3JlQ29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbEQsTUFBTSx3QkFBd0IsR0FBRztJQUMvQjtRQUNFLFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0Y7UUFDRCxJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUDtnQkFDRSxZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLFNBQVM7YUFDaEI7WUFDRDtnQkFDRSxZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDRjtRQUNELE9BQU8sRUFBRSxLQUFLO1FBQ2QsZUFBZSxFQUFFLE1BQU07UUFDdkIsSUFBSSxFQUFFLFVBQVU7S0FDakI7Q0FDRixDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRztJQUMzQjtRQUNFLFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0Y7UUFDRCxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFlBQVksRUFBRSxTQUFTO2dCQUN2QixJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUsU0FBUzthQUNoQjtTQUNGO1FBQ0QsT0FBTyxFQUFFLEtBQUs7UUFDZCxlQUFlLEVBQUUsTUFBTTtRQUN2QixJQUFJLEVBQUUsVUFBVTtLQUNqQjtDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsS0FBSyxVQUFVLGdDQUFnQyxDQUNwRCxZQUFvQixFQUNwQixNQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixNQUFNLENBQ1AsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU3RSxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUM1QixNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsaUdBQWlHO0lBQ2pHLDJGQUEyRjtJQUMzRix1SEFBdUg7SUFDdkgsZ0hBQWdIO0lBQ2hILE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQyJ9