区块链开发入门实战:用 Hardhat 与 Ethers.js 搭建你的第一个 DApp
磐链科技 :在区块链开发领域,Hardhat 与 Ethers.js 已成为以太坊生态中最受欢迎的开发组合。本文将带你从零开始,搭建一个完整的去中心化应用(DApp),涵盖智能合约开发、测试、部署到前端交互的全流程。

开发环境准备
首先需要安装 Node.js,这是整个开发流程的基础。接着在空目录中初始化 Hardhat 项目:
bash
npm install --save-dev hardhat
npx hardhat init
选择创建 JavaScript 项目,Hardhat 会自动生成项目结构。随后安装必要的依赖包,包括 Ethers.js 和测试工具:
bash
npm install --save-dev chai@4 @nomiclabs/hardhat-waffle@hh2 ethereum-waffle @nomiclabs/hardhat-ethers@hh2 ethers@5
编写智能合约
在 contracts/ 目录下创建 Greeter.sol 文件,编写一个简单的合约。这个合约允许设置和读取一条问候语:
solidity
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "hardhat/console.sol";
contract Greeter {
string private greeting;
constructor(string memory _greeting) {
console.log("Deploying a Greeter with greeting:", _greeting);
greeting = _greeting;
}
function greet() public view returns (string memory) {
return greeting;
}
function setGreeting(string memory _greeting) public {
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
greeting = _greeting;
}
}
合约中的 console.log 是 Hardhat Network 提供的强大调试工具,可以在测试时输出日志信息,极大方便了开发调试。
编写自动化测试
在 test/ 目录下创建测试文件。测试使用 Mocha 测试框架和 Chai 断言库,结合 Waffle 提供的匹配器:
javascript
const { expect } = require("chai");
describe("Greeter", function () {
it("Should return the new greeting once it's changed", async function () {
const Greeter = await ethers.getContractFactory("Greeter");
const greeter = await Greeter.deploy("Hello, world!");
expect(await greeter.greet()).to.equal("Hello, world!");
const setGreetingTx = await greeter.setGreeting("Hola, mundo!");
await setGreetingTx.wait();
expect(await greeter.greet()).to.equal("Hola, mundo!");
});
});
运行 npx hardhat test 即可执行测试。测试中 ethers.getContractFactory() 用于获取合约工厂,deploy() 部署合约,wait() 等待交易上链确认。
部署与前端集成
Hardhat 内置的 Hardhat Network 提供了本地区块链模拟环境,非常适合开发和测试。启动本地节点并在另一终端执行部署脚本,可将合约部署到本地区块链。
部署完成后,前端通过 Ethers.js 与合约交互。前端需要两样东西:合约 ABI(从编译产物中获取)和合约部署地址。Ethers.js 的 Contract 对象封装了合约方法,通过它前端可以调用只读方法查询数据,也可以通过 connect(signer) 方法连接钱包签名后执行写操作。完整的 DApp 通常包含钱包连接功能(如 MetaMask)、状态读取、以及触发链上交易的能力。本文来自磐链科技 https://www.panliankeji.com/ 编辑!