hardhat
Version:
Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
68 lines • 4.22 kB
JavaScript
import { numberToHexString } from "@nomicfoundation/hardhat-utils/hex";
import { isHttpNetworkHdAccountsConfig } from "../type-validation.js";
/**
* This function returns an handlers array based on the values in the NetworkConnection and NetworkConfig.
* The order of the handlers, if all are present, is: chain handler, gas handlers (gasPrice first, then gas), sender handler and accounts handler.
* The order is important to get a correct result when the handlers are executed.
* The handlers are imported dynamically because some might take a long time to load.
* Out of the currently supported handlers, LocalAccountsHandler and, consequently, HDWalletHandler have been identified as the most expensive.
* See https://github.com/NomicFoundation/hardhat/pull/6481 for more details.
*/
export async function createHandlersArray(networkConnection) {
const requestHandlers = [];
const networkConfig = networkConnection.networkConfig;
if (networkConfig.type === "http" && networkConfig.chainId !== undefined) {
const { ChainIdValidatorHandler } = await import("./handlers/chain-id/chain-id-handler.js");
requestHandlers.push(new ChainIdValidatorHandler(networkConnection.provider, networkConfig.chainId));
}
if (networkConfig.gasPrice === undefined ||
networkConfig.gasPrice === "auto") {
const { AutomaticGasPriceHandler } = await import("./handlers/gas/automatic-gas-price-handler.js");
// If you use a hook handler that signs locally, you are required to
// have all the transaction fields available, including the
// gasPrice / maxFeePerGas & maxPriorityFeePerGas.
//
// We never use those when using EDR Network, as we sign within the
// EDR Network itself. This means that we don't need to provide all the
// fields, as the missing ones will be resolved there.
//
// EDR Network handles this in a more performant way, so we don't use
// the AutomaticGasPrice for it.
requestHandlers.push(new AutomaticGasPriceHandler(networkConnection.provider));
}
else {
const { FixedGasPriceHandler } = await import("./handlers/gas/fixed-gas-price-handler.js");
requestHandlers.push(new FixedGasPriceHandler(numberToHexString(networkConfig.gasPrice)));
}
if (networkConfig.gas === undefined || networkConfig.gas === "auto") {
const { AutomaticGasHandler } = await import("./handlers/gas/automatic-gas-handler.js");
requestHandlers.push(new AutomaticGasHandler(networkConnection.provider, networkConfig.gasMultiplier));
}
else {
const { FixedGasHandler } = await import("./handlers/gas/fixed-gas-handler.js");
requestHandlers.push(new FixedGasHandler(numberToHexString(networkConfig.gas)));
}
if (networkConfig.from === undefined) {
const { AutomaticSenderHandler } = await import("./handlers/accounts/automatic-sender-handler.js");
requestHandlers.push(new AutomaticSenderHandler(networkConnection.provider));
}
else {
const { FixedSenderHandler } = await import("./handlers/accounts/fixed-sender-handler.js");
requestHandlers.push(new FixedSenderHandler(networkConnection.provider, networkConfig.from));
}
if (networkConfig.type === "http") {
const accounts = networkConfig.accounts;
if (Array.isArray(accounts)) {
const { LocalAccountsHandler } = await import("./handlers/accounts/local-accounts.js");
const resolvedAccounts = await Promise.all(accounts.map((acc) => acc.getHexString()));
requestHandlers.push(new LocalAccountsHandler(networkConnection.provider, resolvedAccounts));
}
else if (isHttpNetworkHdAccountsConfig(accounts)) {
const { HDWalletHandler } = await import("./handlers/accounts/hd-wallet-handler.js");
const hdWalletHandler = await HDWalletHandler.create(networkConnection.provider, await accounts.mnemonic.get(), accounts.path, accounts.initialIndex, accounts.count, await accounts.passphrase.get());
requestHandlers.push(hdWalletHandler);
}
}
return requestHandlers;
}
//# sourceMappingURL=handlers-array.js.map