77 lines
2.7 KiB
TypeScript
77 lines
2.7 KiB
TypeScript
import { env, EnvVars } from '@0xproject/dev-utils';
|
|
import { GanacheSubprovider, prependSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0xproject/subproviders';
|
|
import { errorUtils, logUtils } from '@0xproject/utils';
|
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
|
import * as fs from 'fs';
|
|
|
|
import { config } from './config';
|
|
import { coverage } from './coverage';
|
|
import { profiler } from './profiler';
|
|
|
|
enum ProviderType {
|
|
Ganache = 'ganache',
|
|
Geth = 'geth',
|
|
}
|
|
|
|
let testProvider: ProviderType;
|
|
switch (process.env.TEST_PROVIDER) {
|
|
case undefined:
|
|
testProvider = ProviderType.Ganache;
|
|
break;
|
|
case 'ganache':
|
|
testProvider = ProviderType.Ganache;
|
|
break;
|
|
case 'geth':
|
|
testProvider = ProviderType.Geth;
|
|
break;
|
|
default:
|
|
throw errorUtils.spawnSwitchErr('TEST_PROVIDER', process.env.TEST_PROVIDER);
|
|
}
|
|
|
|
export const provider = new Web3ProviderEngine();
|
|
if (testProvider === ProviderType.Ganache) {
|
|
provider.addProvider(
|
|
new GanacheSubprovider({
|
|
logger: {
|
|
log: (arg: any) => {
|
|
fs.appendFileSync(config.ganacheLogFile, `${arg}\n`);
|
|
},
|
|
},
|
|
verbose: env.parseBoolean(EnvVars.SolidityCoverage),
|
|
networkId: config.networkId,
|
|
mnemonic: config.mnemonic,
|
|
}),
|
|
);
|
|
} else {
|
|
provider.addProvider(new RPCSubprovider('http://localhost:8501'));
|
|
}
|
|
provider.start();
|
|
|
|
const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
|
|
const isProfilerEnabled = env.parseBoolean(EnvVars.SolidityProfiler);
|
|
if (isCoverageEnabled && isProfilerEnabled) {
|
|
throw new Error(
|
|
`Unfortunately for now you can't enable both coverage and profiler at the same time. They both use coverage.json file and there is no way to configure that.`,
|
|
);
|
|
}
|
|
if (isCoverageEnabled) {
|
|
const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
|
|
prependSubprovider(provider, coverageSubprovider);
|
|
}
|
|
if (isProfilerEnabled) {
|
|
if (testProvider === ProviderType.Ganache) {
|
|
logUtils.warn(
|
|
"Gas costs in Ganache traces are incorrect and we don't recommend using it for profiling. Please switch to Geth. Check README for more details",
|
|
);
|
|
process.exit(1);
|
|
}
|
|
const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
|
|
logUtils.log(
|
|
"By default profilerSubprovider is stopped so that you don't get noise from setup code. Don't forget to start it before the code you want to profile and stop it afterwards",
|
|
);
|
|
profilerSubprovider.stop();
|
|
prependSubprovider(provider, profilerSubprovider);
|
|
}
|
|
|
|
export const web3Wrapper = new Web3Wrapper(provider);
|