@celo-tools/celo-ethers-wrapper
Version:
A minimal wrapper to make Ethers.JS compatible with the Celo network.
69 lines • 4.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getConversionRateFromCeloToToken = void 0;
const ethers_1 = require("ethers");
const consts_1 = require("../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",
},
];
async function getConversionRateFromCeloToToken(tokenAddress, wallet) {
const registry = new ethers_1.Contract(consts_1.CELO_REGISTRY_ADDRESS, MINIMAL_REGISTRY_ABI, wallet);
const oracleAddress = await registry.getAddressForString("SortedOracles");
const oracle = new ethers_1.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];
}
exports.getConversionRateFromCeloToToken = getConversionRateFromCeloToToken;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29yZUNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9Db3JlQ29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBRWxDLHNDQUFrRDtBQUVsRCxNQUFNLHdCQUF3QixHQUFHO0lBQy9CO1FBQ0UsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDRjtRQUNELElBQUksRUFBRSxZQUFZO1FBQ2xCLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFlBQVksRUFBRSxTQUFTO2dCQUN2QixJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLFlBQVksRUFBRSxTQUFTO2dCQUN2QixJQUFJLEVBQUUsRUFBRTtnQkFDUixJQUFJLEVBQUUsU0FBUzthQUNoQjtTQUNGO1FBQ0QsT0FBTyxFQUFFLEtBQUs7UUFDZCxlQUFlLEVBQUUsTUFBTTtRQUN2QixJQUFJLEVBQUUsVUFBVTtLQUNqQjtDQUNGLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHO0lBQzNCO1FBQ0UsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxZQUFZLEVBQUUsUUFBUTtnQkFDdEIsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxxQkFBcUI7UUFDM0IsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLElBQUksRUFBRSxFQUFFO2dCQUNSLElBQUksRUFBRSxTQUFTO2FBQ2hCO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsS0FBSztRQUNkLGVBQWUsRUFBRSxNQUFNO1FBQ3ZCLElBQUksRUFBRSxVQUFVO0tBQ2pCO0NBQ0YsQ0FBQztBQUVLLEtBQUssVUFBVSxnQ0FBZ0MsQ0FDcEQsWUFBb0IsRUFDcEIsTUFBa0I7SUFFbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBUSxDQUMzQiw4QkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLE1BQU0sQ0FDUCxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxRQUFRLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBUSxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU3RSxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUM1QixNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsaUdBQWlHO0lBQ2pHLDJGQUEyRjtJQUMzRix1SEFBdUg7SUFDdkgsZ0hBQWdIO0lBQ2hILE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQXJCRCw0RUFxQkMifQ==