aboutsummaryrefslogtreecommitdiffstats
path: root/packages/pipeline/src/data_sources/contract-wrappers
diff options
context:
space:
mode:
authorAlex Browne <stephenalexbrowne@gmail.com>2018-10-18 07:44:07 +0800
committerAlex Browne <stephenalexbrowne@gmail.com>2018-12-05 06:24:44 +0800
commit91e7485ecc4e780ef454b642a52c3d93faa95af1 (patch)
treede59e78902b93e3cc1f68e9ae9f85094f16955f6 /packages/pipeline/src/data_sources/contract-wrappers
parent6c00dd6f3900e322e5b6d5fe09b35fdafc1bfb2f (diff)
downloaddexon-sol-tools-91e7485ecc4e780ef454b642a52c3d93faa95af1.tar.gz
dexon-sol-tools-91e7485ecc4e780ef454b642a52c3d93faa95af1.tar.zst
dexon-sol-tools-91e7485ecc4e780ef454b642a52c3d93faa95af1.zip
Update to use ContractWrappers + Infura instead of Etherscan
Diffstat (limited to 'packages/pipeline/src/data_sources/contract-wrappers')
-rw-r--r--packages/pipeline/src/data_sources/contract-wrappers/exchange_events.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/packages/pipeline/src/data_sources/contract-wrappers/exchange_events.ts b/packages/pipeline/src/data_sources/contract-wrappers/exchange_events.ts
new file mode 100644
index 000000000..77217c601
--- /dev/null
+++ b/packages/pipeline/src/data_sources/contract-wrappers/exchange_events.ts
@@ -0,0 +1,51 @@
+import { ContractWrappers, ExchangeEvents, ExchangeFillEventArgs, ExchangeWrapper } from '@0xproject/contract-wrappers';
+import { Web3ProviderEngine } from '@0xproject/subproviders';
+import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { LogWithDecodedArgs } from 'ethereum-types';
+
+const BLOCK_FINALITY_THRESHOLD = 10; // When to consider blocks as final. Used to compute default toBlock.
+const NUM_BLOCKS_PER_QUERY = 100000; // Number of blocks to query for events at a time.
+const EXCHANGE_START_BLOCK = 6271590; // Block number when the Exchange contract was deployed to mainnet.
+
+export class ExchangeEventsSource {
+ private _exchangeWrapper: ExchangeWrapper;
+ private _web3Wrapper: Web3Wrapper;
+ constructor(provider: Web3ProviderEngine, networkId: number) {
+ this._web3Wrapper = new Web3Wrapper(provider);
+ const contractWrappers = new ContractWrappers(provider, { networkId });
+ this._exchangeWrapper = contractWrappers.exchange;
+ }
+
+ // TODO(albrow): Get Cancel and CancelUpTo events.
+
+ public async getFillEventsAsync(
+ fromBlock: number = EXCHANGE_START_BLOCK,
+ toBlock?: number,
+ ): Promise<Array<LogWithDecodedArgs<ExchangeFillEventArgs>>> {
+ const calculatedToBlock =
+ toBlock === undefined
+ ? (await this._web3Wrapper.getBlockNumberAsync()) - BLOCK_FINALITY_THRESHOLD
+ : toBlock;
+ let events: Array<LogWithDecodedArgs<ExchangeFillEventArgs>> = [];
+ for (let currFromBlock = fromBlock; currFromBlock <= calculatedToBlock; currFromBlock += NUM_BLOCKS_PER_QUERY) {
+ events = events.concat(
+ await this._getFillEventsForRangeAsync(currFromBlock, currFromBlock + NUM_BLOCKS_PER_QUERY - 1),
+ );
+ }
+ return events;
+ }
+
+ private async _getFillEventsForRangeAsync(
+ fromBlock: number,
+ toBlock: number,
+ ): Promise<Array<LogWithDecodedArgs<ExchangeFillEventArgs>>> {
+ return this._exchangeWrapper.getLogsAsync<ExchangeFillEventArgs>(
+ ExchangeEvents.Fill,
+ {
+ fromBlock,
+ toBlock,
+ },
+ {},
+ );
+ }
+}