如何在 Berachain 上部署和验证合约 | 开发者必备

本指南详细介绍了如何使用 Hardhat 在 Berachain Artio 测试网上部署 ERC-721 智能合约,并对其进行验证。内容涵盖了环境配置、智能合约开发及验证的各个步骤,并提供了获取更多支持和资源的途径。

如何在 Berachain 上部署和验证合约 | 开发者必备

Berachain Artio 测试网介绍

在如今超过100个区块链技术蓬勃发展的世界中,Berachain 凭借其基于 Cosmos 的 EVM 兼容链,成为开发者构建应用的首选。Berachain 以其 POL 设计、强大的可扩展性和增强的安全性而闻名,为开发者提供了一个理想的环境,同时也对用户具有吸引力,鼓励他们与链进行交互。其对去中心化应用(dApps)的早期采用以及 EVM 兼容性,使其成为开发者构建和测试产品的理想平台。

与其他区块链一样,Artio 测试网是即将推出的 Berachain 主网的关键组成部分,为开发者提供了提前准备和测试工具的试验场。在这里,智能合约的“熊魔法”,尤其是 ERC-721 标准的不可替代代币(NFT)得以实现。 🐻 ❤️

🤔 为什么选择 Hardhat

Hardhat 是以太坊开发中的重要工具。它简化了编译、部署、测试和调试智能合约等各种流程。你可以将其视为个人的区块链工作坊,配备了所有开发去中心化应用所需的工具。

Hardhat 是以太坊开发中的重要工具。它简化了编译、部署、测试和调试智能合约等各种流程。你可以将其视为个人的区块链工作坊,配备了所有开发去中心化应用所需的工具。

🛠️ 我们在构建什么?

在本教程中,我们将通过使用 hardhat-ethers 在 Berachain 测试网(Artio)上创建并部署 ERC-721 智能合约,向您展示整个过程。本教程将重点介绍如何编写、部署以及验证使用 Hardhat 和 ethers.js 的不可替代代币(ERC-721)智能合约,并将其部署到 Berachain 测试网上!

如何在 Berachain 上部署和验证合约 | 开发者必备

使用 Hardhat 成功部署合约的代码片段

如何在 Berachain 上部署和验证合约 | 开发者必备

使用 Hardhat 成功验证已部署合约的代码片段

本教程将主要涵盖合约的初始设置、创建和部署!

⚠️ 前置条件

在开始这个技术教程之前,请确保具备以下条件:

  • 扎实的区块链基础知识和智能合约原理。
  • 熟练掌握 Solidity,这是以太坊合约开发的主要语言。
  • 计算机上已安装最新版本的 Node.js 和 npm,可以通过命令行使用 node -v 进行验证。

步骤 1:初始化 Node.js 项目

首先,创建一个新的 Node.js 项目。这一步是基础,涉及设置一个专用的项目目录并使用 Node 的包管理工具进行初始化。

mkdir bera-hardhatTest && cd bera-hardhatTest
npm init -y 
# Wrote to /Users/dethebera/BeraWork/hardhat-verification-bera/package.json: 
 
# { 
#  "name": "hardhat-verification-bera", 
#   "version": "1.0.0", 
#  "description": "", 
#   "main": "index.js", 
#   "scripts": { 
#     "test": "echo \"Error: no test specified\" && exit 1" 
#   }, 
#   "keywords": [], 
#   "author": "", 
#   "license": "ISC" 
# }

此命令序列将创建一个新目录,然后使用默认参数触发 Node.js 项目的初始化。

步骤 2:设置 Hardhat

在你的项目目录中安装 Hardhat 并初始化一个新的项目环境:

npm install --save-dev hardhat 
 
# added 263 packages, and audited 264 packages in 31s 
 
# 52 packages are looking for funding 
#  run `npm fund` for details 
 
# found 0 vulnerabilities

选择 TypeScript 作为你的项目语言,并按照设置提示进行操作,确保包含 .gitignore 文件和必要的依赖项。

注意:弃用警告

使用 npx hardhat 初始化项目已被弃用,未来将被移除。请使用 npx hardhat init 代替。

npx hardhat init 
# 888    888                      888 888               888 
# 888    888                      888 888               888 
# 888    888                      888 888               888 
# 8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888 
# 888    888     "88b 888P"  d88" 888 888 "88b     "88b 888 
# 888    888 .d888888 888    888  888 888  888 .d888888 888 
# 888    888 888  888 888    Y88b 888 888  888 888  888 Y88b. 
# 888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888 
 
# 👷 Welcome to Hardhat v2.21.0 👷‍ 
 
# ✔ What do you want to do? · Create a TypeScript project 
# ✔ Hardhat project root: · /Users/dethebera/BeraWork/hardhat-verification-bera 
# ✔ Do you want to add a .gitignore? (Y/n) · y 
# ✔ Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)? (Y/n) · y 
 
# npm install --save-dev "@nomicfoundation/hardhat-toolbox@^4.0.0" 
 
# added 273 packages, and audited 537 packages in 40s 
 
# 90 packages are looking for funding 
#   run `npm fund` for details 
 
# found 0 vulnerabilities 
 
# ✨ Project created ✨ 
 
# See the README.md file for some example tasks you can run 
 
# Give Hardhat a star on Github if you're enjoying it! ⭐️✨ 
 
#      https://github.com/NomicFoundation/hardhat

在设置好 Hardhat 之后,使用以下命令验证其是否正常运行:

npx hardhat test 
 
#Downloading compiler 0.8.24 
# Compiled 1 Solidity file successfully (evm target: paris). 
 
 
#   Lock 
#     Deployment 
#       ✔ Should set the right unlockTime (691ms) 
#       ✔ Should set the right owner 
#       ✔ Should receive and store the funds to lock 
#       ✔ Should fail if the unlockTime is not in the future 
#     Withdrawals 
#       Validations 
#         ✔ Should revert with the right error if called too soon 
#         ✔ Should revert with the right error if called from another account 
#         ✔ Shouldn't fail if the unlockTime has arrived and the owner calls it 
#       Events 
#         ✔ Should emit an event on withdrawals 
#       Transfers 
#         ✔ Should transfer the funds to the owner 
 
 
#   9 passing (717ms)

步骤 3:深入 NFT 智能合约开发

现在,深入到项目的核心——NFT 智能合约。导航到 contracts 文件夹并开始编写你的 ERC-721 合约。在此阶段,你将编写实际代码,以定义 NFT 的特性和行为。

进入 contracts 文件夹并创建一个新文件 NFT.sol

如何在 Berachain 上部署和验证合约 | 开发者必备

以下是使用 OpenZeppelin 安全且知名的库的基本模板:

File: ./contracts/NFT.sol

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.23; 
 
import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; 
 
contract NFT is ERC721 { 
    uint256 public currentTokenId; 
 
    constructor() ERC721("NFT Name", "NFT") {} 
 
    function mint(address recipient) public payable returns (uint256) { 
        uint256 newItemId = ++currentTokenId; 
        _safeMint(recipient, newItemId); 
        return newItemId; 
    } 
}

OpenZeppelin 的合约是一个预编写的、安全代码片段的宝库。它们大大减少了开发时间并增强了智能合约的安全性。

npm install @openzeppelin/contracts 
 
# added 1 package, and audited 539 packages in 2s 
 
# 91 packages are looking for funding 
#   run `npm fund` for details 
 
# found 0 vulnerabilities

在你的 NFT.sol 文件中,确保 Solidity 版本与 hardhat.config.ts 中指定的版本一致。解释每个组件的用途,重点说明 OpenZeppelin 合约在你的 NFT 架构中所扮演的角色。

步骤 5:将 MetaMask 和 Berachain Artio 集成到 Hardhat

此步骤涉及将你的 MetaMask 钱包和 Berachain 测试网连接到 Hardhat 环境。这一连接对于在 Berachain Artio 上部署智能合约至关重要。

1.安装 dotenv:一个用于管理环境变量的工具。

npm install dotenv --save 
 
# added 1 package, and audited 538 packages in 612ms 
 
# 91 packages are looking for funding 
#   run `npm fund` for details 
 
# found 0 vulnerabilities

2.配置 .env 文件:将你的 MetaMask 私钥安全地存储在项目根目录中新建的 .env 文件中。

在项目根目录中创建 .env 文件,并添加你的 MetaMask 私钥。若需要从 MetaMask 导出私钥的帮助,请参考此指南。

你的 .env 文件应如下所示:

PRIV_KEY = 0x"your exported private key"

步骤 6:配置 hardhat.config.js

此步骤旨在微调你的 Hardhat 设置,使其与 Berachain 的规范保持一致。更新你的 hardhat.config.ts 文件,添加必要的依赖项和网络配置,特别要注意 Berachain Artio 的自定义链设置。

File: ./hardhat.config.ts

import { HardhatUserConfig } from "hardhat/config"; 
import "@nomicfoundation/hardhat-toolbox"; 
import "@nomicfoundation/hardhat-verify"; 
 
require("dotenv").config(); 
 
const config: HardhatUserConfig = { 
  solidity: { 
    version: "0.8.23", 
  }, 
  networks: { 
    // for testnet 
    "berachain-artio": { 
      url: "https://rpc.ankr.com/berachain_testnet", 
      accounts: [process.env.WALLET_KEY as string], 
      chainId: 80085, 
      // gas: "auto", 
      gasPrice: 10000000000, 
    }, 
    // for local dev environment 
    "berachain-local": { 
      url: "http://localhost:8545", 
      gasPrice: 1000000000, 
    }, 
  }, 
  defaultNetwork: "hardhat", 
  etherscan: { 
    apiKey: { 
      berachainArtio: "berachainArtio", // apiKey is not required, just set a placeholder 
    }, 
    customChains: [ 
      { 
        network: "berachainArtio", 
        chainId: 80085, 
        urls: { 
          apiURL: 
            "https://api.routescan.io/v2/network/testnet/evm/80085/etherscan", 
          browserURL: "https://artio.beratrail.io", 
        }, 
      }, 
    ], 
  }, 
}; 
 
export default config;

步骤 7:创建部署脚本

scripts/ 目录中,编写部署脚本(更新 deploy.ts)。该脚本是将智能合约部署到区块链的蓝图。解释每行代码及其在利用 Hardhat 部署功能中的作用。

File: ./scripts/deploy.ts

import { setBlockGasLimit } from '@nomicfoundation/hardhat-toolbox/network-helpers'; 
import { ethers } from 'hardhat'; 
 
async function main() { 
  const nft = await ethers.deployContract('NFT'); 
 
  await nft.waitForDeployment(); 
 
  console.log('NFT Contract Deployed at ' + nft.target); 
} 
 
// 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; 
});

步骤 8:实际部署

将你的合约部署到 Berachain Artio 上,执行以下命令:

npx hardhat run scripts/deploy.ts --network berachain-artio 
# NFT Contract Deployed at 0xBC862C68CE9EE3aFa762DbF7A51712E3c6E79215

引导 reader 解析部署输出,并确认合约成功上线的步骤。

如何在 Berachain 上部署和验证合约 | 开发者必备

理解对 Hardhat 进行的整体更改

如果你已经理解了上述为适配 Berachain Artio 所做的部署脚本和 Hardhat 配置更改,则可以跳过本节。

默认的 Hardhat deployContract 存在一些问题,但手动构建部署交易并指定 gasLimitgasPrice 可以在 Artio 上运行。必须删除 hardhat 配置文件中的 gas: "auto" 设置。设置为自动会增加部署时间并导致交易提交延迟。
手动构建交易并设置强制的 gas 限制(这可能会增加一定的 gas 费用,但不会显著增加)。

合约验证在 Berachain 上

验证是部署后的关键步骤,它将已部署的字节码与相应的源代码进行公开关联。该过程提高了区块链社区的透明度和信任度。

安装@nomicfoundation/hardhat-verify 插件,并指导用户完成验证过程,强调使用正确的合约地址的重要性。

安装

安装 hardhat-verify 插件,它将帮助直接通过 Hardhat 验证合约。

npm install --save-dev @nomicfoundation/hardhat-verify 
 
# up to date, audited 539 packages in 3s 
 
# 91 packages are looking for funding 
#   run `npm fund` for details 
 
# found 0 vulnerabilities

我们已经包含了以下用于 Routescan API 的代码,它有助于合约的验证。

如何在 Berachain 上部署和验证合约 | 开发者必备

欲了解更多信息,请访问 https://artio.beratrail.io/documentation/recipes/hardhat-verification

验证

现在要验证合约,你只需要已部署合约的合约地址。

npx hardhat verify --network berachain-artio <0x...>

确保替换整个 “<0xaddress>”。正确的示例如下:

npx hardhat verify — network berachain-artio 0x3229075dd6F75bD879F7af07d384A0856c30a806

npx hardhat verify — network berachain-artio <0x3229075dd6F75bD879F7af07d384A0856c30a806> (这是不正确的)

完成后,输出应类似如下。

# [INFO] Sourcify Verification Skipped: Sourcify verification is currently disabled. To enable it, add the following entry to your Hardhat configuration: 
 
# sourcify: { 
#   enabled: true 
# } 
 
# Or set 'enabled' to false to hide this message. 
 
# For more information, visit https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#verifying-on-sourcify 
# The contract 0xBC862C68CE9EE3aFa762DbF7A51712E3c6E79215 has already been verified on Etherscan. 
# https://artio.beratrail.io/address/0xBC862C68CE9EE3aFa762DbF7A51712E3c6E79215#code

如果我们使用终端中提供的链接前往 Berachain Explorer(Beratrail),我们将能够看到合约的源代码已成功通过验证!

如何在 Berachain 上部署和验证合约 | 开发者必备

完整代码

File: ./contracts/NFT.sol

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.23; 
 
import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; 
contract NFT is ERC721 { 
    uint256 public currentTokenId; 
    constructor() ERC721("NFT Name", "NFT") {} 
    function mint(address recipient) public payable returns (uint256) { 
        uint256 newItemId = ++currentTokenId; 
        _safeMint(recipient, newItemId); 
        return newItemId; 
    } 
}

File: ./scripts/deploy.ts

import { setBlockGasLimit } from '@nomicfoundation/hardhat-toolbox/network-helpers'; 
import { ethers } from 'hardhat'; 
async function main() { 
  const nft = await ethers.deployContract('NFT'); 
  await nft.waitForDeployment(); 
  console.log('NFT Contract Deployed at ' + nft.target); 
} 
// 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; 
});

File: ./hardhat.config.ts

import { HardhatUserConfig } from "hardhat/config"; 
import "@nomicfoundation/hardhat-toolbox"; 
import "@nomicfoundation/hardhat-verify"; 
require("dotenv").config(); 
const config: HardhatUserConfig = { 
  solidity: { 
    version: "0.8.23", 
  }, 
  networks: { 
    // for testnet 
    "berachain-artio": { 
      url: "https://rpc.ankr.com/berachain_testnet", 
      accounts: [process.env.WALLET_KEY as string], 
      chainId: 80085, 
      // gas: "auto", 
      gasPrice: 10000000000, 
    }, 
    // for local dev environment 
    "berachain-local": { 
      url: "http://localhost:8545", 
      gasPrice: 1000000000, 
    }, 
  }, 
  defaultNetwork: "hardhat", 
  etherscan: { 
    apiKey: { 
      berachainArtio: "berachainArtio", // apiKey is not required, just set a placeholder 
    }, 
    customChains: [ 
      { 
        network: "berachainArtio", 
        chainId: 80085, 
        urls: { 
          apiURL: 
            "https://api.routescan.io/v2/network/testnet/evm/80085/etherscan", 
          browserURL: "https://artio.beratrail.io", 
        }, 
      }, 
    ], 
  }, 
}; 
export default config;

你也可以通过以下链接在我们的官方 Github 仓库中获取完整代码。

https://github.com/berachain/guides/tree/main/apps/hardhat-contract-verification

总结

本指南旨在成为一个全面的资源,指导读者完成在 Berachain Artio 上部署 ERC-721 NFT 的每一步,特别是合约验证。我们涵盖了使用 Hardhat 部署的基础知识,以及智能合约开发和验证所需的一些细节和定制化内容。

想要开始构建并获取支持?

学习资源:通过我们的文档 https://docs.berachain.com/developers 探索当前可用的更多指南。

https://docs.berachain.com/developers

Discord 社区:加入 Third Web 的 Discord 社区,获取更多帮助、参与讨论,并随时了解 Web3 的最新进展。

⚠️ 仍然遇到问题或有疑问?

前往 Discord,提交工单!

我们的开发者关系团队将很乐意为您提供帮助! 🤝

❤️ 别忘了为这篇文章点赞 👏🏼


原创文章,作者:Monica,如若转载,请注明出处:https://www.dappchaser.com/how-to-deploy-and-verify-contracts-on-berachain-de-the-bera/

发表评论

邮箱地址不会被公开。 必填项已用*标注

联系我们

邮件:contact@dappchaser.com

QR code