@nomiclabs/buidler
Version:
Buidler is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
69 lines • 3.74 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../../constants");
const date_1 = require("../../util/date");
const http_1 = require("./http");
function isHDAccountsConfig(accounts) {
return accounts !== undefined && Object.keys(accounts).includes("mnemonic");
}
exports.isHDAccountsConfig = isHDAccountsConfig;
function createProvider(networkName, networkConfig, solcVersion, paths, experimentalBuidlerEVMMessageTraceHooks = []) {
let provider;
if (networkName === constants_1.BUIDLEREVM_NETWORK_NAME) {
const buidlerNetConfig = networkConfig;
const { BuidlerEVMProvider, } = require("../../buidler-evm/provider/provider");
provider = new BuidlerEVMProvider(buidlerNetConfig.hardfork, constants_1.BUIDLEREVM_NETWORK_NAME, buidlerNetConfig.chainId, buidlerNetConfig.chainId, buidlerNetConfig.blockGasLimit, buidlerNetConfig.throwOnTransactionFailures, buidlerNetConfig.throwOnCallFailures, buidlerNetConfig.accounts, solcVersion, paths, buidlerNetConfig.loggingEnabled, buidlerNetConfig.allowUnlimitedContractSize, buidlerNetConfig.initialDate !== undefined
? date_1.parseDateString(buidlerNetConfig.initialDate)
: undefined, experimentalBuidlerEVMMessageTraceHooks);
}
else {
const httpNetConfig = networkConfig;
provider = new http_1.HttpProvider(httpNetConfig.url, networkName, httpNetConfig.httpHeaders, httpNetConfig.timeout);
}
return wrapEthereumProvider(provider, networkConfig);
}
exports.createProvider = createProvider;
function wrapEthereumProvider(provider, netConfig) {
// These dependencies are lazy-loaded because they are really big.
// We use require() instead of import() here, because we need it to be sync.
const { createHDWalletProvider, createLocalAccountsProvider, createSenderProvider, } = require("./accounts");
const { createAutomaticGasPriceProvider, createAutomaticGasProvider, createFixedGasPriceProvider, createFixedGasProvider, } = require("./gas-providers");
const { createChainIdValidationProvider } = require("./chainId");
const isHttpNetworkConfig = "url" in netConfig;
if (isHttpNetworkConfig) {
const httpNetConfig = netConfig;
const accounts = httpNetConfig.accounts;
if (Array.isArray(accounts)) {
provider = createLocalAccountsProvider(provider, accounts);
}
else if (isHDAccountsConfig(accounts)) {
provider = createHDWalletProvider(provider, accounts.mnemonic, accounts.path, accounts.initialIndex, accounts.count);
}
// TODO: Add some extension mechanism for account plugins here
const { createGanacheGasMultiplierProvider } = require("./gas-providers");
if (typeof httpNetConfig.gas !== "number") {
provider = createGanacheGasMultiplierProvider(provider);
}
}
provider = createSenderProvider(provider, netConfig.from);
if (netConfig.gas === undefined || netConfig.gas === "auto") {
provider = createAutomaticGasProvider(provider, netConfig.gasMultiplier);
}
else {
provider = createFixedGasProvider(provider, netConfig.gas);
}
if (netConfig.gasPrice === undefined || netConfig.gasPrice === "auto") {
provider = createAutomaticGasPriceProvider(provider);
}
else {
provider = createFixedGasPriceProvider(provider, netConfig.gasPrice);
}
if (isHttpNetworkConfig) {
if (netConfig.chainId !== undefined) {
return createChainIdValidationProvider(provider, netConfig.chainId);
}
}
return provider;
}
exports.wrapEthereumProvider = wrapEthereumProvider;
//# sourceMappingURL=construction.js.map
;