From 40610830da70ae406227e80c700efea11042ba68 Mon Sep 17 00:00:00 2001 From: Alex Browne Date: Tue, 25 Sep 2018 15:31:41 -0700 Subject: Use multi-primary keys for event and filter null logIndexes --- packages/pipeline/src/data_types/events/exchange_events.ts | 13 +++++++++++-- packages/pipeline/src/entities/ExchangeCancelEvent.ts | 2 +- packages/pipeline/src/entities/ExchangeFillEvent.ts | 2 +- packages/pipeline/src/index.ts | 4 ++-- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/pipeline/src/data_types/events/exchange_events.ts b/packages/pipeline/src/data_types/events/exchange_events.ts index 3938f3a69..cc4332f6f 100644 --- a/packages/pipeline/src/data_types/events/exchange_events.ts +++ b/packages/pipeline/src/data_types/events/exchange_events.ts @@ -2,7 +2,7 @@ import { ExchangeCancelEventArgs, ExchangeEventArgs, ExchangeFillEventArgs } fro import { assetDataUtils } from '@0xproject/order-utils'; import { AssetProxyId, ERC721AssetData } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; -import { LogWithDecodedArgs } from 'ethereum-types'; +import { LogEntry, LogWithDecodedArgs } from 'ethereum-types'; import * as R from 'ramda'; import { artifacts } from '../../artifacts'; @@ -22,10 +22,19 @@ export function parseExchangeEvents(rawEventsResponse: EventsResponse): Exchange eventResponse => decodeLogEntry(exchangeContractAbi, eventResponse), logEntries, ); - const filteredLogEntries = R.filter(logEntry => R.contains(logEntry.event, ['Fill', 'Cancel']), decodedLogEntries); + const filteredLogEntries = R.filter(shouldIncludeLogEntry, decodedLogEntries); return R.map(_convertToEntity, filteredLogEntries); } +export function shouldIncludeLogEntry(logEntry: LogWithDecodedArgs): boolean { + if (!R.contains(logEntry.event, ['Fill', 'Cancel'])) { + return false; + } else if (logEntry.logIndex == null || isNaN(logEntry.logIndex)) { + return false; + } + return true; +} + export function _convertToEntity(eventLog: LogWithDecodedArgs): ExchangeEventEntity { switch (eventLog.event) { case 'Fill': diff --git a/packages/pipeline/src/entities/ExchangeCancelEvent.ts b/packages/pipeline/src/entities/ExchangeCancelEvent.ts index 8e21518d3..c925a4b01 100644 --- a/packages/pipeline/src/entities/ExchangeCancelEvent.ts +++ b/packages/pipeline/src/entities/ExchangeCancelEvent.ts @@ -5,10 +5,10 @@ import { AssetType } from '../types'; @Entity() export class ExchangeCancelEvent extends BaseEntity { @PrimaryColumn() public logIndex!: number; + @PrimaryColumn() public blockNumber!: number; @Column() public address!: string; @Column() public rawData!: string; - @Column() public blockNumber!: number; @Column() public makerAddress!: string; @Column({ nullable: true, type: String }) diff --git a/packages/pipeline/src/entities/ExchangeFillEvent.ts b/packages/pipeline/src/entities/ExchangeFillEvent.ts index e66bd64e3..9ac8eb349 100644 --- a/packages/pipeline/src/entities/ExchangeFillEvent.ts +++ b/packages/pipeline/src/entities/ExchangeFillEvent.ts @@ -5,10 +5,10 @@ import { AssetType } from '../types'; @Entity() export class ExchangeFillEvent extends BaseEntity { @PrimaryColumn() public logIndex!: number; + @PrimaryColumn() public blockNumber!: number; @Column() public address!: string; @Column() public rawData!: string; - @Column() public blockNumber!: number; @Column() public makerAddress!: string; @Column() public takerAddress!: string; diff --git a/packages/pipeline/src/index.ts b/packages/pipeline/src/index.ts index c68df95bf..67b1f6fb2 100644 --- a/packages/pipeline/src/index.ts +++ b/packages/pipeline/src/index.ts @@ -1,13 +1,13 @@ +import * as R from 'ramda'; import 'reflect-metadata'; import { createConnection } from 'typeorm'; import { Etherscan } from './data_sources/etherscan'; +import { parseExchangeEvents } from './data_types/events/exchange_events'; import { ExchangeCancelEvent } from './entities/ExchangeCancelEvent'; import { ExchangeFillEvent } from './entities/ExchangeFillEvent'; import { config } from './ormconfig'; -import { parseExchangeEvents } from './data_types/events/exchange_events'; - const etherscan = new Etherscan(process.env.ETHERSCAN_API_KEY as string); const EXCHANGE_ADDRESS = '0x4f833a24e1f95d70f028921e27040ca56e09ab0b'; -- cgit v1.2.3