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

相关推荐
csdn2015_1 小时前
java springboot项目,接收到的参数多个逗号
java·开发语言·spring boot
码艺-Alimjan1 小时前
维吾尔语数字转文本
java·javascript·python·算法·go
可乐鸡翅yeah_1 小时前
hls.js 多实例并发踩坑,多视频页面播放器内存与冲突问题解决
开发语言·前端·javascript·音视频·hls·m3u8·m3u8在线播放
俊昭喜喜里1 小时前
c#中的构造函数
开发语言·数据库·c#
磐链科技1 小时前
Web3钱包开发中的交易风控体系:模拟执行、沙盒隔离与授权拦截
web3·区块链
hahaha60161 小时前
HLS高层次综合设计--axi之burst纠偏
开发语言·算法·fpga开发·c#
SunnyDays10111 小时前
如何使用 Python 给 PDF 添加附件:文档附件与附件注释
开发语言·python·pdf
雪芽蓝域zzs1 小时前
第十四节:后端返回权限动态路由
前端·javascript·vue.js
小磊哥er1 小时前
Wonder Claude Code - 一个可运行的、教学级的 Claude Code 精简复刻
javascript·ai编程