Remove logAsyncErrors hack
This commit is contained in:
		@@ -21,24 +21,6 @@ export interface TraceCollectionSubproviderConfig {
 | 
			
		||||
    shouldCollectGasEstimateTraces: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AsyncFunc = (...args: any[]) => Promise<void>;
 | 
			
		||||
 | 
			
		||||
// This wrapper outputs errors to console even if the promise gets ignored
 | 
			
		||||
// we need this because web3-provider-engine does not handle promises in
 | 
			
		||||
// the after function of next(after).
 | 
			
		||||
function logAsyncErrors(fn: AsyncFunc): AsyncFunc {
 | 
			
		||||
    async function wrappedAsync(...args: any[]): Promise<void> {
 | 
			
		||||
        try {
 | 
			
		||||
            await fn(...args);
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            // tslint:disable-next-line no-console
 | 
			
		||||
            logUtils.error(err);
 | 
			
		||||
            throw err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return wrappedAsync;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Because there is no notion of a call trace in the Ethereum rpc - we collect them in a rather non-obvious/hacky way.
 | 
			
		||||
// On each call - we create a snapshot, execute the call as a transaction, get the trace, revert the snapshot.
 | 
			
		||||
// That allows us to avoid influencing test behaviour.
 | 
			
		||||
@@ -93,7 +75,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
 | 
			
		||||
                        next();
 | 
			
		||||
                    } else {
 | 
			
		||||
                        const txData = payload.params[0];
 | 
			
		||||
                        next(logAsyncErrors(this._onTransactionSentAsync.bind(this, txData)));
 | 
			
		||||
                        next(this._onTransactionSentAsync.bind(this, txData));
 | 
			
		||||
                    }
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
@@ -102,7 +84,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
 | 
			
		||||
                        next();
 | 
			
		||||
                    } else {
 | 
			
		||||
                        const callData = payload.params[0];
 | 
			
		||||
                        next(logAsyncErrors(this._onCallOrGasEstimateExecutedAsync.bind(this, callData)));
 | 
			
		||||
                        next(this._onCallOrGasEstimateExecutedAsync.bind(this, callData));
 | 
			
		||||
                    }
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
@@ -111,7 +93,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
 | 
			
		||||
                        next();
 | 
			
		||||
                    } else {
 | 
			
		||||
                        const estimateGasData = payload.params[0];
 | 
			
		||||
                        next(logAsyncErrors(this._onCallOrGasEstimateExecutedAsync.bind(this, estimateGasData)));
 | 
			
		||||
                        next(this._onCallOrGasEstimateExecutedAsync.bind(this, estimateGasData));
 | 
			
		||||
                    }
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
@@ -145,31 +127,35 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
 | 
			
		||||
        txHash: string | undefined,
 | 
			
		||||
        cb: Callback,
 | 
			
		||||
    ): Promise<void> {
 | 
			
		||||
        if (!txData.isFakeTransaction) {
 | 
			
		||||
            // This transaction is a usual transaction. Not a call executed as one.
 | 
			
		||||
            // And we don't want it to be executed within a snapshotting period
 | 
			
		||||
            await this._lock.acquire();
 | 
			
		||||
        }
 | 
			
		||||
        const NULL_ADDRESS = '0x0';
 | 
			
		||||
        if (_.isNull(err)) {
 | 
			
		||||
            const toAddress =
 | 
			
		||||
                _.isUndefined(txData.to) || txData.to === NULL_ADDRESS ? constants.NEW_CONTRACT : txData.to;
 | 
			
		||||
            await this._recordTxTraceAsync(toAddress, txData.data, txHash as string);
 | 
			
		||||
        } else {
 | 
			
		||||
            const latestBlock = await this._web3Wrapper.getBlockWithTransactionDataAsync(BlockParamLiteral.Latest);
 | 
			
		||||
            const transactions = latestBlock.transactions;
 | 
			
		||||
            for (const transaction of transactions) {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!txData.isFakeTransaction) {
 | 
			
		||||
                // This transaction is a usual transaction. Not a call executed as one.
 | 
			
		||||
                // And we don't want it to be executed within a snapshotting period
 | 
			
		||||
                await this._lock.acquire();
 | 
			
		||||
            }
 | 
			
		||||
            const NULL_ADDRESS = '0x0';
 | 
			
		||||
            if (_.isNull(err)) {
 | 
			
		||||
                const toAddress =
 | 
			
		||||
                    _.isUndefined(txData.to) || txData.to === NULL_ADDRESS ? constants.NEW_CONTRACT : txData.to;
 | 
			
		||||
                await this._recordTxTraceAsync(toAddress, transaction.input, transaction.hash);
 | 
			
		||||
                await this._recordTxTraceAsync(toAddress, txData.data, txHash as string);
 | 
			
		||||
            } else {
 | 
			
		||||
                const latestBlock = await this._web3Wrapper.getBlockWithTransactionDataAsync(BlockParamLiteral.Latest);
 | 
			
		||||
                const transactions = latestBlock.transactions;
 | 
			
		||||
                for (const transaction of transactions) {
 | 
			
		||||
                    const toAddress =
 | 
			
		||||
                        _.isUndefined(txData.to) || txData.to === NULL_ADDRESS ? constants.NEW_CONTRACT : txData.to;
 | 
			
		||||
                    await this._recordTxTraceAsync(toAddress, transaction.input, transaction.hash);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (!txData.isFakeTransaction) {
 | 
			
		||||
                // This transaction is a usual transaction. Not a call executed as one.
 | 
			
		||||
                // And we don't want it to be executed within a snapshotting period
 | 
			
		||||
                this._lock.release();
 | 
			
		||||
            }
 | 
			
		||||
            cb();
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            cb(err);
 | 
			
		||||
        }
 | 
			
		||||
        if (!txData.isFakeTransaction) {
 | 
			
		||||
            // This transaction is a usual transaction. Not a call executed as one.
 | 
			
		||||
            // And we don't want it to be executed within a snapshotting period
 | 
			
		||||
            this._lock.release();
 | 
			
		||||
        }
 | 
			
		||||
        cb();
 | 
			
		||||
    }
 | 
			
		||||
    private async _onCallOrGasEstimateExecutedAsync(
 | 
			
		||||
        callData: Partial<CallDataRPC>,
 | 
			
		||||
@@ -177,8 +163,12 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
 | 
			
		||||
        _callResult: string,
 | 
			
		||||
        cb: Callback,
 | 
			
		||||
    ): Promise<void> {
 | 
			
		||||
        await this._recordCallOrGasEstimateTraceAsync(callData);
 | 
			
		||||
        cb();
 | 
			
		||||
        try {
 | 
			
		||||
            await this._recordCallOrGasEstimateTraceAsync(callData);
 | 
			
		||||
            cb();
 | 
			
		||||
        } catch (err) {
 | 
			
		||||
            cb(err);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    private async _recordCallOrGasEstimateTraceAsync(callData: Partial<CallDataRPC>): Promise<void> {
 | 
			
		||||
        // We don't want other transactions to be exeucted during snashotting period, that's why we lock the
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user