BabySteps 是一个运行在 Sepolia 测试链上的亲子成长 DApp 概念验证:家庭成员用 钱包记录喂养、散步和共读等日常活动,获得可赠送的成长星,并共同培育一个随累计 成长值变化的星宝形象。
在线体验:https://babysteps-83x.pages.dev/
备用镜像:https://tiancheng-xu.github.io/babysteps/
品牌域名:https://babysteps.baby2b.online/(等待注册商完成域名开通后绑定)
- 三类成长活动:喂养、散步、共读分别获得 3、5、7 枚成长星。
- 活动存在符合婴幼儿生活节奏的冷却时间;不可领取时按钮禁用,不展示精确倒计时。
累计成长值只因本人记录活动而增长,用来驱动星宝阶段,赠送后不会减少。可转余额可以赠送给其他 Sepolia 钱包,收到的成长星也可以再次赠送。- 链上便签允许保存一条公开文字,并明确提醒公开区块链不可删除历史记录。
成长活动的 ABI 枚举顺序固定为 Meal = 0、Walk = 1、Read = 2。每日限制按
UTC+8 计算;合约保存 dayId + 1,避免当天编号和 Solidity mapping 默认值 0
混淆。
- 版本: 1.0
- 阶段: Sepolia 公开概念验证
- 形态: 响应式单页 DApp 产品定义: 让成年照护者把细小、重复的陪伴行为转化为温和、可积累的反馈,并 通过原创虚拟伙伴看到共同成长。
BabySteps 不是儿童档案、健康服务、育儿建议、投资产品或 NFT 项目,也不能证明 某项现实活动确实发生。
| 用户 | 主要需求 | 产品响应 |
|---|---|---|
| 宝爸宝妈 | 快速记录日常陪伴并看到轻量反馈 | 三张活动卡、清晰状态、即时链上证据 |
| 爷爷奶奶 | 在不熟悉 Web3 的情况下逐步操作 | 大字号、大按钮、顺序式流程、少术语 |
| 家庭成员 | 把获得的成长星送给另一个测试钱包 | 独立余额、地址校验、不可撤回提醒 |
| 技术面试官与开发者 | 理解真实 DApp 的架构与工程质量 | 公开源码、自动测试、链上交易与源码验证 |
所有目标用户均为成年人;界面温暖亲子友好,但不是供儿童独立使用的应用。
- 用户无需先理解区块链细节,也能完成“连接钱包 → 记录陪伴 → 确认交易 → 星宝成长”。
- 每次可执行操作都明确、安全,并区分等待签名、链上确认、成功和失败。
- 用户能准确区分累计成长值与可赠送成长星。
- 通过随机冷却营造虚拟伙伴的生活节奏,但不把游戏状态解释成真实婴儿需求。
- 在桌面端、移动端和辅助技术下提供一致的主流程。
- 用公开合约、交易记录和可重复构建证明系统运行在 Sepolia,而不是本地模拟数据。
当前版本不包含:
- 主网、真实货币、价格、收益、挖矿、空投、质押、兑换或提现;
- ERC-20 交易、NFT 市场、资产组合、排行榜、商城、抽奖或付费功能;
- 儿童姓名、照片、生日、学校、位置、健康、疫苗、喂养量或作息数据;
- 根据真实孩子生成头像,或对孩子发育、能力和表现进行评价;
- 登录注册、中心化 API、数据库、社交动态或聊天;
- 现实活动真实性证明、婴儿需求判断或育儿提醒。
- 用户阅读 Sepolia、公链公开和隐私提示。
- 用户连接 MetaMask;如果网络不正确,切换到 Sepolia。
- 页面读取该钱包的累计成长值、可赠送余额、星宝阶段和三个活动状态。
- 用户只在活动可领取时点击“记录这次陪伴”,在 MetaMask 中签名并等待 receipt。
- receipt 成功后页面重新读取链上状态,展示奖励与新的星宝阶段。
- 用户可输入另一个 Sepolia 地址和正整数数量,赠送部分成长星。
- 用户可读取、覆盖或清空自己的公开链上便签,并理解历史内容仍可从链上查询。
- 支持识别 MetaMask 未安装、未连接、连接中、网络错误、已连接和读取失败。
- 已连接时展示缩略地址和 Sepolia 标识;网络错误时提供切换入口。
- 连接和交易过程不得读取、收集或保存助记词与私钥。
累计成长值只因当前钱包完成活动而增加,决定星宝阶段,赠送时不减少。可赠送成长星随活动增加,随赠送减少,接收赠送时增加。- 收到的成长星不得增加累计成长值或伪造活动记录。
| 累计成长值 | 阶段 | 视觉含义 |
|---|---|---|
| 0–2 | 星蛋 Egg | 温暖发光的星蛋 |
| 3–7 | 星芽 Sprout | 长出嫩芽或小触角 |
| 8–14 | 探索星宝 Explorer | 带探索包或小围巾 |
| ≥15 | 闪耀星宝 Star | 进入阅读角并戴上故事帽 |
首轮进度为 min(累计成长值, 15) / 15,最高显示 100%。达到 15 后显示“首轮养成
已完成”,真实累计值继续增长,但当前版本不承诺第二轮形态。星宝是原创通用伙伴,
不代表孩子本人,也不复制现有虚拟养成产品 IP。
| 活动 | 单次奖励 | 随机冷却 | UTC+8 每日上限 | 冷却文案 |
|---|---|---|---|---|
| 喂养陪伴 | +3 | 3–4 小时 | 6 次 | 星宝现在还不饿 |
| 户外陪伴 | +5 | 8–12 小时 | 2 次 | 星宝正在休息 |
| 亲子共读 | +7 | 4–6 小时 | 3 次 | 星宝还在回味故事 |
- 可领取时显示“记录这次陪伴”。
- 冷却中和达到每日上限时不显示领取按钮;每日上限文案为“星宝今天已经很充实了”。
- 页面、隐藏文本和无障碍标签均不展示下次领取时刻、倒计时或剩余时间。
- 读取失败或状态未知时不显示领取按钮,只提供重试入口。
- 持续声明:随机游戏状态不代表真实婴儿的饥饿、睡眠或活动需求。
- 冷却和每日上限由合约校验,不能只依赖浏览器时间或前端按钮。
- 展示可赠送余额、Sepolia 标识、双账本说明和公开不可撤回警告。
- 只接受有效的非零 Sepolia 地址和不超过余额的正整数数量。
- 拒绝零地址、当前钱包地址、零数量、余额不足和格式错误。
- 成功后重新读取双方相关状态,并提供 Etherscan 交易链接。
- 不要求接收者姓名、备注或任何儿童资料,不显示法币换算。
- 每个钱包拥有独立当前便签,支持读取、覆盖和清空。
- 输入按 UTF-8 限制为 280 字节,并显示实时字节计数。
- 清空前提供二次确认;清空只改变当前状态,不宣称删除历史交易。
- 所有成功状态必须等待 receipt,随后重新读取合约状态。
- 示例内容不得包含儿童身份、健康、位置或联系方式。
| 场景 | 必须展示的状态 |
|---|---|
| 钱包 | 未安装、未连接、连接中、错误网络、已连接、读取失败 |
| 活动 | 读取中、可领取、冷却、每日上限、等待签名、确认中、成功、拒签、失败 |
| 赠送 | 默认、字段错误、余额不足、等待签名、确认中、成功、拒签、链上失败 |
| 便签 | 读取中、默认、字节超限、等待签名、确认中、成功、失败、清空确认 |
交易哈希只代表交易已经广播。界面必须在 receipt 成功后才显示成功并刷新余额、阶段、 活动状态或便签;用户拒签或交易失败时不得在本地乐观增加积分。
页面保持单页纵向故事流:Hero 与 Sepolia 提示 → 三项隐私须知 → 连接钱包 → 星宝与 活动 → 赠送成长星 → 公开链上便签 → 技术能力说明。桌面端最大内容宽度约 1120–1200 px;移动端为单列,并保持同一阅读顺序。
视觉采用温暖绘本、可信、适老和轻量 Web3 方向:奶油纸背景、深海蓝绿轮廓、鼠尾草 绿、杏橙与少量柔和紫。避免黑色霓虹、K 线、金币雨和交易所风格。所有插画与星宝 形象均为原创。
- 320 px 宽度不产生水平滚动,主要点击区域不小于 48 × 48 px。
- 正文桌面端建议至少 18 px,辅助文字不低于 16 px,适合中老年照护者阅读。
- 颜色对比满足 WCAG AA;状态不能只靠颜色表达。
- 钱包扩展之外的页面操作支持键盘,交互具有清晰
focus-visible。 - 动态状态提供可读文字和
aria-live,进度条提供名称、范围与当前值。 - 支持
prefers-reduced-motion,关闭漂浮、呼吸和庆祝动画。 - 静态资源可在 Cloudflare Pages、GitHub Pages 默认路径和自定义子域名下正确加载。
- 仓库与发布产物不得包含私钥、助记词、RPC 密钥或源码验证密钥。
链上只记录钱包地址、活动枚举、日期编号、积分、赠送关系和用户主动输入的公开便签。 任何人都可能长期查看这些数据。产品不采集儿童资料,也不把钱包活动解释成现实照护 质量。用户应只使用不持有真实资产的专用测试钱包。
- 桌面端、390 px 移动端和 320 px 窄屏均保留完整主流程且无横向溢出。
- 用户可以连接 MetaMask、识别或切换 Sepolia,并从合约读取真实状态。
- 三项活动准确奖励 3、5、7;冷却与每日上限时完全不渲染领取按钮。
- 任意页面文本、辅助文本或状态不泄露具体冷却时间。
- 累计成长值和可赠送余额独立,赠送不会改变星宝阶段。
- 无效地址、自己地址、零地址、非正整数和余额不足均被拒绝且不改变链上状态。
- 便签支持读取、覆盖、刷新恢复、280 字节限制和二次确认清空。
- 所有写操作区分等待签名、确认中、成功与失败,并只在 receipt 成功后刷新。
- 页面没有儿童身份、照片、健康或位置入口,也没有价格、收益、兑换或 NFT 市场语言。
- 合约测试、前端测试、静态检查、类型检查、生产构建和公开产物扫描全部通过。
- 合约地址、部署交易和源码验证可以在 Sepolia 浏览器中独立核对。
Solidity 合约是公开运行的后端,React 前端通过 wagmi 和 ABI 与它交互:
- 读取使用 call,不改变链上状态,也不要求钱包支付 gas;
- 写入需要钱包签名,并使用少量 Sepolia 测试 ETH 支付 gas;
- transaction hash 只说明交易已广播,成功 receipt 才代表链上确认。
已部署的旧版成长星不是 ERC-20,继续作为只读学习证据保留。正在开发的 Web3 成长任务市场把新成长奖励改为标准 ERC-20 BabyCoin,并使用 ERC-721 + ERC-5192 不可转让成长证书; 两者只用于 Sepolia 测试网功能演示,没有真实价值,不提供提现或收益承诺。
- 前端:Vite、React、TypeScript、wagmi、viem
- 合约:Solidity、Hardhat
- 网络:Ethereum Sepolia(chain ID
11155111) - 质量保障:Vitest、Hardhat Test、Biome、TypeScript
- 发布:Cloudflare Pages 主站、GitHub Actions/Pages 备用镜像、自定义子域名
需要 Node.js 22 和 pnpm 11:
pnpm install --frozen-lockfile
pnpm check
pnpm test
pnpm typecheck
pnpm build
pnpm --filter @babysteps/web dev生产构建会使用已经公开部署的 Sepolia 合约地址。本地开发若要显式指定地址,可在
被 Git 忽略的 web/.env.local 中写入:
VITE_ONCHAIN_NOTEBOOK_ADDRESS=0xeb7216D50a2708a59fef5322e452e34382aFCDaDRPC、部署账户和源码验证凭据只通过 Hardhat 的交互式 keystore 提示输入,不写入 命令参数、环境文件、聊天、截图、日志或 Git:
pnpm --filter @babysteps/contracts exec hardhat keystore set SEPOLIARPCURL
pnpm --filter @babysteps/contracts exec hardhat keystore set SEPOLIAPRIVATEKEY
pnpm --filter @babysteps/contracts exec hardhat keystore set ETHERSCANAPIKEY只使用不持有真实资产的专用测试钱包。旧版 Notebook 合约没有构造参数;确认网络、 账户余额和准备公开的源码后,可以部署并请求 Etherscan 验证:
pnpm --filter @babysteps/contracts deploy:sepolia
pnpm --filter @babysteps/contracts deploy:verify:sepolia新架构由四个生产合约组成:
BabyCoin:可花费的 ERC-20 测试币;只有活动奖励增加lifetimeEarned。GrowthActivities:Meal、Walk、Read 的奖励、冷却和 UTC+8 每日上限。TaskMarketplace:Provider 上架、Chainlink VRF v2.5 锁定 2–4 BABY 价格与开放时长、approve → buy → transferFrom购买,以及 Oracle 完成确认。GrowthCertificate:每笔已完成购买最多一张标准 ERC-721 证书。
本地模块会部署 Mock VRF Coordinator,因此无需测试网凭据即可验证完整部署图:
pnpm --filter @babysteps/contracts deploy:web3:localSepolia 部署参数均为公开链上配置,不包含私钥。部署脚本使用 Chainlink VRF v2.5 官方 Sepolia Coordinator 与 gas lane,以原生测试 ETH 创建并注资 subscription, 随后把部署出的 TaskMarketplace 加为 consumer:
pnpm --filter @babysteps/contracts deploy:web3:closed-loop:sepolia这个单一命令会在终端静默读取一次 keystore 密码,依次完成部署前核对、VRF
subscription 创建与注资、四合约部署、consumer 授权;若 keystore 已有
ETHERSCANAPIKEY,还会继续执行源码验证。命令可在 RPC 中断后安全续跑,会复用已经
生成的 subscription 与 Ignition 部署状态;密码不会写入命令历史、日志或文件。
prepare:vrf:sepolia 默认把 subscription 的原生测试 ETH 余额补足到 0.03 ETH,
并生成被 Git 忽略的参数文件。若已有同一部署钱包持有的 subscription,可仅在当前
命令环境设置公开的 VRF_SUBSCRIPTION_ID 后复用,脚本会先核对 owner。
前端部署完成后,在本地 web/.env.local 填写四个公开合约地址;变量名见
web/.env.example。Sepolia 演示模块会把 Provider 与 Oracle 角色授予部署测试钱包,
便于完成演示闭环;正式多用户环境必须改为单独审核与授权。
- 合约地址:
0xeb7216D50a2708a59fef5322e452e34382aFCDaD - 部署交易:
0x2128ff…f674a - 部署区块:
11411013(2026-08-03T14:42:48.000Z) - 源码验证:Etherscan
Source Code Verified · Exact Match - Sourcify:
chainId 11155111完整匹配源码
所有公开地址和交易均为测试链证据。仓库不保存钱包私钥、RPC 凭据、API Key 或 儿童的真实姓名、照片、位置及健康数据。