UNPKG

@melonproject/protocol

Version:

Technology Regulated and Operated Investment Funds

99 lines (98 loc) 6.42 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const token_math_1 = require("@melonproject/token-math"); const initTestEnvironment_1 = require("../utils/initTestEnvironment"); const deployKyberEnvironment_1 = require("../../contracts/exchanges/transactions/deployKyberEnvironment"); const getContract_1 = require("../../utils/solidity/getContract"); const getToken_1 = require("../../contracts/dependencies/token/calls/getToken"); const deploy_1 = require("../../contracts/dependencies/token/transactions/deploy"); const deployKyberPriceFeed_1 = require("../../contracts/prices/transactions/deployKyberPriceFeed"); const isAddress_1 = require("../../utils/checks/isAddress"); const hasValidPrice_1 = require("../../contracts/prices/calls/hasValidPrice"); const getPrice_1 = require("../../contracts/prices/calls/getPrice"); const updateKyber_1 = require("../../contracts/prices/transactions/updateKyber"); const Contracts_1 = require("../../Contracts"); const deployContract_1 = require("../../utils/solidity/deployContract"); const setBaseRate_1 = require("../../contracts/exchanges/third-party/kyber/transactions/setBaseRate"); describe('kyber-price-feed', () => { const shared = {}; beforeAll(() => __awaiter(this, void 0, void 0, function* () { shared.env = yield initTestEnvironment_1.initTestEnvironment(); shared.tokens = { eur: yield getToken_1.getToken(shared.env, yield deploy_1.deployToken(shared.env, 'EUR')), mln: yield getToken_1.getToken(shared.env, yield deploy_1.deployToken(shared.env, 'MLN')), weth: yield getToken_1.getToken(shared.env, yield deploy_1.deployToken(shared.env, 'WETH')), }; shared.kyberDeploy = yield deployKyberEnvironment_1.deployKyberEnvironment(shared.env, [ shared.tokens.mln, shared.tokens.eur, ]); shared.mockRegistryAddress = yield deployContract_1.deployContract(shared.env, Contracts_1.Contracts.MockRegistry); shared.mockRegistry = yield getContract_1.getContract(shared.env, Contracts_1.Contracts.MockRegistry, `${shared.mockRegistryAddress}`); yield shared.mockRegistry.methods .setNativeAsset(shared.tokens.weth.address.toString()) .send({ from: `${shared.env.wallet.address}` }); for (const token of Object.values(shared.tokens)) { yield shared.mockRegistry.methods .register(`${token['address']}`) .send({ from: `${shared.env.wallet.address}` }); } })); it('Deploy kyber pricefeed', () => __awaiter(this, void 0, void 0, function* () { shared.kyberPriceFeed = yield deployKyberPriceFeed_1.deployKyberPriceFeed(shared.env, { kyberNetworkProxy: shared.kyberDeploy.kyberNetworkProxy, quoteToken: shared.tokens.weth, registry: shared.mockRegistryAddress, }); expect(isAddress_1.isAddress(shared.kyberPriceFeed)); })); it('Get price', () => __awaiter(this, void 0, void 0, function* () { yield updateKyber_1.updateKyber(shared.env, shared.kyberPriceFeed); const hasValidMlnPrice = yield hasValidPrice_1.hasValidPrice(shared.env, shared.kyberPriceFeed, shared.tokens.mln); expect(hasValidMlnPrice).toBe(true); const mlnPrice = yield getPrice_1.getPrice(shared.env, shared.kyberPriceFeed, shared.tokens.mln); expect(token_math_1.toFixed(mlnPrice)).toBe('1.000000'); })); it('Update mln price in reserve', () => __awaiter(this, void 0, void 0, function* () { const prices = [ { buy: token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.weth, 0.05), token_math_1.createQuantity(shared.tokens.mln, 1)), sell: token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.mln, 20), token_math_1.createQuantity(shared.tokens.weth, 1)), }, { buy: token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.weth, 0.008), token_math_1.createQuantity(shared.tokens.eur, 1)), sell: token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.eur, 125), token_math_1.createQuantity(shared.tokens.weth, 1)), }, ]; yield setBaseRate_1.setBaseRate(shared.env, shared.kyberDeploy.conversionRates, { prices, }); yield updateKyber_1.updateKyber(shared.env, shared.kyberPriceFeed); const mlnPrice = yield getPrice_1.getPrice(shared.env, shared.kyberPriceFeed, shared.tokens.mln); const eurPrice = yield getPrice_1.getPrice(shared.env, shared.kyberPriceFeed, shared.tokens.eur); expect(token_math_1.toFixed(mlnPrice)).toBe('0.050000'); expect(token_math_1.toFixed(eurPrice)).toBe('0.008000'); })); it('Update mln price without explicity passing buy-sell prices', () => __awaiter(this, void 0, void 0, function* () { const prices = [ token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.mln, 20), token_math_1.createQuantity(shared.tokens.weth, 1)), token_math_1.createPrice(token_math_1.createQuantity(shared.tokens.eur, 125), token_math_1.createQuantity(shared.tokens.weth, 1)), ]; yield setBaseRate_1.setBaseRate(shared.env, shared.kyberDeploy.conversionRates, { prices, }); yield updateKyber_1.updateKyber(shared.env, shared.kyberPriceFeed); const mlnPrice = yield getPrice_1.getPrice(shared.env, shared.kyberPriceFeed, shared.tokens.mln); const eurPrice = yield getPrice_1.getPrice(shared.env, shared.kyberPriceFeed, shared.tokens.eur); expect(token_math_1.toFixed(mlnPrice)).toBe('0.050000'); expect(token_math_1.toFixed(eurPrice)).toBe('0.008000'); })); });