diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/contract_wrappers/contract_wrapper.ts | 25 | ||||
-rw-r--r-- | src/contract_wrappers/token_wrapper.ts | 18 |
2 files changed, 29 insertions, 14 deletions
diff --git a/src/contract_wrappers/contract_wrapper.ts b/src/contract_wrappers/contract_wrapper.ts index 0c8864ee1..6b2517fc9 100644 --- a/src/contract_wrappers/contract_wrapper.ts +++ b/src/contract_wrappers/contract_wrapper.ts @@ -2,7 +2,15 @@ import * as _ from 'lodash'; import * as Web3 from 'web3'; import {Web3Wrapper} from '../web3_wrapper'; import {AbiDecoder} from '../utils/abi_decoder'; -import {ZeroExError, Artifact, LogWithDecodedArgs, RawLog, ContractEvents} from '../types'; +import { + ZeroExError, + Artifact, + LogWithDecodedArgs, + RawLog, + ContractEvents, + SubscriptionOpts, + IndexedFilterValues, +} from '../types'; import {utils} from '../utils/utils'; export class ContractWrapper { @@ -12,6 +20,21 @@ export class ContractWrapper { this._web3Wrapper = web3Wrapper; this._abiDecoder = abiDecoder; } + protected async _getLogsAsync(address: string, eventName: ContractEvents, subscriptionOpts: SubscriptionOpts, + indexFilterValues: IndexedFilterValues, + abi: Web3.ContractAbi): Promise<Array<LogWithDecodedArgs|RawLog>> { + // TODO include indexFilterValues in topics + const eventSignature = this._getEventSignatureFromAbiByName(abi, eventName); + const filter = { + fromBlock: subscriptionOpts.fromBlock, + toBlock: subscriptionOpts.toBlock, + address, + topics: [this._web3Wrapper.keccak256(eventSignature)], + }; + const logs = await this._web3Wrapper.getLogsAsync(filter); + const logsWithDecodedArguments = _.map(logs, this._tryToDecodeLogOrNoOp.bind(this)); + return logsWithDecodedArguments; + } protected _tryToDecodeLogOrNoOp(log: Web3.LogEntry): LogWithDecodedArgs|RawLog { if (_.isUndefined(this._abiDecoder)) { throw new Error(ZeroExError.NoAbiDecoder); diff --git a/src/contract_wrappers/token_wrapper.ts b/src/contract_wrappers/token_wrapper.ts index 04c03edbd..b932686d4 100644 --- a/src/contract_wrappers/token_wrapper.ts +++ b/src/contract_wrappers/token_wrapper.ts @@ -280,20 +280,12 @@ export class TokenWrapper extends ContractWrapper { this._tokenLogEventEmitters.push(eventEmitter); return eventEmitter; } - public async getLogsAsync(tokenAddress: string, eventName: TokenEvents, - subscriptionOpts: SubscriptionOpts, + public async getLogsAsync(tokenAddress: string, eventName: TokenEvents, subscriptionOpts: SubscriptionOpts, indexFilterValues: IndexedFilterValues): Promise<Array<LogWithDecodedArgs|RawLog>> { - // TODO include indexFilterValues in topics - const eventSignature = this._getEventSignatureFromAbiByName(artifacts.TokenArtifact.abi, eventName); - const filter = { - fromBlock: subscriptionOpts.fromBlock, - toBlock: subscriptionOpts.toBlock, - address: tokenAddress, - topics: [this._web3Wrapper.keccak256(eventSignature)], - }; - const logs = await this._web3Wrapper.getLogsAsync(filter); - const logsWithDecodedArguments = _.map(logs, this._tryToDecodeLogOrNoOp.bind(this)); - return logsWithDecodedArguments; + const logs = await this._getLogsAsync( + tokenAddress, eventName, subscriptionOpts, indexFilterValues, artifacts.TokenArtifact.abi, + ); + return logs; } /** * Stops watching for all token events |