hardhat-deploy
Version:
Hardhat plugin for replicable smart contract deployments and easy testing across multiple EVM chains, with support for proxies, diamonds, named accounts, and deployment fixtures
68 lines (63 loc) • 2.18 kB
text/typescript
import 'named-logs-console';
import type {HardhatPlugin} from 'hardhat/types/plugins';
import {task} from 'hardhat/config';
import './type-extensions.js';
import {ArgumentType} from 'hardhat/types/arguments';
import type {Environment} from 'rocketh/types';
import type {NetworkConnection} from 'hardhat/types/network';
const hardhatPlugin: HardhatPlugin = {
id: 'hardhat-deploy',
hookHandlers: {
config: () => import('./hook-handlers/config.js'),
solidity: () => import('./hook-handlers/solidity.js'),
},
tasks: [
task('deploy', 'Deploy contracts')
// .addFlag('skipGasReport', 'if set, skip gas report')
.addFlag({name: 'skipPrompts', description: 'if set, skip any prompts'})
.addFlag({name: 'reportGasUsed', description: 'if set, report gas used'})
.addOption({
name: 'saveDeployments',
description: 'if set to false, do not save deployments',
defaultValue: undefined,
type: ArgumentType.STRING_WITHOUT_DEFAULT,
})
.addOption({
name: 'tags',
description: 'specify which tags to deploy, separated by commas',
defaultValue: undefined,
type: ArgumentType.STRING_WITHOUT_DEFAULT,
})
.addOption({
name: 'pollingInterval',
description: 'specify the polling interval used to check transactions',
defaultValue: undefined,
type: ArgumentType.STRING_WITHOUT_DEFAULT,
})
.addOption({
name: 'defaultBuildProfile',
description:
'specify the default profile to use for compilation. Note that the global option "--build-profile" will override it',
defaultValue: 'production',
type: ArgumentType.STRING,
})
.addFlag({
name: 'noCompile',
description: 'if set, skip compilation',
})
.addFlag({
name: 'reset',
description: 'if set, delete deployments first',
})
.setAction(() => import('./tasks/deploy.js'))
.build(),
],
npmPackage: 'hardhat-deploy',
};
export default hardhatPlugin;
export function getHardhatConnection(env: Environment): NetworkConnection<'generic'> {
if (!env.extra?.connection) {
throw new Error('Hardhat deploy connection not found in the environment');
}
return env.extra.connection as NetworkConnection<'generic'>;
}