Hardhat测试网部署合约

Hardhat是一个solidity编译器,相比较于Remix这种网页端的编辑器,Hardhat可以通过vs code进行安装,以一个安装包的形式安装到项目路径下。

安装完成后运行 npx hardhat,按照指示可以在当前文件夹下创建一个hardhat项目。其实就是在当前的React框架下增加几个文件夹和模板文件。

进入到contracts文件夹下,即可新建我们的sol文件,进行合约的编写了。通常还需要安装一下@openzeppelin/contracts这个标准代码库。

编写完成sol文件之后,进入到scripts文件夹下,编辑deploy合约的js脚本文件。在hardhat提供的模板文件基础上将合约名称等参数修改下即可。

在项目文件夹路径下还有一个hardhat.config.js文件,在这个文件中需要定义我们需要将合约部署到的网络。以部署到测试网为例,在module.exports中修改如下代码:

module.exports = {

  solidity: "0.8.4",

  networks: {

    rinkeby:{

      url: process.env.REACT_APP_RINKEBY_RPC_URL,

      accounts: [process.env.REACT_APP_PRIVATE_KEY],

    },

  },

  etherscan:{

    apiKey: process.env.REACT_APP_ETHERSCAN_API,

  }
}

其中,REACT_APP_RINKEBY_RPC_URL是测试网的节点地址,需要我们去rinkeby自行申请。REACT_APP_PRIVATE_KEY是钱包私钥。REACT_APP_ETHERSCAN_API是我们在etherscan拿到的api key。这些参数涉及到数据安全,因此需要单独存放在.env文件中,通过process.env来获取。

这些代码修改好之后,在vs code终端中输入以下命令:

npx hardhat run scripts/deploy.js --network rinkeby

代码执行后,终端会显示出合约部署到测试网的地址,过一两分钟就可以在测试网(rinkeby.etherscan)上搜到对应的合约了。这边需要消耗一定的gas作为合约部署的费用,测试网的ETH需要去水龙头领取一下。

上传的合约默认是没有经过etherscan验证的,在rinkeby.etherscan上只能看到合约对应的一堆bytes。因此我们需要将合约进行验证。

首先需要安装以下依赖,并在hardhat.config.js中导入依赖。

npm i -D @nomiclabs/hardhat-etherscan

然后我们在终端中输入一下代码进行合约验证:

npx hardhat verify --network rinkeby 0x合约地址 初始化变量

需要注意的是,如果合约中需要传入参数进行变量的初始化,那么需要在合约地址后面加上我们需要传入的参数。比如我们的合约需要外部传入一个unit值作为tokenMaxSupply,那么我们这边就需要在合约地址后面增加一个 10000。这个10000就是合约的最大供应量。10000这个数值需要和之前通过hardhat deploy合约的时候传入的参数一致。

这样,合约就可以通过验证了,我们可以通过etherscan很方便的查看、调用合约的外部函数,并且可以看到与合约进行交互的transaction。合约的交互信息会保留在测试网上,方便下次的测试。