编程日记:Hardhat远程部署(2022-08-29)

编程学习

行动指南

阶段OKR

  • Object:

    • 阶段目标:搭建最小Hardhat项目。

  • Key Result:

    • 功能一:部署合约

      • [x] 本地部署

      • [x] 远程部署

    • 功能二:验证合约

    • 功能二:测试合约

    • 功能三:创建并引用库

行动框架

  1. 合约部署

    1. 配置网络

    2. 隐藏敏感信息

    3. 部署合约

  2. 合约验证

    1. verify() 函数

      1. 数据准备

        1. @nomiclabs/hardhat-etherscan

        2. ETHERSCAN_API_KEY

      2. td 更改 etherscan apiKey 的配置,方便应用能同时使用 Georli 和 Rinkeby URL

      3. td 了解 Hardhat run 组件

    2. verify() 函数调用

做了什么?

  1. 成功完成了合约的远程部署。

  2. 成功纵览了一遍合约验证的逻辑,需要通过写代码来践行一遍。

  3. 成功使用 Alchemy RPC URL 在 Goerli 测试链上部署合约。

收获了什么知识?

部署合约的步骤

1️⃣ 配置网络

  1. 进入 hardhat.contract.js 配置文件

  2. 修改默认网络:defaultNetworks: "<network_name>"

  3. 添加网络信息:

    • 身份 (Who):chainId

    • 位置 (Where): url: RPC_URL

    • 使用方式 (How):: accounts: PRIVATE_KEY

2️⃣ 隐藏敏感信息

  • .env 文件

    1. 添加 PRIVATE_KEYRPC_URL 的具体内容

  • hardhat.contract.js 文件

    1. 安装 dotenv 包:yarn add --dev dotenv

    2. 引入 dotenv 模块:require("dotenv").config()

      • cm 为什么需要调用 require().config() 方法? Patrick 解释的 "to enable the config" 是什么意思?

    3. 隐藏敏感信息:

      1. 隐藏私钥:const PRIVATE_KEY = process.env.PRIVATE_KEY

      2. 隐藏网址:const RPC_URL = process.env.RPC_URL

      • cm process 的作用是什么?为什么可以接 .env? 可以谷歌搜索 "what is process.env.PRIVATE_KEY" 或者 "dotenv process"

3️⃣ 部署合约

  1. 创建工厂:const Factory = ethers.getContractFactory()

  2. 部署合约:const contract = await Factory.deploy()

  3. 确认合约:await contract.deployed()

    • cm 为什么在 Hardhat 当中,确认合约是 .deployed() 而非 ethers.js 中的 wait()? 两者有什么区别?

  4. 显示合约地址:console.log(contract.address)

收获了什么资源?

今天探索到了一批优秀的 Web3 开发者,重点提及两位:

  1. 郭宇,一位优秀的程序员,有很棒的编程功底,同时认知半径广阔,虽说对新领域的预测可能会被李笑来吐槽,但是作为看家本领的编程还是很牛逼的。关注:TwitterMirror, 代表作:Web3 DApp 最佳编程实践指南

  2. shep, NextDAO 的技术创始人,他为我打开了一片新的程序员大门。推荐关注:link3, Twitter, 以及 NextDAO 中的 web3-develp 频道