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

相关推荐
鬼手点金13 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
软件技术NINI14 小时前
美妆商城html+Css+js 4页
javascript·css·html
蛋蛋的就会顺顺的14 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
码艺-Alimjan15 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
死磕音视频15 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
ZDGJ609915 小时前
国际期货交易时段流动性影响因素
区块链
顽疲17 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
DevUp17 小时前
标着 JavaScript 的 Wiki 与知识库:既不是 CMS 也不是 SSG(番外三)
javascript·node.js·cms
Wang's Blog18 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
kyriewen18 小时前
我上手了 Vite+ 1.0:Node 不用自己装,lint 却翻车了
前端·javascript·程序员