阅读时间 6 分钟
概述
像Hardhat这样的以太坊开发环境,让开发智能合约和以太坊节点变得更加轻松。它们提供了一套工具,可无缝地编写、测试和部署智能合约。在本指南中,我们将使用 Hardhat 和 Quicknode 创建一个“Hello World”智能合约,并将其部署到 Sepolia 测试网。
先决条件
- 一个 Quicknode 账户(点击此处免费注册)
- 一款兼容EVM的钱包(例如MetaMask)
- 已安装Node.js
- 已安装Hardhat(本指南中也将对此进行说明)
- 命令行界面/终端窗口
- 代码或文本编辑器(例如 VSCode)
- Sepolia 测试网上的 ETH(您可以使用Quicknode 多链水龙头免费领取一些)
什么是Hardhat?
Hardhat是一个开发环境,可帮助开发者编译、部署、测试和调试其以太坊应用程序。它拥有一些最为清晰、详尽的文档。Hardhat 还提供了类似于 JavaScript 的 console.log() 功能,用于调试。此外,Hardhat 还拥有众多插件,进一步扩展了其功能。
安装 Hardhat 及其他依赖项
我们将使用npm 安装 Hardhat,npm 是node.js 自带的。
首先,创建一个新的项目目录并进入该目录。此处您可以随意使用自己的名称代替:
mkdir HardhatTutorial
cd HardhatTutorial
在项目目录下打开终端/命令提示符,并输入以下命令。
npm init --y
npm install --save-dev hardhat
既然已经安装了 Hardhat,我们就来创建一个新的 Hardhat 项目吧。我们将使用 npx 来完成这一操作。npx 用于处理 Node.js 可执行文件。
npx hardhat init
此时将显示 CLI Hardhat 界面。选择“创建一个空的 hardhat.config.js 文件”,然后按回车键。

现在,让我们安装使用 Hardhat 所需的其他依赖项。
npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai
我们需要这些依赖项来编写合同的自动化测试。
使用 npm 安装包时最常见的问题可能是 `node-gyp` 出现的内部错误。您可以按照此处的 node-gyp 安装说明进行操作。
注意:如果您遇到 node-gyp 相关问题,请确保您的 Python 版本与上述说明中列出的兼容版本之一一致。
另一个常见问题是缓存过期。只需在终端中输入以下命令,即可清除 npm 缓存:
npm cache clean
现在,让我们为钱包生成一个私钥,准备一些用于支付 gas 费的测试以太币,并部署一个以太坊节点;这些都是部署智能合约所必需的。
生成/检索私钥
我们需要一个以太坊钱包,以便支付智能合约的部署费用。
创建钱包并获取其私钥后,我们将在下一节中将其添加到 Hardhat 配置文件(例如 hardhat.config.js)中。
您可以按照 Quicknode 的指南,使用JavaScript、Ruby、Python、Go 或PHP 生成私钥和以太坊地址。
要从您的MetaMask钱包中获取私钥,请按照以下说明操作:
- 点击浏览器上的 MetaMask 图标(一个风格化的狐狸头)。如果看不到该图标,请检查浏览器的“扩展程序”页面。
- 点击⋮图标,然后选择“账户详情”。
- 然后,点击“显示私钥”,并按照提示操作。

复制并保存私钥;后续步骤中我们会用到它。
建议将私钥等敏感信息存储在.env文件中,并通过环境变量将其导入配置文件,或者专门为开发目的创建一个新的辅助 MetaMask 钱包。
获取测试网以太币
我们将把合约部署到 Sepolia 测试网。首先,我们需要在MetaMask钱包中准备一些测试用 ETH,这一点我们在上一步中已经提到过。
访问Quicknode 多链水龙头,连接您的钱包或粘贴钱包地址。您需要选择以太坊链和Sepolia网络,然后申请资金。
注意:您需要在以太坊主网账户中至少持有 0.001 ETH,才有资格使用该水龙头。

配置 Quicknode 以太坊端点
要在以太坊的Sepolia区块链上部署我们的合约,我们需要访问一个以太坊Sepolia节点。为此,我们可以使用几乎任何以太坊客户端,例如Geth或OpenEthereum(原名Parity)。由于仅为部署一个合约而进行这些操作稍显繁琐,我们只需在此处创建一个免费的Quicknode账户,即可轻松生成一个以太坊端点。 创建免费的以太坊 Sepolia 端点后,请将 HTTP 提供商 URL 保存好,因为在下一节中会用到它。

配置文件的设置
打开hardhat.config.js文件,并将以下内容粘贴进去:
require("@nomiclabs/hardhat-waffle");
const endpointUrl = "ADD_YOUR_QUICKNODE_URL_HERE";
const privateKey = "ADD_YOUR_PRIVATE_KEY_HERE";
module.exports = {
solidity: "0.8.21",
networks: {
sepolia: {
url: endpointUrl,
accounts: [privateKey],
},
},
};
将ADD_YOUR_PRIVATE_KEY_HERE替换为上一步中获取的私钥,将ADD_YOUR_QUICKNODE_URL_HERE替换为上一步中获取的 HTTP 节点 URL,然后保存文件。
上述代码的说明:
-
第 1 行:导入 hardhat-waffle 软件包。
-
第 3-4 行:定义端点 URL 和私钥。
-
第 6-14 行:提及 Solidity 版本并定义sepolia 网络。
创建合同
现在,针对我们的合约,创建一个名为 contracts的新目录,并在其中放入一个名为 HelloWorld.sol的新文件。
mkdir contracts && echo > contracts/HelloWorld.sol
将以下代码复制并粘贴到你的HelloWorld.solSolidity 文件中:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
string saySomething;
constructor() {
saySomething = "Hello World!";
}
function speak() public view returns(string memory) {
return saySomething;
}
}
上述代码的说明:
- 第 1 行:指定SPDX 许可类型,这是 Solidity ^0.6.8 之后的新增内容。
每当智能合约的源代码向公众公开时,这些许可协议都有助于解决或避免版权问题。如果您不想指定任何许可类型,可以使用特殊许可“UNLICENSED”,或者直接跳过整个注释(这不会导致错误,只会触发警告)。
-
第 2 行:声明 Solidity 版本。
-
第4行:开始我们的名为
HelloWorld. -
第 6 行:创建变量
saySomething类型为字符串。 -
第 8-10 行:调用构造函数,并将字符串“Hello World!”存储在
saySomething变量。 -
第 12-14 行:创建一个名为
说话类型为 public,它将返回存储在saySomething变量。
保存文件,并使用以下 Hardhat 命令编译合约。
npx hardhat compile
如果你的合约编译成功,输出结果将如下所示:

部署“Hello World”智能合约
现在要部署我们的合约,让我们在名为scripts 的新目录中创建一个deploy.js文件。
mkdir scripts && echo > scripts/deploy.js
将以下内容复制并粘贴到你的 deploy.js 文件中:
async function main() {
const [deployer] = await ethers.getSigners();
console.log(
"Deploying contracts with the account:",
deployer.address
);
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();
console.log("Contract deployed at:", contract.address);
const saySomething = await contract.speak();
console.log("saySomething value:", saySomething);
}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});
上述代码的说明。
-
第 1 行:调用名为
主页. -
第3行:获取用于签署交易的以太坊地址,并将其存储在部署者地址中。
-
第 5-8 行:将以太坊地址与一个字符串一起输出到控制台。
-
第 10 行:调用 ethers.js 方法 ContractFactory. 这将查找
HelloWorld.sol文件,并返回一个我们可以使用的实例ContractFactory启用方法。 -
第 11 行:调用 deploy 方法
ContractFactory部署该合约。 -
第 13 行:将已部署合约的地址打印到控制台。
-
第 15 行:调用函数
说话已部署合同的。 -
第 17 行:打印函数的返回值
说话发送到控制台。 -
第 20 行:调用函数
主页. -
第 21-24 行:检查是否存在错误,如有错误则输出错误信息,并退出进程。
保存文件,然后运行以下命令来部署合约。
npx hardhat run scripts/deploy.js --network sepolia
合约部署成功后,您将看到一条输出信息,其中包含已部署合约的地址以及 speak 函数的返回值——即saySomething 的值。

我们可以通过将已部署合约的地址复制并粘贴到Sepolia Etherscan 的搜索栏中来验证部署情况。这样就会显示有关已部署合约的信息。

结论
就是这样!现在你已经掌握了使用 Hardhat 创建、编译和部署智能合约的基础知识。但这还不是全部——Hardhat 还提供了用于测试和调试代码的工具。如需更深入地了解,请查阅Hardhat 的官方文档。
订阅我们的新闻通讯,获取更多关于以太坊的文章和指南。如有任何疑问,欢迎通过Discord上的专属频道联系我们,或使用下方的表单提供反馈。关注我们的Twitter账号和Telegram 公告频道,随时掌握最新动态。
我们 ❤️ 您的反馈!
如果您有任何反馈或对新主题的建议,请告诉我们。我们非常期待您的来信。
