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

相关推荐
Dream-Y.ocean1 分钟前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
nice_lcj5208 分钟前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐20 分钟前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm1 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶2 小时前
慢就是快16-1协程
开发语言·前端·python
前端小D2 小时前
JS核心底层
前端·javascript
Dovis(誓平步青云)2 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄2 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
codeejun3 小时前
每日一Go·MySQL-11、覆盖索引 & 回表原理
javascript·数据库·mysql
.痞老板.4 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee