使用hardhat 部署 solidity智能合约到测试网

概述

在刚开始学solidity 智能合约的时候,我们大多数都是通过Remix 在线编辑器完成合约编辑部署和测试等流程的工作。毫无疑问,remix在调试的时候是十分的方便的。但是随着编写的合约越来越多,仅仅通过remix来部署就会有些吃力了,各种的参数传递,合约之间的部署的先后关系,以及合约文件的管理,都需要能够工程化的处理这些流程。
目前以及有一些比较成熟的开发,调试,部署等全流程的框架了,其中用的比较多是truffle和hardhat。 hardhat 相对truffle 更新功能也更完善,使用起来也很方便。
下面就记录了我自己使用hardhat的流程以及遇到的一些问题。

项目初始化

mkdir newFloder 
cd newFloder
# 初始化项目
npm init
# 使用npm 包管理器安装 hardhat
npm install --save-dev hardhat
# 使用hardhat 初始化
npx hardhat

上述动作做的时候可能会让输入一些东西无非就是一些项目名,版本号之类的,之前按enter 默认就好了, 做完之后就得到一个初始化好的项目。

初始化好的项目结构

项目结构说明

contracts: 合约目录,这里存放的都是智能合约
node_modules: 这里存放的是一些依赖第三方的模块
scripts: 这里主要存放部署或者是合约调用的脚本
test: 测试脚本
hardhat.config.js : hardhat的配置文件
package.json: npm 初始化的生成,应该是npm的配置文件,我没改过这个,不怎么关心它

配置文件说明

hardhat的配置全都在 hardhat.config.js 这个文件里。
修改前的代码

require("@nomiclabs/hardhat-waffle");

// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async () => {
  const accounts = await ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  solidity: "0.7.3",
};

我们如果要部署到测试网,需要修改一些配置。
添加的配置都是 module.exports里的。
在此之前还需要两个准备工作

注册以太坊网关

首先要去 infura 上注册一个自己的以太坊的网关,这个网关提供了链下网络访问链上的入口。
如果有自己的节点也可以使用自己搭建的节点地址做为以太坊的入口。

如果没有的话可以用我下面的infura 账号,但是这个有每日的访问次数上限,好不好使的不一定,所以最好还是有个自己的。

导出钱包私钥

在metamask 的账户详情,有个导出私钥的功能,在这里把私钥拿到。并且保证这个钱包里有足够的ETH可以用来部署合约。ETH的获取可以通过水龙头获得。
在这里插入图片描述

准备工作做完之后就开始编写配置文件,主要就是把刚才的网关地址和私钥添加在配置里。如下所示。

module.exports = {
  networks: {
    rinkeby: {
      url: "https://rinkeby.infura.io/v3/7d00bf84530c4264969a4f0f231de8b6",
      accounts: ["自己的钱包私钥"],
    },
  },
  solidity: "0.7.3",
};

部署

部署主要用到的是 scripts的脚本.

const hre = require("hardhat");

async function main() {
    
    
  // 获取合约文件
  const Greeter = await hre.ethers.getContractFactory("Greeter");
  // 获取合约部署的对象
  const greeter = await Greeter.deploy("Hello, Hardhat!");
  // 执行部署
  await greeter.deployed();
  // 打印一下部署的结果
  console.log("Greeter deployed to:", greeter.address);
}

main()
  .then(() => process.exit(0))
  .catch(error => {
    
    
    console.error(error);
    process.exit(1);
  });

下面就是执行的命令和执行的结果输出,在执行脚本之前,会编译contracts目录下的合约。

YanRangnNan:hardhat_test abakus$ npx hardhat run scripts/sample-script.js  --network rinkeby 
Compiling 2 files with 0.7.3
Compilation finished successfully
Greeter deployed to: 0x423F294328c1046F283955b15031A3C781422749

可以通过区块链浏览器 查看我们部署的合约
OK,我们已经完成了通过hardhat 部署合约到区块链上了。
如果过程中遇到问题欢迎留言交流

下一篇:以太坊智能合约交互调用,web3.js,web3j两种方式实现

猜你喜欢

转载自blog.csdn.net/qq_36838406/article/details/118112718
今日推荐