Skip to content

Commit

Permalink
Initial support for EIP-234; filter by blockHash (#412).
Browse files Browse the repository at this point in the history
  • Loading branch information
ricmoo committed Feb 9, 2019
1 parent 41c2c8a commit 60b75c1
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
12 changes: 11 additions & 1 deletion src.ts/providers/abstract-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ export type Filter = {
topics?: Array<string | Array<string>>,
}

// @TODO: This is not supported as an EventType yet, as it will
// need some additional work to adhere to the serialized
// format for events. But we want to allow it for getLogs
// for now.
export type FilterByBlock = {
blockHash?: string,
address?: string,
topics?: Array<string | Array<string>>,
}

export interface Log {
blockNumber?: number;
blockHash?: string;
Expand Down Expand Up @@ -134,7 +144,7 @@ export abstract class Provider implements OnceBlockable {
abstract getTransaction(transactionHash: string): Promise<TransactionResponse>;
abstract getTransactionReceipt(transactionHash: string): Promise<TransactionReceipt>;

abstract getLogs(filter: Filter): Promise<Array<Log>>;
abstract getLogs(filter: Filter | FilterByBlock): Promise<Array<Log>>;

abstract resolveName(name: string | Promise<string>): Promise<string>;
abstract lookupAddress(address: string | Promise<string>): Promise<string>;
Expand Down
13 changes: 11 additions & 2 deletions src.ts/providers/base-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { Provider } from './abstract-provider';

import {
Block, BlockTag,
EventType, Filter,
EventType, Filter, FilterByBlock,
Listener,
Log,
TransactionReceipt, TransactionRequest, TransactionResponse
Expand Down Expand Up @@ -366,7 +366,16 @@ const formatFilter = {
topics: allowNull(checkTopics, undefined),
};

const formatFilterByBlock = {
blockHash: allowNull(checkHash, undefined),
address: allowNull(getAddress, undefined),
topics: allowNull(checkTopics, undefined),
};

function checkFilter(filter: any): any {
if (filter && filter.blockHash) {
return check(formatFilterByBlock, filter);
}
return check(formatFilter, filter);
}

Expand Down Expand Up @@ -1071,7 +1080,7 @@ export class BaseProvider extends Provider {
});
}

getLogs(filter: Filter): Promise<Array<Log>> {
getLogs(filter: Filter | FilterByBlock): Promise<Array<Log>> {
return this.ready.then(() => {
return resolveProperties(filter).then((filter) => {
return this._resolveNames(filter, ['address']).then((filter) => {
Expand Down
10 changes: 10 additions & 0 deletions src.ts/providers/etherscan-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,16 @@ export class EtherscanProvider extends BaseProvider{
url += '&toBlock=' + checkLogTag(params.filter.toBlock);
}

if (params.filter.blockHash) {
try {
errors.throwError("Etherscan does not support blockHash filters", errors.UNSUPPORTED_OPERATION, {
operation: "getLogs(blockHash)"
});
} catch (error) {
return Promise.reject(error);
}
}

if (params.filter.address) {
url += '&address=' + params.filter.address;
}
Expand Down

0 comments on commit 60b75c1

Please sign in to comment.