Add postFormatter for logs
This commit is contained in:
@@ -5,6 +5,17 @@ import promisify = require('es6-promisify');
|
|||||||
import {ZeroExError, Artifact, TransactionReceipt} from './types';
|
import {ZeroExError, Artifact, TransactionReceipt} from './types';
|
||||||
import {Contract} from './contract';
|
import {Contract} from './contract';
|
||||||
|
|
||||||
|
interface RawLogEntry {
|
||||||
|
logIndex: string|null;
|
||||||
|
transactionIndex: string|null;
|
||||||
|
transactionHash: string;
|
||||||
|
blockHash: string|null;
|
||||||
|
blockNumber: string|null;
|
||||||
|
address: string;
|
||||||
|
data: string;
|
||||||
|
topics: string[];
|
||||||
|
}
|
||||||
|
|
||||||
export class Web3Wrapper {
|
export class Web3Wrapper {
|
||||||
private web3: Web3;
|
private web3: Web3;
|
||||||
private defaults: Partial<Web3.TxData>;
|
private defaults: Partial<Web3.TxData>;
|
||||||
@@ -137,8 +148,9 @@ export class Web3Wrapper {
|
|||||||
method: 'eth_getLogs',
|
method: 'eth_getLogs',
|
||||||
params: [serializedFilter],
|
params: [serializedFilter],
|
||||||
};
|
};
|
||||||
const logs = await this.sendRawPayloadAsync(payload);
|
const rawLogs = await this.sendRawPayloadAsync<RawLogEntry[]>(payload);
|
||||||
return logs;
|
const formattedLogs = _.map(rawLogs, this.formatLog.bind(this));
|
||||||
|
return formattedLogs;
|
||||||
}
|
}
|
||||||
private getContractInstance<A extends Web3.ContractInstance>(abi: Web3.ContractAbi, address: string): A {
|
private getContractInstance<A extends Web3.ContractInstance>(abi: Web3.ContractAbi, address: string): A {
|
||||||
const web3ContractInstance = this.web3.eth.contract(abi).at(address);
|
const web3ContractInstance = this.web3.eth.contract(abi).at(address);
|
||||||
@@ -149,7 +161,7 @@ export class Web3Wrapper {
|
|||||||
const networkId = await promisify(this.web3.version.getNetwork)();
|
const networkId = await promisify(this.web3.version.getNetwork)();
|
||||||
return networkId;
|
return networkId;
|
||||||
}
|
}
|
||||||
private async sendRawPayloadAsync(payload: Web3.JSONRPCRequestPayload): Promise<any> {
|
private async sendRawPayloadAsync<A>(payload: Web3.JSONRPCRequestPayload): Promise<A> {
|
||||||
const sendAsync = this.web3.currentProvider.sendAsync.bind(this.web3.currentProvider);
|
const sendAsync = this.web3.currentProvider.sendAsync.bind(this.web3.currentProvider);
|
||||||
const response = await promisify(sendAsync)(payload);
|
const response = await promisify(sendAsync)(payload);
|
||||||
const result = response.result;
|
const result = response.result;
|
||||||
@@ -169,4 +181,20 @@ export class Web3Wrapper {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private formatLog(rawLog: RawLogEntry): Web3.LogEntry {
|
||||||
|
const formattedLog = {
|
||||||
|
...rawLog,
|
||||||
|
logIndex: this.toDecimal(rawLog.logIndex),
|
||||||
|
blockNumber: this.toDecimal(rawLog.blockNumber),
|
||||||
|
transactionIndex: this.toDecimal(rawLog.transactionIndex),
|
||||||
|
};
|
||||||
|
return formattedLog;
|
||||||
|
}
|
||||||
|
private toDecimal(hex: string|null): number|null {
|
||||||
|
if (_.isNull(hex)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const decimal = this.web3.toDecimal(hex);
|
||||||
|
return decimal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -361,6 +361,8 @@ describe('TokenWrapper', () => {
|
|||||||
(async () => {
|
(async () => {
|
||||||
const callback = (err: Error, logEvent: DecodedLogEvent<TransferContractEventArgs>) => {
|
const callback = (err: Error, logEvent: DecodedLogEvent<TransferContractEventArgs>) => {
|
||||||
expect(logEvent).to.not.be.undefined();
|
expect(logEvent).to.not.be.undefined();
|
||||||
|
expect(logEvent.logIndex).to.be.equal(0);
|
||||||
|
expect(logEvent.transactionIndex).to.be.equal(0);
|
||||||
const args = logEvent.args;
|
const args = logEvent.args;
|
||||||
expect(args._from).to.be.equal(coinbase);
|
expect(args._from).to.be.equal(coinbase);
|
||||||
expect(args._to).to.be.equal(addressWithoutFunds);
|
expect(args._to).to.be.equal(addressWithoutFunds);
|
||||||
|
|||||||
Reference in New Issue
Block a user