From 48e84f0e74fdc6c8133383181097ed98f0de3793 Mon Sep 17 00:00:00 2001 From: WYANG008 Date: Wed, 6 Mar 2019 14:10:45 +0800 Subject: [PATCH 1/2] update --- src/services/ContractService.ts | 50 ++++++++++--------- .../ContractService.test.ts.snap | 22 +++++++- 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/services/ContractService.ts b/src/services/ContractService.ts index 9977491..48dd0b6 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() { @@ -214,7 +218,7 @@ export default class ContractService { WrapperConstants.MOZART, WrapperConstants.VIVALDI ].includes(type) || - ![WrapperConstants.TENOR_PPT].includes(tenor) + ![WrapperConstants.TENOR_PPT, '100C-3H'].includes(tenor) ) { util.logDebug('no contract type or tenor specified'); return; diff --git a/src/services/__snapshots__/ContractService.test.ts.snap b/src/services/__snapshots__/ContractService.test.ts.snap index aa703b9..a782189 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", + }, + }, } `; @@ -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", ], From 479d18e211b37f655abfd19d21e64e2076abe86a Mon Sep 17 00:00:00 2001 From: WYANG008 Date: Wed, 6 Mar 2019 14:43:35 +0800 Subject: [PATCH 2/2] update --- src/services/ContractService.ts | 69 +++++++------------ .../ContractService.test.ts.snap | 4 +- 2 files changed, 25 insertions(+), 48 deletions(-) diff --git a/src/services/ContractService.ts b/src/services/ContractService.ts index 48dd0b6..0ae8aa3 100644 --- a/src/services/ContractService.ts +++ b/src/services/ContractService.ts @@ -84,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() { @@ -110,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); } @@ -199,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); } @@ -212,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, '100C-3H'].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) { @@ -253,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 a782189..4837ce9 100644 --- a/src/services/__snapshots__/ContractService.test.ts.snap +++ b/src/services/__snapshots__/ContractService.test.ts.snap @@ -414,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,