Post on: 2025-9-14Last edited: 2025-9-14Words 3493Read Time 9 min

type
status
date
slug
summary
tags
category
icon
password
首先进行智能合约的设计与开发。因为后端的功能实现,是要调用合约的。并且当我们设计和编写好合约之后,整个项目的核心业务就更加清晰了。
 
合约项目地址

环境安装

Foundry套件 前往Foundry官网
Foundry是一个非常快速,可移植和模块化的工具包,是Rust编写的EVM应用程序开发。包含以下组件:
  • Forge: 构建、测试、调试和部署Solidity合约。
  • Cast: 用于与EVM智能合约交互,发送交易和获取链上数据。
  • Anvil: 一个轻量的本地以太坊开发节点。
  • Chisel: 快速、实用、冗长的Solidity REPL。
在官网对应的安装指南页,可以选择自己喜欢的方式进行安装。

初始化项目

首先,使用 foundry 快速初始化项目。
选择你喜欢的文件夹,运行以下命令
生成的初始化项目如下,会帮我们创建一个 Counter 的简单合约项目。
你可以运行 $ forge build src来尝试编译合约,或者使用$ forge test --mt testFuzz_SetNumber -vvv 来运行测试合约中的testFuzz_SetNumber(uint256 x) 函数。

依赖安装

在本项目中,我们会使用 Openzeppelin 这个开源代码库。
Openzeppelin 是一个实现了很多标准的合约,具备良好的 Gas 优化和安全审计的合约库。
这会将 openzeppelin 库存放在 lib 目录下。
随后,我们在项目的根目录,创建一个 remappings.txt 文件,写入
并执行 $ forge remappings 进行路径映射。

合约编写

🧑‍🏫 如果你没有学习过Solidity,那么请先前往 Solidity by Example 学习Solidity相关基础。
首先定义项目中两个重要的结构体,ProjectParticipant
src 目录下创建 Model.sol 文件,定义项目使用的结构体。

主合约

src 目录下,创建我们的主合约文件 FairTicket.sol
这里我就直接贴完整代码了,因为拆开讲可能过于零碎,我直接在代码注释里面详细说明。

测试合约

一个合格的Solidity项目,对主合约的每个函数,每种情况对进行测试是非常有必要的,要求测试覆盖率需要达到100%。
你需要在 test 文件夹下,创建 FairTicket.t.sol 文件,编写测试合约。
利用 AI 解放枯燥劳动,请用 AI 生成测试用力。只需要选中我们的全部主合约代码,告诉它:根据主合约代码,生成覆盖率100%的测试合约代码。
AI 洋洋洒洒帮我写出了700+行的测试文件,并且几次来回就达成了100%。测试代码目的是为了验证合约的每个功能符合我们的预期,合约安全是Dapp的首要考虑项。

本项目的合约比较简单,相信你的 AI 生成的测试用例也非常简单。
Foundry 提供了非常强大的测试Cheatcode,如果 AI 生成的测试用例中,有你无法理解的 vm.xx()函数,请查看 Foundry 官网文档提供的 Cheatcode Reference。或者直接让 AI 解释。
以下几个命令可以帮助你查看单个测试用例的运行详情
输出测试信息

部署合约

Anvil 初登场
在终端 anvil一下,一个简单的本地 evm 链就启动了,anvil 默认的 ChainID 是31337。同时 anvil 会给我们准备初始的10个账户,按照序号进行对应,比如 Accounts(0) 地址对应是 PrivateKeys(0) 处的私钥。
为了方便部署,我们创建一个部署合约脚本。
script 文件夹下,创建 FairTicket.s.sol
为了安全和方便,我们将私钥和设置保存在 .env 文件中。
创建 .env 文件,并写入
开始部署
请保证 anvil 正在运行。
在空闲终端中,输入。
在本终端中,你会看到类似如下输出。
在 anvil 终端中,你会看到类似如下输出。
script 通常用于在部署项目前,设置一些参数,初始化各个合约的参数、依赖,以及它们之间的关系等。
如果是用 anvil 命令直接运行,每次都是运行一个新的链。如果想要保存链的状态,请使用 anvil --dump-state state.json,可使用 anvil --load-state state.json 恢复链的状态。
不要在任何时候在代码文件中明文编写你的真实私钥!也切记不要上传包含私钥的配置文件!
本用例中使用的是 anvil 测试链的账户,不包含真实资金。

Loading...
从0到1实现一个Dapp全栈项目FairTicket✨(1)项目介绍

从0到1实现一个Dapp全栈项目FairTicket✨(1)项目介绍


从0到1实现一个Dapp全栈项目FairTicket✨(3)Go后端开发

从0到1实现一个Dapp全栈项目FairTicket✨(3)Go后端开发