← BACK · 返回原型集
DEMO LIVE 09B / DEV JOURNEY 00:00 / 00:30 VRF_ONLY · BSC
30-SECOND DEMO · 开发视角

30 秒看完一张票 · 开发视角 REQUEST · LOCK · LEDGER · DRAW · SETTLE

给开发同学看的同一笔票:从 TG initData 登录、活动查询、号码锁定、账本扣款,到 VRF_ONLY 开奖和中奖履约。重点看服务边界、状态变化、链上随机数、签名隔离

SCENE · 01

打开 TG Mini AppLAUNCH

用户在 Telegram 里点击官方 Bot 的 Open App 按钮,TG Mini App 在 TG 内嵌打开。

前端拿到 initData 后送给后端校验签名,验证通过即登录 —— 用户不需要输入任何东西

幕后 / Behind the scenes gateway 校验 initData → user-service 查 TG ID 找到账户(不存在则创建)→ 返回 JWT
SCENE · 02

挑活动PICK ACTIVITY

首页展示进行中的活动。Top banner 是高奖品 + 高人气活动,下面是按进度排序的列表。

用户被 iPhone 16 Pro 活动吸引(剩 23/1024 张,要开奖了)。

幕后 / Behind the scenes game-service /api/rounds?status=open 走 Redis 缓存 → 返回活动列表 + 实时进度(每 2s websocket 推 1 次)
SCENE · 03

活动详情ACTIVITY DETAIL

奖品 / 票价 / 已售 / 倒计时一屏可见。PRD 6 的最小可玩集合

购票 进入号码池。

幕后 / Behind the scenes game-service /api/rounds/{id} · 包含 prize / price / sold / max / remainingSeconds
SCENE · 04

挑号码PICK NUMBERS

1024 个号码池可视化。已售号码画掉、自己买过的高亮、可挑的留白。

用户挑了 0512 · 0768 · 1024 三个号 —— 3 USDT。

幕后 / Behind the scenes 点击瞬间 game-service 在 Redis 加分布式锁(30s TTL),避免别人同时抢
14:28 5G
1U夺宝
PROVABLY FAIR · ON-CHAIN
夺宝大厅
23 LIVE
🔥 火爆活动 · ENDS SOON
iPhone 16 Pro · 256GB
1 USDT · 1 张号码
Apple Watch S10
剩 562/1024
1
USDT
🎧
AirPods Pro 2
剩 358/1024
1
USDT
iPhone 16 Pro
#00428
📱
iPhone 16 Pro · 256GB · 钛金属
价值 ~1280 USDT
起拍
1 USDT
奖品数
1 台
总号码
1024
售出 / Sold821 / 1024
购票 · BUY TICKET
挑号码
3 / 已选
显示 0001–0064 203
已选号码
0512 0768 1024
3
USDT
立即购买 · BUY 3 USDT
确认订单
CONFIRM PURCHASE
100.00 97.00USDT
活动 / Round#00428
号码 / Numbers0512, 0768, 1024
扣款 / Amount3.00 USDT
链 / Chain链下账本(开奖时上链)
确认 · CONFIRM
#00428 · 即将开奖
FILLING UP
▸ ALMOST FULL
满约即开
售出 / SOLD
1021 / 1024
BSC BLOCK HEIGHT
49,128,773
开奖中
DRAWING
▸ ON-CHAIN RANDOMNESS
链上抽奖中
1
game-service 检测满约 round.sold === round.max → 触发 DrawEngine
2
sign-service 签名 VRF 请求 tx 独立 subnet · KMS 加密 · IP 白名单
3
chain-service 广播到 BSC 调用 VRFConsumer.requestRandomness()
4
Chainlink VRF 回调 fulfillRandomWords() · 随机数上链
5
game-service 计算中奖号 randomness mod 1024 = winnerNumber
🎉
恭喜中奖
1024
你买的 1024 号是中奖号
奖品:iPhone 16 Pro · 256GB
开奖凭证 · tx 0x9b2c...4d7e
BLOCK 49,128,901 · 区块浏览器可验
领取奖品
CLAIM PRIZE
📱
iPhone 16 Pro · 256GB
价值 ~1280 USDT
72 小时内选择领取方式:
实物:TG 客服联系收件信息,平台寄送
USDT:按市价折算,链上到账
领取实物
换 USDT
🔗 ON-CHAIN PROOF · tx 0x9b2c...4d7e ↗
SCENE · 05

确认订单PAY CONFIRM

底部 sheet 弹出,余额从 100 USDT 扣到 97 USDT,链下账本,不是链上 tx。

用户点确认 → 扣款 → 锁号 → 写订单一气呵成。

幕后 / Behind the scenes wallet-service 在 MySQL 事务内:扣余额 + 记账本流水 + 标号码 SOLD + 写订单 → 释放 Redis 锁
SCENE · 06

满约触发FILL TRIGGER

1021 → 1024 张售完。game-service 检测到满约触发条件 → 准备开奖。

顶部 block height 滚动,提示 BSC 链在出块 —— 接下来这个数字就是开奖凭证的一部分。

幕后 / Behind the scenes game-service 每笔购票后检测 sold === max;满约时异步进入 DrawEngine。
SCENE · 07

开奖(VRF_ONLY)DRAW · CHAINLINK VRF

5 步链路:game-service 检测满约 → sign-service 签名 VRF 请求 tx → chain-service 广播到 BSC → Chainlink VRF Coordinator 异步回调 → game-service 用回调的随机数算中奖号。

整个过程随机数来自链上、可验证,平台无法干预;结算(mod 1024)在链下省 gas。

幕后 / Behind the scenes sign-service 是唯一持有热钱包私钥的服务;VRFConsumer.sol 部署在 BSC 上。
注:VRF 仅 BSC 可用;TRON 上目前没有等价的 Chainlink VRF。
SCENE · 08

中奖揭晓WIN REVEAL

中奖号 1024 命中用户买的号 —— 撒花。

关键:附 tx hash + 区块高度 + 区块浏览器入口,让用户能独立验证开奖结果不是平台编的。

幕后 / Behind the scenes message-service 同步触发 Bot 推送 → 用户在 TG 私聊里也能看到这条中奖通知和 tx hash。
SCENE · 09

领奖CLAIM PRIZE

用户在 72 小时内选择领奖方式:实物寄送 / 折 USDT 到余额。

实物:进入实物履约流程(运营后台 fulfillment 模块);USDT:按市价 + 链上发款(sign-service 签名)。

幕后 / Behind the scenes 实物走 admin · fulfillment · USDT 走 wallet-servicesign-servicechain-service broadcast
01 LAUNCH 02 HOME 03 DETAIL 04 PICK 05 PAY 06 FILL 07 DRAW 08 WIN 09 CLAIM

关键服务 SERVICES TOUCHED

gateway · user · game · wallet · sign · chain · sms
每个服务在不同 scene 出现,共同完成一笔票。
详见 architecture.html

RNG 路径 RANDOMNESS PATH

本演示走 VRF_ONLY:Chainlink VRF 提供随机数,链下结算。
其他 2 种引擎(FULL_CHAIN / BACKEND)见 draw-modes-explainer

时序详情 DETAILED FLOWS

本页是 30 秒概览。
每个 scene 背后的完整请求 / 事件链,见 tech-flows.html 三张时序图。