Add fake gas estimate suprovider for tests

This commit is contained in:
Leonid Logvinov
2017-11-28 11:44:10 -06:00
parent 977a6b2794
commit 36b21e6e7b
5 changed files with 37 additions and 3 deletions

View File

@@ -58,7 +58,7 @@ export class Contract implements Web3.ContractInstance {
const promise = new Promise(async (resolve, reject) => {
const lastArg = args[args.length - 1];
let txData: Partial<Web3.TxData> = {};
if (this.isTxData(lastArg)) {
if (!_.isUndefined(lastArg) && this.isTxData(lastArg)) {
txData = args.pop();
}
// Gas amount sourced with the following priorities:

View File

@@ -8,4 +8,5 @@ export const constants = {
KOVAN_RPC_URL: 'https://kovan.infura.io',
ROPSTEN_RPC_URL: 'https://ropsten.infura.io',
ZRX_DECIMALS: 18,
GAS_ESTIMATE: 500000,
};

View File

@@ -1,4 +1,4 @@
import {JSONRPCPayload} from '../types';
import {JSONRPCPayload} from '../../../src/types';
/*
* This class implements the web3-provider-engine subprovider interface and returns

View File

@@ -0,0 +1,31 @@
import {JSONRPCPayload} from '../../../src/types';
/*
* This class implements the web3-provider-engine subprovider interface and returns
* the constant gas estimate when queried.
* Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js
*/
export class FakeGasEstimateProvider {
private constantGasAmount: number;
constructor(constantGasAmount: number) {
this.constantGasAmount = constantGasAmount;
}
// This method needs to be here to satisfy the interface but linter wants it to be static.
// tslint:disable-next-line:prefer-function-over-method
public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error|null, result: any) => void) {
switch (payload.method) {
case 'eth_estimateGas':
end(null, this.constantGasAmount);
return;
default:
next();
return;
}
}
// Required to implement this method despite not needing it for this subprovider
// tslint:disable-next-line:prefer-function-over-method
public setEngine(engine: any) {
// noop
}
}

View File

@@ -7,7 +7,8 @@ import * as Web3 from 'web3';
import ProviderEngine = require('web3-provider-engine');
import RpcSubprovider = require('web3-provider-engine/subproviders/rpc');
import {EmptyWalletSubProvider} from '../../src/subproviders/empty_wallet_subprovider';
import {EmptyWalletSubProvider} from './subproviders/empty_wallet_subprovider';
import {FakeGasEstimateProvider} from './subproviders/fake_gas_estimate_subprovider';
import {constants} from './constants';
@@ -24,6 +25,7 @@ export const web3Factory = {
if (!hasAddresses) {
provider.addProvider(new EmptyWalletSubProvider());
}
provider.addProvider(new FakeGasEstimateProvider(constants.GAS_ESTIMATE));
provider.addProvider(new RpcSubprovider({
rpcUrl,
}));