前言
本文中,通过 solidity 编写一个简单合约,使用部署工具 hardhat,将合约部署到 rinkeby 测试链上。
前置步骤
在部署合约前需要以下材料:
- Alchemy App Key
- 钱包注册时的 助记词 或 钱包的私钥
- hardhat-deploy插件的安装
Alchemy 的 App-key 和如何注册钱包,可以百度,资料较多,不做介绍。
如何新建一个 hardhat 项目以及插件 hardhat-deploy 如何安装可以参考:
https://hardhat.org/getting-started/
目录结构
我们需要知道的目录及文件
contract:存放编写的合约
deploy:存放部署脚本
utils/network.ts: 一般为获取部署链、账户信息的脚本,本次直接在 hardhat.config.ts 中get,所以本文为空。
.env:存放助记词、私钥、app-key的配置文件。
代码
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: ALCHEMY_RINKEBY,
// accounts : accounts(), //must mnemonic
//看源码,这里我们输入 HardhatNetworkHDAccountsUserConfig 对象,即为通过助记词查找钱包地址。
accounts: {
mnemonic: MNEMONIC_AN,
},
},
},
//hardhat-deploy for local test
namedAccounts: {
deployer: {
default: 0,
},
},
};
export default buildConfig;
.env 文件
001-Greeter-deploy
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'];
编写完代码后,执行
npx hardhat --network rinkeby deploy
在 https://rinkeby.etherscan.io/ 中查询自己的钱包地址,就能看到部署成功的合约啦。