Skip to content
This repository was archived by the owner on Jul 6, 2022. It is now read-only.

Commit 74d1981

Browse files
author
Victor Wiebe
committed
feat: 🎸 add initial BlacklistTM module wrapper to project
1 parent 74778b1 commit 74d1981

File tree

7 files changed

+239
-7
lines changed

7 files changed

+239
-7
lines changed

‎src/PolymathAPI.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
CountTransferManager,
2121
PercentageTransferManager,
2222
LockUpTransferManager,
23+
BlacklistTransferManager,
2324
EtherDividendCheckpoint,
2425
VolumeRestrictionTransferManager,
2526
PolyTokenFaucet,
@@ -171,6 +172,7 @@ export class PolymathAPI {
171172
ManualApprovalTransferManager.abi,
172173
PercentageTransferManager.abi,
173174
LockUpTransferManager.abi,
175+
BlacklistTransferManager.abi,
174176
VolumeRestrictionTransferManager.abi,
175177
// Tokens
176178
ERC20Detailed.abi,
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import {
2+
BigNumber,
3+
ContractAbi,
4+
BlacklistTransferManager,
5+
BlacklistTransferManagerContract,
6+
BlacklistTransferManagerEventArgs,
7+
BlacklistTransferManagerEvents,
8+
BlacklistTransferManagerPauseEventArgs,
9+
BlacklistTransferManagerUnpauseEventArgs,
10+
BlacklistTransferManagerAddBlacklistTypeEventArgs,
11+
BlacklistTransferManagerModifyBlacklistTypeEventArgs,
12+
BlacklistTransferManagerDeleteBlacklistTypeEventArgs,
13+
BlacklistTransferManagerAddInvestorToBlacklistEventArgs,
14+
BlacklistTransferManagerDeleteInvestorFromBlacklistEventArgs,
15+
LogWithDecodedArgs,
16+
Web3Wrapper,
17+
} from '@polymathnetwork/abi-wrappers';
18+
import { schemas } from '@0x/json-schemas';
19+
import assert from '../../../utils/assert';
20+
import ModuleWrapper from '../module_wrapper';
21+
import ContractFactory from '../../../factories/contractFactory';
22+
import {
23+
EventCallback,
24+
GetLogs,
25+
GetLogsAsyncParams,
26+
Subscribe,
27+
SubscribeAsyncParams, TransferResult,
28+
TxParams,
29+
} from '../../../types';
30+
import {parseTransferResult, valueToWei} from '../../../utils/convert';
31+
32+
interface PauseSubscribeAsyncParams extends SubscribeAsyncParams {
33+
eventName: BlacklistTransferManagerEvents.Pause;
34+
callback: EventCallback<BlacklistTransferManagerPauseEventArgs>;
35+
}
36+
37+
interface GetPauseLogsAsyncParams extends GetLogsAsyncParams {
38+
eventName: BlacklistTransferManagerEvents.Pause;
39+
}
40+
41+
interface UnpauseSubscribeAsyncParams extends SubscribeAsyncParams {
42+
eventName: BlacklistTransferManagerEvents.Unpause;
43+
callback: EventCallback<BlacklistTransferManagerUnpauseEventArgs>;
44+
}
45+
46+
interface GetUnpauseLogsAsyncParams extends GetLogsAsyncParams {
47+
eventName: BlacklistTransferManagerEvents.Unpause;
48+
}
49+
50+
interface BlacklistTransferManagerSubscribeAsyncParams extends Subscribe {
51+
(params: PauseSubscribeAsyncParams): Promise<string>;
52+
(params: UnpauseSubscribeAsyncParams): Promise<string>;
53+
}
54+
55+
interface GetBlacklistTransferManagerLogsAsyncParams extends GetLogs {
56+
(params: GetPauseLogsAsyncParams): Promise<LogWithDecodedArgs<BlacklistTransferManagerPauseEventArgs>[]>;
57+
(params: GetUnpauseLogsAsyncParams): Promise<LogWithDecodedArgs<BlacklistTransferManagerUnpauseEventArgs>[]>;
58+
}
59+
60+
interface VerifyTransferParams {
61+
from: string;
62+
to: string;
63+
amount: BigNumber;
64+
data: string;
65+
}
66+
67+
// Return Types
68+
69+
interface VerifyTransfer {
70+
transferResult: TransferResult;
71+
address: string;
72+
}
73+
74+
/**
75+
* This class includes the functionality related to interacting with the Blacklist Transfer Manager contract.
76+
*/
77+
export default class BlacklistTransferManagerWrapper extends ModuleWrapper {
78+
public abi: ContractAbi = BlacklistTransferManager.abi;
79+
80+
protected contract: Promise<BlacklistTransferManagerContract>;
81+
82+
/**
83+
* Instantiate BlacklistTransferManagerWrapper
84+
* @param web3Wrapper Web3Wrapper instance to use
85+
* @param contract
86+
* @param contractFactory
87+
*/
88+
public constructor(
89+
web3Wrapper: Web3Wrapper,
90+
contract: Promise<BlacklistTransferManagerContract>,
91+
contractFactory: ContractFactory,
92+
) {
93+
super(web3Wrapper, contract, contractFactory);
94+
this.contract = contract;
95+
}
96+
97+
public unpause = async (params: TxParams) => {
98+
assert.assert(await this.paused(), 'Controller not currently paused');
99+
assert.assert(await this.isCallerTheSecurityTokenOwner(params.txData), 'Sender is not owner');
100+
return (await this.contract).unpause.sendTransactionAsync(params.txData, params.safetyFactor);
101+
};
102+
103+
public paused = async () => {
104+
return (await this.contract).paused.callAsync();
105+
};
106+
107+
public pause = async (params: TxParams) => {
108+
assert.assert(!(await this.paused()), 'Controller currently paused');
109+
assert.assert(await this.isCallerTheSecurityTokenOwner(params.txData), 'Sender is not owner');
110+
return (await this.contract).pause.sendTransactionAsync(params.txData, params.safetyFactor);
111+
};
112+
113+
/*
114+
* verifyTransfer
115+
*/
116+
public verifyTransfer = async (params: VerifyTransferParams): Promise<VerifyTransfer> => {
117+
assert.isETHAddressHex('from', params.from);
118+
assert.isETHAddressHex('to', params.to);
119+
const decimals = await (await this.securityTokenContract()).decimals.callAsync();
120+
const result = await (await this.contract).verifyTransfer.callAsync(
121+
params.from,
122+
params.to,
123+
valueToWei(params.amount, decimals),
124+
params.data,
125+
);
126+
const transferResult = parseTransferResult(result[0]);
127+
return {
128+
transferResult,
129+
address: result[1],
130+
};
131+
};
132+
133+
/**
134+
* Subscribe to an event type emitted by the contract.
135+
* @return Subscription token used later to unsubscribe
136+
*/
137+
public subscribeAsync: BlacklistTransferManagerSubscribeAsyncParams = async <
138+
ArgsType extends BlacklistTransferManagerEventArgs
139+
>(
140+
params: SubscribeAsyncParams,
141+
): Promise<string> => {
142+
assert.doesBelongToStringEnum('eventName', params.eventName, BlacklistTransferManagerEvents);
143+
assert.doesConformToSchema('indexFilterValues', params.indexFilterValues, schemas.indexFilterValuesSchema);
144+
assert.isFunction('callback', params.callback);
145+
const normalizedContractAddress = (await this.contract).address.toLowerCase();
146+
const subscriptionToken = this.subscribeInternal<ArgsType>(
147+
normalizedContractAddress,
148+
params.eventName,
149+
params.indexFilterValues,
150+
BlacklistTransferManager.abi,
151+
params.callback,
152+
params.isVerbose,
153+
);
154+
return subscriptionToken;
155+
};
156+
157+
/**
158+
* Gets historical logs without creating a subscription
159+
* @return Array of logs that match the parameters
160+
*/
161+
public getLogsAsync: GetBlacklistTransferManagerLogsAsyncParams = async <
162+
ArgsType extends BlacklistTransferManagerEventArgs
163+
>(
164+
params: GetLogsAsyncParams,
165+
): Promise<LogWithDecodedArgs<ArgsType>[]> => {
166+
assert.doesBelongToStringEnum('eventName', params.eventName, BlacklistTransferManagerEvents);
167+
assert.doesConformToSchema('blockRange', params.blockRange, schemas.blockRangeSchema);
168+
assert.doesConformToSchema('indexFilterValues', params.indexFilterValues, schemas.indexFilterValuesSchema);
169+
const normalizedContractAddress = (await this.contract).address.toLowerCase();
170+
const logs = await this.getLogsAsyncInternal<ArgsType>(
171+
normalizedContractAddress,
172+
params.eventName,
173+
params.blockRange,
174+
params.indexFilterValues,
175+
BlacklistTransferManager.abi,
176+
);
177+
return logs;
178+
};
179+
}

‎src/contract_wrappers/tokens/security_token_wrapper.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,8 @@ interface AddNoDataModuleParams extends AddModuleParams {
747747
| ModuleName.GeneralTransferManager
748748
| ModuleName.ManualApprovalTransferManager
749749
| ModuleName.VolumeRestrictionTM
750-
| ModuleName.LockUpTransferManager;
750+
| ModuleName.LockUpTransferManager
751+
| ModuleName.BlacklistTransferManager;
751752
data?: undefined;
752753
}
753754

‎src/factories/contractFactory.ts‎

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
ManualApprovalTransferManagerContract,
1818
PercentageTransferManagerContract,
1919
LockUpTransferManagerContract,
20+
BlacklistTransferManagerContract,
2021
VolumeRestrictionTMContract,
2122
FeatureRegistryContract,
2223
ModuleRegistryContract,
@@ -167,7 +168,7 @@ export default class ContractFactory {
167168
);
168169
this.abiArray.forEach(
169170
(abi): void => {
170-
171+
171172
contract.addABItoDecoder(abi);
172173
},
173174
);
@@ -267,18 +268,36 @@ export default class ContractFactory {
267268
assert.isETHAddressHex('address', address);
268269
const contract = new PercentageTransferManagerContract(address, this.provider, this.contractDefaults);
269270
this.abiArray.forEach(
270-
(abi): void => {
271-
contract.addABItoDecoder(abi);
272-
},
271+
(abi): void => {
272+
contract.addABItoDecoder(abi);
273+
},
273274
);
274275
return contract;
275276
}
276277

278+
277279
public async getLockUpTransferManagerContract(address: string): Promise<LockUpTransferManagerContract> {
278280
assert.isETHAddressHex('address', address);
279-
return new LockUpTransferManagerContract(address, this.provider, this.contractDefaults);
281+
const contract = new LockUpTransferManagerContract(address, this.provider, this.contractDefaults);
282+
this.abiArray.forEach(
283+
(abi): void => {
284+
contract.addABItoDecoder(abi);
285+
},
286+
);
287+
return contract;
280288
}
281289

290+
public async getBlacklistTransferManagerContract(address: string): Promise<BlacklistTransferManagerContract> {
291+
assert.isETHAddressHex('address', address);
292+
const contract = new BlacklistTransferManagerContract(address, this.provider, this.contractDefaults);
293+
this.abiArray.forEach(
294+
(abi): void => {
295+
contract.addABItoDecoder(abi);
296+
},
297+
);
298+
return contract;
299+
}
300+
282301
public async getVolumeRestrictionTMContract(address: string): Promise<VolumeRestrictionTMContract> {
283302
assert.isETHAddressHex('address', address);
284303
const contract = new VolumeRestrictionTMContract(address, this.provider, this.contractDefaults);

‎src/factories/moduleWrapperFactory.ts‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import CountTransferManagerWrapper from '../contract_wrappers/modules/transfer_m
33
import ManualApprovalTransferManagerWrapper from '../contract_wrappers/modules/transfer_manager/manual_approval_transfer_manager_wrapper';
44
import PercentageTransferManagerWrapper from '../contract_wrappers/modules/transfer_manager/percentage_transfer_manager_wrapper';
55
import LockUpTransferManagerWrapper from '../contract_wrappers/modules/transfer_manager/lock_up_transfer_manager_wrapper';
6+
import BlacklistTransferManagerWrapper from '../contract_wrappers/modules/transfer_manager/blacklist_transfer_manager_wrapper';
67
import VolumeRestrictionTransferManagerWrapper from '../contract_wrappers/modules/transfer_manager/volume_restriction_transfer_manager_wrapper';
78
import ERC20DividendCheckpointWrapper from '../contract_wrappers/modules/checkpoint/erc20_dividend_checkpoint_wrapper';
89
import EtherDividendCheckpointWrapper from '../contract_wrappers/modules/checkpoint/ether_dividend_checkpoint_wrapper';
@@ -44,6 +45,10 @@ interface GetLockUpTransferManager extends GetModuleParams {
4445
name: ModuleName.LockUpTransferManager;
4546
}
4647

48+
interface GetBlacklistTransferManager extends GetModuleParams {
49+
name: ModuleName.BlacklistTransferManager;
50+
}
51+
4752
interface GetVolumeRestrictionTransferManager extends GetModuleParams {
4853
name: ModuleName.VolumeRestrictionTM;
4954
}
@@ -71,6 +76,7 @@ interface GetModuleInstance {
7176
(params: GetManualApprovalTransferManager): Promise<ManualApprovalTransferManagerWrapper>;
7277
(params: GetPercentageTransferManager): Promise<PercentageTransferManagerWrapper>;
7378
(params: GetLockUpTransferManager): Promise<LockUpTransferManagerWrapper>;
79+
(params: GetBlacklistTransferManager): Promise<BlacklistTransferManagerWrapper>;
7480
(params: GetVolumeRestrictionTransferManager): Promise<VolumeRestrictionTransferManagerWrapper>;
7581
(params: GetCappedSTO): Promise<CappedSTOWrapper>;
7682
(params: GetUSDTieredSTO): Promise<USDTieredSTOWrapper>;
@@ -138,6 +144,12 @@ export default class ModuleWrapperFactory {
138144
this.contractFactory.getLockUpTransferManagerContract(params.address),
139145
this.contractFactory,
140146
);
147+
case ModuleName.BlacklistTransferManager:
148+
return new BlacklistTransferManagerWrapper(
149+
this.web3Wrapper,
150+
this.contractFactory.getBlacklistTransferManagerContract(params.address),
151+
this.contractFactory,
152+
);
141153
case ModuleName.VolumeRestrictionTM:
142154
return new VolumeRestrictionTransferManagerWrapper(
143155
this.web3Wrapper,

‎src/index.ts‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ export {
3737
export {
3838
default as LockUpTransferManager,
3939
} from './contract_wrappers/modules/transfer_manager/lock_up_transfer_manager_wrapper';
40+
export {
41+
default as BlacklistTransferManager,
42+
} from './contract_wrappers/modules/transfer_manager/blacklist_transfer_manager_wrapper';
4043
export {
4144
default as VolumeRestrictionTransferManager,
4245
} from './contract_wrappers/modules/transfer_manager/volume_restriction_transfer_manager_wrapper';
@@ -209,6 +212,16 @@ export {
209212
LockUpTransferManagerRemoveLockUpTypeEventArgs,
210213
LockUpTransferManagerPauseEventArgs,
211214
LockUpTransferManagerUnpauseEventArgs,
215+
BlacklistTransferManagerContract,
216+
BlacklistTransferManagerEventArgs,
217+
BlacklistTransferManagerEvents,
218+
BlacklistTransferManagerAddBlacklistTypeEventArgs,
219+
BlacklistTransferManagerModifyBlacklistTypeEventArgs,
220+
BlacklistTransferManagerDeleteBlacklistTypeEventArgs,
221+
BlacklistTransferManagerAddInvestorToBlacklistEventArgs,
222+
BlacklistTransferManagerDeleteInvestorFromBlacklistEventArgs,
223+
BlacklistTransferManagerPauseEventArgs,
224+
BlacklistTransferManagerUnpauseEventArgs,
212225
CountTransferManagerContract,
213226
CountTransferManagerEventArgs,
214227
CountTransferManagerEvents,

‎src/types.ts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ import {
6262
LockUpTransferManagerEventArgs,
6363
LockUpTransferManagerContract,
6464
LockUpTransferManagerEvents,
65+
BlacklistTransferManagerEventArgs,
66+
BlacklistTransferManagerContract,
67+
BlacklistTransferManagerEvents,
6568
PolyTokenFaucetContract,
6669
TxData,
6770
BigNumber,
@@ -161,6 +164,7 @@ export enum ModuleName {
161164
ManualApprovalTransferManager = 'ManualApprovalTransferManager',
162165
PercentageTransferManager = 'PercentageTransferManager',
163166
LockUpTransferManager = 'LockUpTransferManager',
167+
BlacklistTransferManager = 'BlacklistTransferManager',
164168
VolumeRestrictionTM = 'VolumeRestrictionTM',
165169
CappedSTO = 'CappedSTO',
166170
UsdTieredSTO = 'USDTieredSTO',
@@ -233,7 +237,7 @@ export type ContractEventArgs =
233237
| PercentageTransferManagerEventArgs
234238
| LockUpTransferManagerEventArgs
235239
| VolumeRestrictionTMEventArgs
236-
| LockUpTransferManagerEventArgs;
240+
| BlacklistTransferManagerEventArgs;
237241

238242
export type ContractEvents =
239243
| PolyTokenEvents
@@ -259,6 +263,7 @@ export type ContractEvents =
259263
| CountTransferManagerEvents
260264
| PercentageTransferManagerEvents
261265
| LockUpTransferManagerEvents
266+
| BlacklistTransferManagerEvents
262267
| VolumeRestrictionTMEvents;
263268

264269
/**
@@ -312,6 +317,7 @@ export type GenericModuleContract =
312317
| CountTransferManagerContract
313318
| PercentageTransferManagerContract
314319
| LockUpTransferManagerContract
320+
| BlacklistTransferManagerContract
315321
| VolumeRestrictionTMContract;
316322

317323
export type STOBaseContract = STOContract | CappedSTOContract | USDTieredSTOContract;

0 commit comments

Comments
 (0)