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

type
status
date
slug
summary
tags
category
icon
password

项目介绍

👏 欢迎来到 FairTicket 教程! 本项目github地址如下:
  • 智能合约
  • Go后端
  • Next前端
 
这是一个完整的去中心化门票抽奖系统,你将亲手实现从智能合约到后端 API,再到前端页面的全栈Dapp。
在本项目中:
  • Solidity 智能合约 将负责登记门票、生成随机数并将中奖结果记录在链上,保证过程公平、公开、可复现
  • Golang 负责与区块链节点交互,提供数据同步与业务 API,让前端和合约无缝衔接。
  • Next.js 前端 为用户提供友好的购票、抽奖、结果查询体验。
通过这个项目,你不仅能学会搭建一套区块链 DApp,还能深入理解如何用智能合约保障抽奖流程的透明与安全。
聚焦,简单
  1. 智能合约只做关键信息存储,无复杂危险的代币交互逻辑(可以将其当作不被篡改的可靠昂贵数据库)。
  1. 后端分为 Api 服务和 Listener 服务,分别用于接收用户请求,以及链上事件监听。只聚焦核心功能的实现,极易理解,不会添加很多实际项目中的一些其他复杂的配置。
  1. 前端也尽量保持简洁。:)
总之,就是简单,简单,还是#%&简单,助你丝滑入门。
学习本项目前,你应该具备以下基础技能
  • 会连接Metamask钱包,了解Ethereum基础知识。
  • 有编程基础,会使用数据库,能看懂基础Solidity,Golang代码。
notion image

FairTicket玩法简介

✨OK,现在介绍一下FairTicket核心流程,介绍独属于Web3的抽票流程吧。
主要角色:项目方 A,参与者 P1......Pn
  1. A 创建项目,并开始项目,进入可参与阶段,项目相关信息存储到智能合约。
  1. P1......Pn选择项目进行参与,参与时选择抽签时属于自己的幸运数字,将用户身份与幸运数字存入智能合约。
  1. A 结束项目,禁止继续参与。
  1. A 开启项目抽票,由链上生成一个随机数 X,将每个用户的信息(账户、幸运数字)与 X 进行运算,得出各个用户最终的幸运数字。
  1. 将所有用户幸运数字进行从大到小排序,选出前 K(票数) 。将这些用户的地址作为叶子节点构造一棵 Merkle 树🌲,得到项目的 MerkleRoot,以及各个用户的 MerkleProof,作为获奖证明和验证证明。
  1. 将项目 MerkleRoot 存储到合约。
  1. 由于结果是由链上随机数 + 用户的不可控信息(Address)+ 用户自己设定的幸运数生成,因此可以保证项目方在逻辑上无法操作。并且结果可以验证,因为链上随机数和用户信息全部在链上,公开透明。
🤔 看到这里,整个核心流程是不是简单又清晰了。

功能梳理

先梳理一下大致功能,具体的功能描述和设计,在具体的实现章节进行展开。
后端
  • 展示项目列表。创建、开始、结束项目。开启抽票。
  • 用户参与项目,获取参与详情,验证。
  • 监听合约的事件(项目创建、开启、结束、抽票事件)
合约
  • 存储项目、参与信息。生成随机数、抛出事件。
前端
  • 钱包插件集成。
  • 展示项目列表。创建、开始、结束项目。开启抽票。
  • 用户参与项目,获取参与详情,验证。

Loading...
从0到1实现一个Dapp全栈项目FairTicket✨(2)Solidity智能合约开发

从0到1实现一个Dapp全栈项目FairTicket✨(2)Solidity智能合约开发