原文:hardhat框架使用与常见编译部署的问题
1 hardhat框架命令
初始化工程:
npm init --yes
编译:
npx hardhat compile
部署
//默认本地部署
npx hardhat --network
localhost
deploy
//指定脚本部署到本地网络:
npx hardhat run --network localhost scripts/deploy.js
//部署到主网/测试网
npx hardhat run --network ropsten
scripts/deploy.js
测试
//(本地起的链测试)
npx hardhat test
//使用ganache测试
npx hardhat --network localhost test
进入控制台,连接本地链
npx hardhat console --network localhost
启动hardhat自带的ganache链
npx hardhat node
也可以用本机的ganache软件单独启动:
![](https://img-blog.csdnimg.cn/87b0d39bc638480c9464b0a08da2e1ae.png)
2 hardhat.config.js配置信息
module.exports = {
solidity: {
compilers: [ //可指定多个sol版本
{version: "0.4.26"},
{version: "0.5.12"},
{version: "0.6.12"}
]
},
networks: {
localhost: {
url: "http://127.0.0.1:8545"
},
//填写URL和账户私钥,
ropsten: {
url: "https://ropsten.infura.io/v3/",
accounts: [ROPSTEN_PRIVATE_KEY1,ROPSTEN_PRIVATE_KEY2,ROPSTEN_PRIVATE_KEY3]
},
}
};
3 使用ENV配置文件
工程下创建一个配置文件,命名为.env, 里面保存助记词、私钥、链节点URL等信息。
MNEMONIC_AN="xxx,yyyy,"
RINKEBY="https://rinkeby.infura.io/v3/"
配置文件hardhat.config.ts, 设置环境
import {HardhatUserConfig} from "hardhat/types";
import 'hardhat-deploy';
// import {accounts} from './utils/network';
const ALCHEMY_RINKEBY = process.env.ALCHEMY_RINKEBY;
const MNEMONIC_AN = process.env.MNEMONIC_AN;
const buildConfig: HardhatUserConfig = {
solidity: {
compilers: [
{
version: '0.7.5',
settings: {
optimizer: {enabled: true, runs: 200},
evmVersion: 'istanbul',
},
},
],
},
//如果部署的是其他测试链,应添加其他设置。
networks: {
rinkeby: {
url: RINKEBY,
// accounts : accounts(), //must mnemonic
//看源码,这里我们输入 HardhatNetworkHDAccountsUserConfig 对象,即为通过助记词查找钱包地址。
accounts: {
mnemonic: MNEMONIC_AN,
},
},
},
//hardhat-deploy for local test
namedAccounts: {
deployer: {
default: 0,
},
},
};
export default buildConfig;
编写deploy.js
import {HardhatRuntimeEnvironment} from 'hardhat/types';
import {DeployFunction} from 'hardhat-deploy/types';
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const {deployments, getNamedAccounts} = hre;
const {deploy} = deployments;
const {deployer} = await getNamedAccounts();
//这里建议打印部署者地址,检查是否是自己的地址
console.log(deployer)
await deploy('Greeter', {
from: deployer,
//输入constructor的参数
args: ['we success!'],
log: true,
});
};
export default func;
func.tags = ['Greeter'];