Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function provider(): ethers.providers.JsonRpcProvider {
const providerEngine = new Web3ProviderEngine()
providerEngine.addProvider(new FakeGasEstimateSubprovider(5 * 10 ** 6)) // Ganache does a poor job of estimating gas, so just crank it up for testing.
if (process.env.DEBUG) {
debug('Debugging enabled, using sol-trace module...')
const defaultFromAddress = ''
const artifactAdapter = new SolCompilerArtifactAdapter(
path.resolve('dist/artifacts'),
path.resolve('contracts'),
)
const revertTraceSubprovider = new RevertTraceSubprovider(
artifactAdapter,
defaultFromAddress,
true,
)
providerEngine.addProvider(revertTraceSubprovider)
}
providerEngine.addProvider(new GanacheSubprovider({ gasLimit: 8_000_000 }))
providerEngine.start()
return new ethers.providers.Web3Provider(providerEngine)
}
switch (process.env.MODE) {
case "profile":
global.profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress, isVerbose);
global.profilerSubprovider.stop();
provider.addProvider(global.profilerSubprovider);
break;
case "coverage":
global.coverageSubprovider = new CoverageSubprovider(
artifactAdapter,
defaultFromAddress,
coverageSubproviderConfig,
);
provider.addProvider(global.coverageSubprovider);
break;
case "trace":
provider.addProvider(new RevertTraceSubprovider(artifactAdapter, defaultFromAddress, isVerbose));
break;
default:
// Due to some strange error, contracts do not get deployed when using the ganache subprovider
// required by the 0x tools
kovanProvider = createProvider("kovan");
rinkebyProvider = createProvider("rinkeby");
ropstenProvider = createProvider("ropsten");
break;
}
if (process.env.MODE) {
provider.addProvider(new GanacheSubprovider());
provider.start((err) => {
if (err !== undefined) {
console.log(err);
process.exit(1);
console.log(chalk.green('Outputting artifacts to:', artifacts))
await compiler.compileAsync()
const defaultFromAddress = await ethers.Wallet.fromMnemonic(
mnemonic,
path,
).getAddress()
console.log(
chalk.green(
'Default from address derived from mnemonic:',
defaultFromAddress,
),
)
const artifactAdapter = new SolCompilerArtifactAdapter(artifacts, contracts)
const revertTraceSubprovider = new RevertTraceSubprovider(
artifactAdapter,
defaultFromAddress,
true,
)
const providerEngine = new Web3ProviderEngine()
providerEngine.addProvider(new FakeGasEstimateSubprovider(4 * 10 ** 6)) // Ganache does a poor job of estimating gas, so just crank it up for testing.
providerEngine.addProvider(revertTraceSubprovider)
providerEngine.addProvider(
// Start an in-process ganache instance
new GanacheSubprovider({
mnemonic,
hdPath: path,
vmErrorsOnRPCResponse: true,
}),
)
_getRevertTraceSubprovider(): RevertTraceSubprovider {
const defaultFromAddress = devConstants.TESTRPC_FIRST_ADDRESS;
const solCompilerArtifactAdapter = new SolCompilerArtifactAdapter();
const isVerbose = true;
const subprovider = new RevertTraceSubprovider(solCompilerArtifactAdapter, defaultFromAddress, isVerbose);
return subprovider;
},
};
);
global.profilerSubprovider.stop();
provider.addProvider(global.profilerSubprovider);
provider.addProvider(new WebsocketSubprovider({ rpcUrl: "http://localhost:8545" }));
} else {
if (mode === "coverage") {
global.coverageSubprovider = new CoverageSubprovider(
artifactAdapter,
defaultFromAddress,
{
isVerbose,
}
);
provider.addProvider(global.coverageSubprovider);
} else if (mode === "trace") {
const revertTraceSubprovider = new RevertTraceSubprovider(
artifactAdapter,
defaultFromAddress,
isVerbose
);
provider.addProvider(revertTraceSubprovider);
}
provider.addProvider(new WebsocketSubprovider({ rpcUrl: "http://localhost:8545" }))
}
provider.start(err => {
if (err !== undefined) {
console.log(err);
process.exit(1);
}
});
/**
const testModes = ['profile', 'coverage', 'trace'];
if (testModes.includes(process.env.MODE)) {
defaultFromAddress = getFirstAddress();
}
switch (process.env.MODE) {
case 'profile':
global.profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress, isVerbose);
engine.addProvider(global.profilerSubprovider);
break;
case 'coverage':
global.coverageSubprovider = new CoverageSubprovider(artifactAdapter, defaultFromAddress, coverageSubproviderConfig);
engine.addProvider(global.coverageSubprovider);
break;
case 'trace':
engine.addProvider(new RevertTraceSubprovider(artifactAdapter, defaultFromAddress, isVerbose));
break;
default:
rinkebyProvider = createProvider('rinkeby');
mainnetProvider = createProvider('mainnet');
ropstenProvider = createProvider('ropsten');
break;
}
let ganacheSubprovider = {};
ganacheSubprovider = new GanacheSubprovider({ mnemonic: process.env.TEST_MNEMONIC });
engine.addProvider(ganacheSubprovider);
engine.start((err) => {
if (err !== undefined) {
console.log(err);
process.exit(1);
const artifactAdapter = new TruffleArtifactAdapter(
`${projectRoot}`,
solcVersion
);
const coverageSubProvider = new CoverageSubprovider(
artifactAdapter,
defaultFromAddress,
isVerbose
);
global.coverageSubProvider = coverageSubProvider;
testProvider.addProvider(coverageSubProvider);
testProvider.addProvider(
new RevertTraceSubprovider(artifactAdapter, defaultFromAddress, isVerbose)
);
testProvider.send = testProvider.sendAsync.bind(testProvider);
return testProvider;
};