From efaafb203feaf703de803df7e346652372e9fb75 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Sat, 20 Jul 2019 21:03:53 -0300 Subject: [PATCH] Keep extra filter topics when using Frgment filters in Contracts. --- packages/contracts/src.ts/index.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/contracts/src.ts/index.ts b/packages/contracts/src.ts/index.ts index fef7696a4c..7a3ba848b1 100644 --- a/packages/contracts/src.ts/index.ts +++ b/packages/contracts/src.ts/index.ts @@ -346,10 +346,17 @@ class FragmentRunningEvent extends RunningEvent { readonly interface: Interface; readonly fragment: EventFragment; - constructor(address: string, contractInterface: Interface, fragment: EventFragment) { - let filter = { - address: address, - topics: [ contractInterface.getEventTopic(fragment) ] + constructor(address: string, contractInterface: Interface, fragment: EventFragment, topics?: Array) { + let filter: EventFilter = { + address: address + } + + let topic = contractInterface.getEventTopic(fragment); + if (topics) { + if (topic !== topics[0]) { errors.throwArgumentError("topic mismatch", "topics", topics); } + filter.topics = topics.slice(); + } else { + filter.topics = [ topic ]; } super(getEventTag(filter), filter); @@ -646,7 +653,7 @@ export class Contract { if (eventName.topics[0]) { let fragment = this.interface.getEvent(eventName.topics[0]); if (fragment) { - return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment)); + return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment, eventName.topics)); } }