Skip to content

Instantly share code, notes, and snippets.

@gdekefir
Last active October 25, 2023 13:08
Show Gist options
  • Save gdekefir/913cc8e3d8e4f6d5ba40556daa85dab9 to your computer and use it in GitHub Desktop.
Save gdekefir/913cc8e3d8e4f6d5ba40556daa85dab9 to your computer and use it in GitHub Desktop.
import { ethers } from 'hardhat';
import fs from 'fs';
import path from 'path';
async function main() {
const envArgs = process.env.SCRIPT_ARGS
? process.env.SCRIPT_ARGS.split(' ')
: [];
const [contractName, ...args] = envArgs;
const contractsDir = path.join(__dirname, '..', 'contracts');
const contractExists = fs.existsSync(
path.join(contractsDir, `${contractName}.sol`)
);
if (!contractExists) {
console.error('There is no contract by that name');
process.exit(1);
}
const processedArgs = args.map((arg) =>
!isNaN(Number(arg)) && !arg.includes('"')
? Number(arg)
: arg.replace(/"/g, '')
);
const ContractFactory = await ethers.getContractFactory(contractName);
const contract = await ContractFactory.deploy(...processedArgs);
await contract.waitForDeployment();
const address = await contract.getAddress();
console.log(`Contract "${contractName}" deployed at address: ${address}`);
}
main().catch((error) => {
console.error(error);
process.exit(1);
});
import { HardhatUserConfig, task } from 'hardhat/config';
import '@nomicfoundation/hardhat-toolbox';
import { HardhatRuntimeEnvironment } from 'hardhat/types';
import { execSync } from 'child_process';
task('deploy-universal', 'Runs a deploy script file with hardhat run')
.addOptionalParam('netname', 'The network to run on', 'hardhat')
.addPositionalParam('contractName', 'The name of the contract to deploy')
.addOptionalVariadicPositionalParam(
'args',
'Additional arguments to pass to the script'
)
.setAction(async (taskArgs, hre: HardhatRuntimeEnvironment) => {
const allArgs = [taskArgs.contractName].concat(taskArgs.args || []);
const argsString = allArgs.join(' ');
const command = `SCRIPT_ARGS="${argsString}" npx hardhat run scripts/deployUniversal.ts --network ${taskArgs.netname}`;
execSync(command, { stdio: 'inherit' });
});
const config: HardhatUserConfig = {
solidity: '0.8.19',
};
export default config;
@gdekefir
Copy link
Author

npx hardhat deploy-universal --netname localhost MyContract arg1 arg2 arg3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment