区块链开发入门实战:用 Hardhat 与 Ethers.js 搭建你的第一个 DApp

区块链开发入门实战:用 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/ 编辑!

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
李少兄3 天前
JavaScript 隐式全局变量解析
javascript
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int3 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端