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

Commit e6bfc17

Browse files
committed
fix: 🐛 getLogsAsync fixed for 'RegisterTicker' event
ABIs are taken from each contract-wrapper so duplicated events are not present
1 parent 816f224 commit e6bfc17

28 files changed

+166
-342
lines changed

examples/lockUpTransferManager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { RedundantSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
2+
import { BigNumber, LockUpTransferManagerEvents } from '@polymathnetwork/abi-wrappers';
23
import ModuleFactoryWrapper from '../src/contract_wrappers/modules/module_factory_wrapper';
34
import { ApiConstructorParams, PolymathAPI } from '../src/PolymathAPI';
45
import { ModuleName, ModuleType } from '../src';
5-
import { BigNumber, ModuleRegistryEvents, LockUpTransferManagerEvents } from '@polymathnetwork/abi-wrappers';
66

77
// This file acts as a valid sandbox for using a lockup restriction transfer manager module on an unlocked node (like ganache)
88
window.addEventListener('load', async () => {
@@ -27,7 +27,7 @@ window.addEventListener('load', async () => {
2727
const tokenName = prompt('Token Name', '');
2828

2929
// Double check available
30-
await polymathAPI.securityTokenRegistry.isTickerAvailable({
30+
await polymathAPI.securityTokenRegistry.tickerAvailable({
3131
ticker: ticker!,
3232
});
3333
// Get the ticker fee and approve the security token registry to spend
@@ -191,7 +191,7 @@ window.addEventListener('load', async () => {
191191
});
192192
// Example removing lockup from beneficiary 2 and removing lockup type
193193
await lockUpTM.removeLockUpFromUser({ userAddress: randomBeneficiary2, lockupName: thirdLockUpName });
194-
await lockUpTM.removeLockupType({lockupName: thirdLockUpName});
194+
await lockUpTM.removeLockupType({ lockupName: thirdLockUpName });
195195

196196
// Try to transfer 50, it is below lockup and will pass
197197
await tickerSecurityTokenInstance.transfer({ to: randomBeneficiary2, value: new BigNumber(50) });

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
"@0x/subproviders": "^4.1.1",
8585
"@0x/types": "^2.4.0",
8686
"@0x/typescript-typings": "^4.2.3",
87-
"@polymathnetwork/abi-wrappers": "3.0.0-beta.7",
87+
"@polymathnetwork/abi-wrappers": "3.0.0-beta.8",
8888
"@types/semver": "^6.0.1",
8989
"ethereumjs-blockstream": "6.0.0",
9090
"ethereumjs-util": "^6.1.0",

src/PolymathAPI.ts

Lines changed: 42 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,28 @@ import {
44
BigNumber,
55
providerUtils,
66
Provider,
7-
PolymathRegistry,
8-
ISecurityTokenRegistry,
9-
ISecurityToken,
10-
PolyToken,
11-
ModuleRegistry,
12-
CappedSTO,
13-
ModuleFactory,
14-
USDTieredSTO,
15-
FeatureRegistry,
16-
GeneralTransferManager,
17-
GeneralPermissionManager,
18-
ERC20DividendCheckpoint,
19-
ManualApprovalTransferManager,
20-
CountTransferManager,
21-
PercentageTransferManager,
22-
LockUpTransferManager,
23-
EtherDividendCheckpoint,
24-
VolumeRestrictionTransferManager,
25-
PolyTokenFaucet,
26-
Module,
27-
ERC20Detailed,
7+
FeatureRegistryContract,
8+
ModuleRegistryContract,
9+
PolymathRegistryContract,
10+
ISecurityTokenRegistryContract,
11+
ModuleFactoryContract,
12+
ModuleContract,
13+
ERC20DividendCheckpointContract,
14+
EtherDividendCheckpointContract,
15+
GeneralPermissionManagerContract,
16+
CappedSTOContract,
17+
USDTieredSTOContract,
18+
CountTransferManagerContract,
19+
GeneralTransferManagerContract,
20+
ManualApprovalTransferManagerContract,
21+
PercentageTransferManagerContract,
22+
LockUpTransferManagerContract,
23+
ERC20DetailedContract,
24+
PolyTokenContract,
25+
PolyTokenFaucetContract,
26+
ISecurityTokenContract,
27+
VolumeRestrictionTMContract,
2828
} from '@polymathnetwork/abi-wrappers';
29-
import _ from 'lodash';
3029
import PolymathRegistryWrapper from './contract_wrappers/registries/polymath_registry_wrapper';
3130
import SecurityTokenRegistryWrapper from './contract_wrappers/registries/security_token_registry_wrapper';
3231
import PolyTokenWrapper from './contract_wrappers/tokens/poly_token_wrapper';
@@ -137,60 +136,33 @@ export class PolymathAPI {
137136

138137
const abiArray = [
139138
// Registries
140-
FeatureRegistry.abi,
141-
ModuleRegistry.abi.filter(
142-
a =>
143-
!(
144-
a.type === 'function' &&
145-
a.name === 'useModule' &&
146-
_.isEqual(a.inputs, [
147-
{
148-
name: '_moduleFactory',
149-
type: 'address',
150-
},
151-
])
152-
),
153-
),
154-
PolymathRegistry.abi,
155-
ISecurityTokenRegistry.abi.filter(
156-
a =>
157-
!(
158-
a.type === 'event' &&
159-
a.name === 'RegisterTicker' &&
160-
_.isEqual(a.inputs, [
161-
{ indexed: true, name: '_owner', type: 'address' },
162-
{ indexed: false, name: '_ticker', type: 'string' },
163-
{ indexed: false, name: '_name', type: 'string' },
164-
{ indexed: true, name: '_registrationDate', type: 'uint256' },
165-
{ indexed: true, name: '_expiryDate', type: 'uint256' },
166-
{ indexed: false, name: '_fromAdmin', type: 'bool' },
167-
{ indexed: false, name: '_registrationFee', type: 'uint256' },
168-
])
169-
),
170-
),
139+
FeatureRegistryContract.ABI(),
140+
ModuleRegistryContract.ABI(),
141+
PolymathRegistryContract.ABI(),
142+
ISecurityTokenRegistryContract.ABI(),
171143
// Modules
172-
ModuleFactory.abi,
173-
Module.abi,
144+
ModuleFactoryContract.ABI(),
145+
ModuleContract.ABI(),
174146
// Checkpoint
175-
ERC20DividendCheckpoint.abi,
176-
EtherDividendCheckpoint.abi,
147+
ERC20DividendCheckpointContract.ABI(),
148+
EtherDividendCheckpointContract.ABI(),
177149
// Permission
178-
GeneralPermissionManager.abi,
150+
GeneralPermissionManagerContract.ABI(),
179151
// STO
180-
CappedSTO.abi,
181-
USDTieredSTO.abi,
152+
CappedSTOContract.ABI(),
153+
USDTieredSTOContract.ABI(),
182154
// Transfer
183-
CountTransferManager.abi,
184-
GeneralTransferManager.abi,
185-
ManualApprovalTransferManager.abi,
186-
PercentageTransferManager.abi,
187-
LockUpTransferManager.abi,
188-
VolumeRestrictionTransferManager.abi,
155+
CountTransferManagerContract.ABI(),
156+
GeneralTransferManagerContract.ABI(),
157+
ManualApprovalTransferManagerContract.ABI(),
158+
PercentageTransferManagerContract.ABI(),
159+
LockUpTransferManagerContract.ABI(),
160+
VolumeRestrictionTMContract.ABI(),
189161
// Tokens
190-
ERC20Detailed.abi,
191-
PolyToken.abi,
192-
PolyTokenFaucet.abi,
193-
ISecurityToken.abi,
162+
ERC20DetailedContract.ABI(),
163+
PolyTokenContract.ABI(),
164+
PolyTokenFaucetContract.ABI(),
165+
ISecurityTokenContract.ABI(),
194166
];
195167

196168
abiArray.forEach((abi): void => {

src/contract_wrappers/contract_wrapper.ts

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
BaseContract,
66
Web3Wrapper,
77
marshaller,
8-
AbiDecoder,
98
intervalUtils,
109
logUtils,
1110
BlockParamLiteral,
@@ -33,8 +32,6 @@ const SUBSCRIPTION_NOT_FOUND = 'SUBSCRIPTION_NOT_FOUND';
3332
const SUBSCRIPTION_ALREADY_PRESENT = 'SUBSCRIPTION_ALREADY_PRESENT';
3433

3534
export default abstract class ContractWrapper {
36-
public abstract abi: ContractAbi;
37-
3835
protected contract: Promise<BaseContract>;
3936

4037
protected web3Wrapper: Web3Wrapper;
@@ -43,6 +40,13 @@ export default abstract class ContractWrapper {
4340

4441
public abstract subscribeAsync: Subscribe | undefined;
4542

43+
/**
44+
* Returns the contract ABI
45+
*/
46+
public abi = async (): Promise<ContractAbi> => {
47+
return (await this.contract).abi;
48+
};
49+
4650
/**
4751
* Returns the contract address
4852
*/
@@ -64,12 +68,9 @@ export default abstract class ContractWrapper {
6468
*/
6569
public unsubscribeAll = (): void => {
6670
const filterTokens = _.keys(this._filterCallbacks);
67-
_.each(
68-
filterTokens,
69-
(filterToken): void => {
70-
this.unsubscribeInternal(filterToken);
71-
},
72-
);
71+
_.each(filterTokens, (filterToken): void => {
72+
this.unsubscribeInternal(filterToken);
73+
});
7374
};
7475

7576
private _blockAndLogStreamerIfExists: BlockAndLogStreamer<Block, Log> | undefined;
@@ -117,14 +118,14 @@ export default abstract class ContractWrapper {
117118
}
118119
}
119120

120-
protected subscribeInternal<ArgsType extends ContractEventArgs>(
121+
protected async subscribeInternal<ArgsType extends ContractEventArgs>(
121122
address: string,
122123
eventName: ContractEvents,
123124
indexFilterValues: IndexedFilterValues,
124-
abi: ContractAbi,
125125
callback: EventCallback<ArgsType>,
126126
isVerbose: boolean = false,
127-
): string {
127+
): Promise<string> {
128+
const { abi } = await this.contract;
128129
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi);
129130
if (_.isUndefined(this._blockAndLogStreamerIfExists)) {
130131
this._startBlockAndLogStream(isVerbose);
@@ -140,8 +141,8 @@ export default abstract class ContractWrapper {
140141
eventName: ContractEvents,
141142
blockRange: BlockRange,
142143
indexFilterValues: IndexedFilterValues,
143-
abi: ContractAbi,
144144
): Promise<LogWithDecodedArgs<ArgsType>[]> {
145+
const { abi } = await this.contract;
145146
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi, blockRange);
146147
const logs = await this.web3Wrapper.getLogsAsync(filter);
147148
const logsWithDecodedArguments = _.map(logs, this.tryToDecodeLogOrNoopInternal.bind(this));
@@ -151,26 +152,23 @@ export default abstract class ContractWrapper {
151152
protected tryToDecodeLogOrNoopInternal<ArgsType extends ContractEventArgs>(
152153
log: LogEntry,
153154
): LogWithDecodedArgs<ArgsType> | RawLog {
154-
const abiDecoder = new AbiDecoder([this.abi]);
155+
const { abiDecoder } = this.web3Wrapper;
155156
const logWithDecodedArgs = abiDecoder.tryToDecodeLogOrNoop(log);
156157
return logWithDecodedArgs;
157158
}
158159

159160
private _onLogStateChanged<ArgsType extends ContractEventArgs>(isRemoved: boolean, rawLog: Log): void {
160161
const log: LogEntry = marshaller.unmarshalLog(rawLog as RawLogEntry);
161-
_.forEach(
162-
this._filters,
163-
(filter: FilterObject, filterToken: string): void => {
164-
if (filterUtils.matchesFilter(log, filter)) {
165-
const decodedLog = this.tryToDecodeLogOrNoopInternal(log) as LogWithDecodedArgs<ArgsType>;
166-
const logEvent = {
167-
log: decodedLog,
168-
isRemoved,
169-
};
170-
this._filterCallbacks[filterToken](null, logEvent);
171-
}
172-
},
173-
);
162+
_.forEach(this._filters, (filter: FilterObject, filterToken: string): void => {
163+
if (filterUtils.matchesFilter(log, filter)) {
164+
const decodedLog = this.tryToDecodeLogOrNoopInternal(log) as LogWithDecodedArgs<ArgsType>;
165+
const logEvent = {
166+
log: decodedLog,
167+
isRemoved,
168+
};
169+
this._filterCallbacks[filterToken](null, logEvent);
170+
}
171+
});
174172
}
175173

176174
private _startBlockAndLogStream(isVerbose: boolean): void {

src/contract_wrappers/modules/checkpoint/erc20_dividend_checkpoint_wrapper.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ import {
1111
ERC20DividendCheckpointSetWithholdingFixedEventArgs,
1212
ERC20DetailedContract,
1313
BigNumber,
14-
ContractAbi,
1514
LogWithDecodedArgs,
16-
TxData,
1715
Web3Wrapper,
18-
ERC20DividendCheckpoint,
1916
} from '@polymathnetwork/abi-wrappers';
2017
import { schemas } from '@0x/json-schemas';
2118
import assert from '../../../utils/assert';
@@ -32,8 +29,6 @@ import {
3229
} from '../../../types';
3330
import { numberToBigNumber, dateToBigNumber, stringToBytes32, valueToWei } from '../../../utils/convert';
3431

35-
const EXCLUDED_ADDRESS_LIMIT = 150;
36-
3732
interface ERC20DividendDepositedSubscribeAsyncParams extends SubscribeAsyncParams {
3833
eventName: ERC20DividendCheckpointEvents.ERC20DividendDeposited;
3934
callback: EventCallback<ERC20DividendCheckpointERC20DividendDepositedEventArgs>;
@@ -160,8 +155,6 @@ interface CreateDividendWithCheckpointAndExclusionsParams extends CreateDividend
160155
* This class includes the functionality related to interacting with the ERC20DividendCheckpoint contract.
161156
*/
162157
export default class ERC20DividendCheckpointWrapper extends DividendCheckpointWrapper {
163-
public abi: ContractAbi = ERC20DividendCheckpoint.abi;
164-
165158
protected contract: Promise<ERC20DividendCheckpointContract>;
166159

167160
protected erc20DetailedContract = async (address: string): Promise<ERC20DetailedContract> => {
@@ -307,11 +300,10 @@ export default class ERC20DividendCheckpointWrapper extends DividendCheckpointWr
307300
assert.doesConformToSchema('indexFilterValues', params.indexFilterValues, schemas.indexFilterValuesSchema);
308301
assert.isFunction('callback', params.callback);
309302
const normalizedContractAddress = (await this.contract).address.toLowerCase();
310-
const subscriptionToken = this.subscribeInternal<ArgsType>(
303+
const subscriptionToken = await this.subscribeInternal<ArgsType>(
311304
normalizedContractAddress,
312305
params.eventName,
313306
params.indexFilterValues,
314-
ERC20DividendCheckpoint.abi,
315307
params.callback,
316308
params.isVerbose,
317309
);
@@ -336,7 +328,6 @@ export default class ERC20DividendCheckpointWrapper extends DividendCheckpointWr
336328
params.eventName,
337329
params.blockRange,
338330
params.indexFilterValues,
339-
ERC20DividendCheckpoint.abi,
340331
);
341332
return logs;
342333
};

src/contract_wrappers/modules/checkpoint/ether_dividend_checkpoint_wrapper.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ import {
1414
EtherDividendCheckpointUpdateDividendDatesEventArgs,
1515
EtherDividendCheckpointPauseEventArgs,
1616
EtherDividendCheckpointUnpauseEventArgs,
17-
EtherDividendCheckpoint,
1817
Web3Wrapper,
19-
ContractAbi,
2018
LogWithDecodedArgs,
2119
BigNumber,
2220
} from '@polymathnetwork/abi-wrappers';
@@ -35,8 +33,6 @@ import {
3533
} from '../../../types';
3634
import { numberToBigNumber, dateToBigNumber, stringToBytes32, valueToWei } from '../../../utils/convert';
3735

38-
const EXCLUDED_ADDRESS_LIMIT = 150;
39-
4036
interface EtherDividendDepositedSubscribeAsyncParams extends SubscribeAsyncParams {
4137
eventName: EtherDividendCheckpointEvents.EtherDividendDeposited;
4238
callback: EventCallback<EtherDividendCheckpointEtherDividendDepositedEventArgs>;
@@ -229,8 +225,6 @@ interface CreateDividendWithCheckpointAndExclusionsParams extends TxParams {
229225
* This class includes the functionality related to interacting with the EtherDividendCheckpoint contract.
230226
*/
231227
export default class EtherDividendCheckpointWrapper extends DividendCheckpointWrapper {
232-
public abi: ContractAbi = EtherDividendCheckpoint.abi;
233-
234228
protected contract: Promise<EtherDividendCheckpointContract>;
235229

236230
protected getDecimals = async (): Promise<BigNumber> => {
@@ -367,11 +361,10 @@ export default class EtherDividendCheckpointWrapper extends DividendCheckpointWr
367361
assert.doesConformToSchema('indexFilterValues', params.indexFilterValues, schemas.indexFilterValuesSchema);
368362
assert.isFunction('callback', params.callback);
369363
const normalizedContractAddress = (await this.contract).address.toLowerCase();
370-
const subscriptionToken = this.subscribeInternal<ArgsType>(
364+
const subscriptionToken = await this.subscribeInternal<ArgsType>(
371365
normalizedContractAddress,
372366
params.eventName,
373367
params.indexFilterValues,
374-
EtherDividendCheckpoint.abi,
375368
params.callback,
376369
params.isVerbose,
377370
);
@@ -396,7 +389,6 @@ export default class EtherDividendCheckpointWrapper extends DividendCheckpointWr
396389
params.eventName,
397390
params.blockRange,
398391
params.indexFilterValues,
399-
EtherDividendCheckpoint.abi,
400392
);
401393
return logs;
402394
};

0 commit comments

Comments
 (0)