Skip to content

Commit 6600b6d

Browse files
committed
feat: add role and delegate getters
1 parent 8719d53 commit 6600b6d

File tree

4 files changed

+318
-63
lines changed

4 files changed

+318
-63
lines changed

src/PolymathBase.ts

Lines changed: 153 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,26 @@ import {
1515
ModuleType,
1616
BigNumber,
1717
isERC20DividendCheckpoint,
18+
BlacklistTransferManager,
19+
LockUpTransferManager,
20+
VestingEscrowWallet,
21+
RestrictedPartialSaleTransferManager,
22+
Perm,
1823
} from '@polymathnetwork/contract-wrappers';
1924
import { range, flatten, includes } from 'lodash';
2025
import P from 'bluebird';
2126
import semver from 'semver';
2227
import { PolymathError } from './PolymathError';
23-
import { ErrorCode, DividendType } from './types';
28+
import { ErrorCode, DividendType, Module, Role, SecurityTokenRole } from './types';
29+
30+
interface GetModuleAddressesByNameParams {
31+
symbol: string;
32+
moduleName: ModuleName;
33+
}
34+
35+
interface GetModuleAddressesByNameOpts {
36+
unarchived: boolean;
37+
}
2438

2539
interface GetAttachedModulesParams {
2640
symbol: string;
@@ -55,6 +69,18 @@ interface GetAttachedVolumeRestrictionTransferManagersParams extends GetAttached
5569
moduleName: ModuleName.VolumeRestrictionTM;
5670
}
5771

72+
interface GetAttachedBlacklistTransferManagersParams extends GetAttachedModulesParams {
73+
moduleName: ModuleName.BlacklistTransferManager;
74+
}
75+
76+
interface GetAttachedLockUpTransferManagersParams extends GetAttachedModulesParams {
77+
moduleName: ModuleName.LockUpTransferManager;
78+
}
79+
80+
interface GetAttachedRestrictedPartialSaleTransferManagersParams extends GetAttachedModulesParams {
81+
moduleName: ModuleName.RestrictedPartialSaleTM;
82+
}
83+
5884
interface GetAttachedCappedStosParams extends GetAttachedModulesParams {
5985
moduleName: ModuleName.CappedSTO;
6086
}
@@ -71,6 +97,10 @@ interface GetAttachedEtherDividendCheckpointsParams extends GetAttachedModulesPa
7197
moduleName: ModuleName.EtherDividendCheckpoint;
7298
}
7399

100+
interface GetAttachedVestingEscrowWalletsParams extends GetAttachedModulesParams {
101+
moduleName: ModuleName.VestingEscrowWallet;
102+
}
103+
74104
interface GetAttachedModules {
75105
(params: GetAttachedGeneralPermissionManagersParams, opts?: GetAttachedModulesOpts): Promise<
76106
GeneralPermissionManager[]
@@ -91,6 +121,16 @@ interface GetAttachedModules {
91121
params: GetAttachedVolumeRestrictionTransferManagersParams,
92122
opts?: GetAttachedModulesOpts
93123
): Promise<VolumeRestrictionTransferManager[]>;
124+
(params: GetAttachedBlacklistTransferManagersParams, opts?: GetAttachedModulesOpts): Promise<
125+
BlacklistTransferManager[]
126+
>;
127+
(params: GetAttachedLockUpTransferManagersParams, opts?: GetAttachedModulesOpts): Promise<
128+
LockUpTransferManager[]
129+
>;
130+
(
131+
params: GetAttachedRestrictedPartialSaleTransferManagersParams,
132+
opts?: GetAttachedModulesOpts
133+
): Promise<RestrictedPartialSaleTransferManager[]>;
94134
(params: GetAttachedCappedStosParams, opts?: GetAttachedModulesOpts): Promise<CappedSTO[]>;
95135
(params: GetAttachedUSDTieredStosParams, opts?: GetAttachedModulesOpts): Promise<USDTieredSTO[]>;
96136
(params: GetAttachedErc20DividendCheckpointsParams, opts?: GetAttachedModulesOpts): Promise<
@@ -99,6 +139,10 @@ interface GetAttachedModules {
99139
(params: GetAttachedEtherDividendCheckpointsParams, opts?: GetAttachedModulesOpts): Promise<
100140
EtherDividendCheckpoint[]
101141
>;
142+
(params: GetAttachedVestingEscrowWalletsParams, opts?: GetAttachedModulesOpts): Promise<
143+
VestingEscrowWallet[]
144+
>;
145+
(params: GetAttachedModulesParams, opts?: GetAttachedModulesOpts): Promise<Module[]>;
102146
}
103147

104148
interface GetModuleFactoryAddressArgs {
@@ -160,12 +204,11 @@ export class PolymathBase extends PolymathAPI {
160204
[ModuleName.BlacklistTransferManager]: ModuleType.TransferManager,
161205
[ModuleName.LockUpTransferManager]: ModuleType.TransferManager,
162206
[ModuleName.VolumeRestrictionTM]: ModuleType.TransferManager,
207+
[ModuleName.RestrictedPartialSaleTM]: ModuleType.TransferManager,
163208
[ModuleName.ERC20DividendCheckpoint]: ModuleType.Dividends,
164209
[ModuleName.EtherDividendCheckpoint]: ModuleType.Dividends,
165210
[ModuleName.GeneralPermissionManager]: ModuleType.PermissionManager,
166211
[ModuleName.VestingEscrowWallet]: ModuleType.Wallet,
167-
[ModuleName.BlacklistTransferManager]: ModuleType.TransferManager,
168-
[ModuleName.RestrictedPartialSaleTM]: ModuleType.TransferManager,
169212
};
170213

171214
const availableModules = await this.moduleRegistry.getModulesByTypeAndToken({
@@ -200,11 +243,11 @@ export class PolymathBase extends PolymathAPI {
200243
});
201244
};
202245

203-
public getAttachedModules: GetAttachedModules = async (
204-
{ symbol, moduleName }: GetAttachedModulesParams,
205-
opts?: GetAttachedModulesOpts
206-
): Promise<any[]> => {
207-
const { tokenFactory, moduleFactory } = this;
246+
public getModuleAddressesByName = async (
247+
{ symbol, moduleName }: GetModuleAddressesByNameParams,
248+
opts?: GetModuleAddressesByNameOpts
249+
) => {
250+
const { tokenFactory } = this;
208251

209252
const securityToken = await tokenFactory.getSecurityTokenInstanceFromTicker(symbol);
210253

@@ -223,13 +266,24 @@ export class PolymathBase extends PolymathAPI {
223266
filteredModuleAddresses = moduleAddresses;
224267
}
225268

269+
return filteredModuleAddresses;
270+
};
271+
272+
public getAttachedModules: GetAttachedModules = async (
273+
{ symbol, moduleName }: GetAttachedModulesParams,
274+
opts?: GetAttachedModulesOpts
275+
): Promise<any[]> => {
276+
const { moduleFactory } = this;
277+
278+
const moduleAddresses = await this.getModuleAddressesByName({ moduleName, symbol });
279+
226280
const { getModuleInstance } = moduleFactory;
227281

228282
// This has to be done this way because of typescript limitations
229283
let wrappedModules;
230284
switch (moduleName) {
231285
case ModuleName.GeneralPermissionManager: {
232-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
286+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
233287
getModuleInstance({
234288
address: moduleAddress,
235289
name: moduleName,
@@ -239,7 +293,7 @@ export class PolymathBase extends PolymathAPI {
239293
return wrappedModules;
240294
}
241295
case ModuleName.CountTransferManager: {
242-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
296+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
243297
getModuleInstance({
244298
address: moduleAddress,
245299
name: moduleName,
@@ -249,7 +303,7 @@ export class PolymathBase extends PolymathAPI {
249303
return wrappedModules;
250304
}
251305
case ModuleName.GeneralTransferManager: {
252-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
306+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
253307
getModuleInstance({
254308
address: moduleAddress,
255309
name: moduleName,
@@ -259,7 +313,7 @@ export class PolymathBase extends PolymathAPI {
259313
return wrappedModules;
260314
}
261315
case ModuleName.ManualApprovalTransferManager: {
262-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
316+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
263317
getModuleInstance({
264318
address: moduleAddress,
265319
name: moduleName,
@@ -269,7 +323,7 @@ export class PolymathBase extends PolymathAPI {
269323
return wrappedModules;
270324
}
271325
case ModuleName.PercentageTransferManager: {
272-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
326+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
273327
getModuleInstance({
274328
address: moduleAddress,
275329
name: moduleName,
@@ -279,7 +333,37 @@ export class PolymathBase extends PolymathAPI {
279333
return wrappedModules;
280334
}
281335
case ModuleName.VolumeRestrictionTM: {
282-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
336+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
337+
getModuleInstance({
338+
address: moduleAddress,
339+
name: moduleName,
340+
})
341+
);
342+
343+
return wrappedModules;
344+
}
345+
case ModuleName.BlacklistTransferManager: {
346+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
347+
getModuleInstance({
348+
address: moduleAddress,
349+
name: moduleName,
350+
})
351+
);
352+
353+
return wrappedModules;
354+
}
355+
case ModuleName.LockUpTransferManager: {
356+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
357+
getModuleInstance({
358+
address: moduleAddress,
359+
name: moduleName,
360+
})
361+
);
362+
363+
return wrappedModules;
364+
}
365+
case ModuleName.RestrictedPartialSaleTM: {
366+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
283367
getModuleInstance({
284368
address: moduleAddress,
285369
name: moduleName,
@@ -289,7 +373,7 @@ export class PolymathBase extends PolymathAPI {
289373
return wrappedModules;
290374
}
291375
case ModuleName.CappedSTO: {
292-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
376+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
293377
getModuleInstance({
294378
address: moduleAddress,
295379
name: moduleName,
@@ -299,7 +383,7 @@ export class PolymathBase extends PolymathAPI {
299383
return wrappedModules;
300384
}
301385
case ModuleName.UsdTieredSTO: {
302-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
386+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
303387
getModuleInstance({
304388
address: moduleAddress,
305389
name: moduleName,
@@ -309,7 +393,7 @@ export class PolymathBase extends PolymathAPI {
309393
return wrappedModules;
310394
}
311395
case ModuleName.ERC20DividendCheckpoint: {
312-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
396+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
313397
getModuleInstance({
314398
address: moduleAddress,
315399
name: moduleName,
@@ -319,7 +403,17 @@ export class PolymathBase extends PolymathAPI {
319403
return wrappedModules;
320404
}
321405
case ModuleName.EtherDividendCheckpoint: {
322-
wrappedModules = await P.map(filteredModuleAddresses, moduleAddress =>
406+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
407+
getModuleInstance({
408+
address: moduleAddress,
409+
name: moduleName,
410+
})
411+
);
412+
413+
return wrappedModules;
414+
}
415+
case ModuleName.VestingEscrowWallet: {
416+
wrappedModules = await P.map(moduleAddresses, moduleAddress =>
323417
getModuleInstance({
324418
address: moduleAddress,
325419
name: moduleName,
@@ -560,4 +654,45 @@ export class PolymathBase extends PolymathAPI {
560654

561655
return dividends;
562656
};
657+
658+
public roleToPermission = async ({ role }: { role: SecurityTokenRole }) => {
659+
let moduleName: ModuleName;
660+
let permission: Perm;
661+
662+
if (role === SecurityTokenRole.ShareholdersAdministrator) {
663+
moduleName = ModuleName.GeneralTransferManager;
664+
permission = Perm.Admin;
665+
} else if (role === SecurityTokenRole.PermissionsAdministrator) {
666+
moduleName = ModuleName.GeneralPermissionManager;
667+
permission = Perm.Admin;
668+
} else if (
669+
[
670+
SecurityTokenRole.Erc20DividendsAdministrator,
671+
SecurityTokenRole.Erc20DividendsOperator,
672+
].includes(role)
673+
) {
674+
moduleName = ModuleName.GeneralTransferManager;
675+
permission =
676+
role === SecurityTokenRole.Erc20DividendsAdministrator ? Perm.Admin : Perm.Operator;
677+
} else if (
678+
[
679+
SecurityTokenRole.EtherDividendsAdministrator,
680+
SecurityTokenRole.EtherDividendsOperator,
681+
].includes(role)
682+
) {
683+
moduleName = ModuleName.ERC20DividendCheckpoint;
684+
permission =
685+
role === SecurityTokenRole.EtherDividendsAdministrator ? Perm.Admin : Perm.Operator;
686+
} else {
687+
throw new PolymathError({
688+
code: ErrorCode.FatalError,
689+
message: `Role ${role} not supported`,
690+
});
691+
}
692+
693+
return {
694+
permission,
695+
moduleName,
696+
};
697+
};
563698
}

0 commit comments

Comments
 (0)