diff --git a/src/services/ContractService.ts b/src/services/ContractService.ts index 9977491..0ae8aa3 100644 --- a/src/services/ContractService.ts +++ b/src/services/ContractService.ts @@ -30,28 +30,32 @@ export default class ContractService { public createDuoWrappers(): { [type: string]: { [tenor: string]: DualClassWrapper | VivaldiWrapper }; } { - return { - Beethoven: { - Perpetual: new DualClassWrapper( - this.web3Wrapper, - this.web3Wrapper.contractAddresses.Custodians.Beethoven.Perpetual.custodian.address - ) - }, - Mozart: { - Perpetual: new DualClassWrapper( - this.web3Wrapper, - this.web3Wrapper.contractAddresses.Custodians.Mozart.Perpetual.custodian.address - ) - } - // ,Vivaldi: { - // '100C-3H': new VivaldiWrapper( - // this.web3Wrapper, - // this.web3Wrapper.contractAddresses.Custodians.Vivaldi[ - // '100C-3H' - // ].custodian.address - // ) - // } - }; + const duoWrappers: { + [type: string]: { [tenor: string]: DualClassWrapper | VivaldiWrapper }; + } = {}; + const custodianAddrs = this.web3Wrapper.contractAddresses.Custodians; + for (const contractType in custodianAddrs) + if (!util.isEmptyObject(custodianAddrs[contractType])) + for (const tenor in custodianAddrs[contractType]) + Object.assign(duoWrappers, { + [contractType]: { + [tenor]: + contractType === WrapperConstants.VIVALDI + ? new VivaldiWrapper( + this.web3Wrapper, + this.web3Wrapper.contractAddresses.Custodians[ + contractType + ][tenor].custodian.address + ) + : new DualClassWrapper( + this.web3Wrapper, + this.web3Wrapper.contractAddresses.Custodians[ + contractType + ][tenor].custodian.address + ) + } + }); + return duoWrappers; } public createMagiWrapper() { @@ -80,21 +84,11 @@ export default class ContractService { public async trigger() { await this.fetchKey(); const duoWrappers = this.createDuoWrappers(); - const VivaldiWrappers: VivaldiWrapper[] = []; - for (const tenor in duoWrappers.Vivaldi) - VivaldiWrappers.push(duoWrappers.Vivaldi[tenor] as VivaldiWrapper); + const DualWrappers = []; + for (const type in duoWrappers) + for (const tenor in duoWrappers[type]) DualWrappers.push(duoWrappers[type][tenor]); - eventUtil.trigger( - this.address, - [ - duoWrappers.Beethoven.Perpetual as DualClassWrapper, - // duoWrappers.Beethoven.M19 as DualClassWrapper, - duoWrappers.Mozart.Perpetual as DualClassWrapper, - // duoWrappers.Mozart.M19 as DualClassWrapper, - ...VivaldiWrappers - ], - this.option.event - ); + eventUtil.trigger(this.address, DualWrappers, this.option.event); } public async commitPrice() { @@ -106,18 +100,15 @@ export default class ContractService { public async fetchPrice() { await this.fetchKey(); - const dualClassCustodianWrappers = this.createDuoWrappers(); + const duoWrappers = this.createDuoWrappers(); const magiWrapper = this.createMagiWrapper(); - priceUtil.fetchPrice( - this.address, - [ - dualClassCustodianWrappers.Beethoven.Perpetual as DualClassWrapper, - // dualClassCustodianWrappers.Beethoven.M19 as DualClassWrapper, - dualClassCustodianWrappers.Mozart.Perpetual as DualClassWrapper - // dualClassCustodianWrappers.Mozart.M19 as DualClassWrapper - ], - magiWrapper - ); + const DualWrappers: DualClassWrapper[] = []; + for (const type in duoWrappers) + if (type !== WrapperConstants.VIVALDI) + for (const tenor in duoWrappers[type]) + DualWrappers.push(duoWrappers[type][tenor] as DualClassWrapper); + + priceUtil.fetchPrice(this.address, DualWrappers, magiWrapper); global.setInterval(() => dbUtil.insertHeartbeat(), 30000); } @@ -195,7 +186,9 @@ export default class ContractService { } }; try { - kovanManagerAccount = require('../static/kovanManagerAccount.json'); + kovanManagerAccount = require(`../static/${ + option.live ? 'live' : 'kovan' + }ManagerAccount.json`); } catch (error) { console.log(error); } @@ -208,17 +201,15 @@ export default class ContractService { const account = kovanManagerAccount.Beethoven.operator.address; const type = this.option.contractType; const tenor = this.option.tenor; + if ( - ![ - WrapperConstants.BEETHOVEN, - WrapperConstants.MOZART, - WrapperConstants.VIVALDI - ].includes(type) || - ![WrapperConstants.TENOR_PPT].includes(tenor) + !this.web3Wrapper.contractAddresses.Custodians[type] || + !this.web3Wrapper.contractAddresses.Custodians[type][tenor] ) { util.logDebug('no contract type or tenor specified'); return; } + const custodianContract = this.createDuoWrappers(); const contractWrapper: DualClassWrapper | VivaldiWrapper = custodianContract[type][tenor]; if (option.contractType === WrapperConstants.VIVALDI) { @@ -249,20 +240,10 @@ export default class ContractService { const duoWrappers = this.createDuoWrappers(); const magiWrapper = this.createMagiWrapper(); const esplanadeWrapper = this.createEsplanadeWrapper(); - const VivaldiWrappers = []; - for (const tenor in duoWrappers.Vivaldi) VivaldiWrappers.push(duoWrappers.Vivaldi[tenor]); - eventUtil.fetch( - [ - duoWrappers.Beethoven.Perpetual, - // duoWrappers.Beethoven.M19, - duoWrappers.Mozart.Perpetual, - // duoWrappers.Mozart.M19, - magiWrapper, - esplanadeWrapper, - ...VivaldiWrappers - ], - this.option.force - ); + const DualWrappers = []; + for (const type in duoWrappers) + for (const tenor in duoWrappers[type]) DualWrappers.push(duoWrappers[type][tenor]); + eventUtil.fetch([magiWrapper, esplanadeWrapper, ...DualWrappers], this.option.force); } } diff --git a/src/services/__snapshots__/ContractService.test.ts.snap b/src/services/__snapshots__/ContractService.test.ts.snap index aa703b9..4837ce9 100644 --- a/src/services/__snapshots__/ContractService.test.ts.snap +++ b/src/services/__snapshots__/ContractService.test.ts.snap @@ -71,6 +71,11 @@ Object { "contract": "dualClassWrapper", }, }, + "Vivaldi": Object { + "100C-3H": Object { + "contract": "VivaldiWrapper", + }, + }, } `; @@ -409,14 +414,14 @@ exports[`fetchEvent 1`] = ` Array [ Array [ Array [ - "BTV-PPT", - "MZT-PPT", Object { "contract": "MagiWrapper", }, Object { "contract": "EsplanadeWrapper", }, + "BTV-PPT", + "MZT-PPT", "VVD-tenor", ], false, @@ -518,7 +523,19 @@ Array [ ] `; -exports[`startCustodian, vivaldi 1`] = `Array []`; +exports[`startCustodian, vivaldi 1`] = ` +Array [ + Array [ + "account", + "0x2C4bD22588af822a95Fb9D7e972A1F1C4aE28F13", + "0x9f49bb024EB176d227d4b85A58730a5dDeEF529D", + "0x0d729B3C11b3E6Bf5792d36f640f3Be6f187Dd67", + 1, + true, + true, + ], +] +`; exports[`trigger 1`] = ` Array [ @@ -531,6 +548,9 @@ Array [ Object { "contract": "dualClassWrapper", }, + Object { + "contract": "VivaldiWrapper", + }, ], "event", ],