@melonproject/protocol
Version:
Technology Regulated and Operated Investment Funds
84 lines (83 loc) • 4.49 kB
JavaScript
;
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());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const R = __importStar(require("ramda"));
const token_math_1 = require("@melonproject/token-math");
const randomString_1 = require("../../../../utils/helpers/randomString");
const beginSetup_1 = require("../../../factory/transactions/beginSetup");
const completeSetup_1 = require("../../../factory/transactions/completeSetup");
const createAccounting_1 = require("../../../factory/transactions/createAccounting");
const createFeeManager_1 = require("../../../factory/transactions/createFeeManager");
const createParticipation_1 = require("../../../factory/transactions/createParticipation");
const createPolicyManager_1 = require("../../../factory/transactions/createPolicyManager");
const createShares_1 = require("../../../factory/transactions/createShares");
const createTrading_1 = require("../../../factory/transactions/createTrading");
const createVault_1 = require("../../../factory/transactions/createVault");
const getRoutes_1 = require("../calls/getRoutes");
const Environment_1 = require("../../../../utils/environment/Environment");
const getTokenBySymbol_1 = require("../../../../utils/environment/getTokenBySymbol");
const DAY_IN_SECONDS = 60 * 60 * 24;
const setupFund = (environment, name) => __awaiter(this, void 0, void 0, function* () {
const fundName = name ? name : `test-fund-${randomString_1.randomString()}`;
const debug = environment.logger('melon:protocol:tests:setupFund', Environment_1.LogLevels.DEBUG);
debug('Setting up testfund', fundName);
const { exchangeConfigs, melonContracts } = environment.deployment;
const weth = getTokenBySymbol_1.getTokenBySymbol(environment, 'WETH');
const mln = getTokenBySymbol_1.getTokenBySymbol(environment, 'MLN');
const fees = [
{
feeAddress: melonContracts.fees.managementFee.toLowerCase(),
feePeriod: token_math_1.toBI(0),
feeRate: token_math_1.appendDecimals(weth, 0.02),
},
{
feeAddress: melonContracts.fees.performanceFee.toLowerCase(),
feePeriod: token_math_1.toBI(DAY_IN_SECONDS * 90),
feeRate: token_math_1.appendDecimals(weth, 0.2),
},
];
yield beginSetup_1.beginSetup(environment, melonContracts.version, {
defaultTokens: [weth, mln],
exchangeConfigs,
fees,
fundName,
quoteToken: weth,
});
yield createAccounting_1.createAccounting(environment, melonContracts.version);
yield createFeeManager_1.createFeeManager(environment, melonContracts.version);
yield createParticipation_1.createParticipation(environment, melonContracts.version);
yield createPolicyManager_1.createPolicyManager(environment, melonContracts.version);
yield createShares_1.createShares(environment, melonContracts.version);
yield createTrading_1.createTrading(environment, melonContracts.version);
yield createVault_1.createVault(environment, melonContracts.version);
const hubAddress = yield completeSetup_1.completeSetup(environment, melonContracts.version);
const routes = yield getRoutes_1.getRoutes(environment, hubAddress);
expect(R.keys(routes)).toEqual(expect.arrayContaining([
'accountingAddress',
'feeManagerAddress',
'participationAddress',
'policyManagerAddress',
'priceSourceAddress',
'registryAddress',
'sharesAddress',
'tradingAddress',
'vaultAddress',
'versionAddress',
]));
return Object.assign({}, routes, { hubAddress });
});
exports.setupFund = setupFund;