在工程项目 scripts 中,我们可以找到一个名为 deploy.js,这个文件就是我们部署合约使用的脚本文件
const hre = require("hardhat");
async function main() {
const currentTimestampInSeconds = Math.round(Date.now() / 1000);
const ONE_YEAR_IN_SECS = 365 24 60 * 60;
const unlockTime = currentTimestampInSeconds + ONE_YEAR_IN_SECS;
const lockedAmount = hre.ethers.utils.parseEther("1");
const Lock = await hre.ethers.getContractFactory("Lock");
const lock = await Lock.deploy(unlockTime, { value: lockedAmount });
await lock.deployed();
console.log(
`Lock with 1 ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}`
);
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
复制
我们打开文件可以看到文件的代码很简单,其中
const hre = require("hardhat");
复制
定义了一个 hardhat 运行时环境,按照官方介绍, 允许在 hre 可访问的地方使用任何功能,在下面的实际部署代码中,我们也可以看到,ehters 对象也是从 hre 中获取的
const currentTimestampInSeconds = Math.round(Date.now() / 1000);
const ONE_YEAR_IN_SECS = 365 24 60 * 60;
const unlockTime = currentTimestampInSeconds + ONE_YEAR_IN_SECS;
const lockedAmount = hre.ethers.utils.parseEther("1");
复制
这部分代码,主要是在处理合约部署时需要的初始化变量,并不是我们部署合约必须的环节
const Lock = await hre.ethers.getContractFactory("Lock");
const lock = await Lock.deploy(unlockTime, { value: lockedAmount });
await lock.deployed();
复制
在我们第二节课程里讲述了上面的代码,大家如果没有印象了可以翻阅一下上一节课,这部分代码主要就是声明合约对象,然后调用 deploy 方法进行合约部署
console.log(
`Lock with 1 ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}`
);
复制
打印日志
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
复制
最后是调用部署合约方法
在真正部署合约的时候,还需要介绍一下区块链网络配置,下面我们来看看 hardhat 里面是如何进行区块链网络配置的
二、区块链网络配置
1、hardhat 配置文件
项目根目录里可以看到一个名为 hardhat.config.js 的配置文件,这个配置文件主要用来配置 solidity 编译配置以及 hardhat 需要使用的一些配置信息
solidity: "0.8.17",
复制
上面代码配置了 solidity 编译版本,我们可以根据需要自行修改,请注意.sol 文件里使用的 solidity 版本声明也需要同步修改