Skip to content

Lyzero825/wbti

Repository files navigation

SBTI(bti)

Silly Big Personality Test:31 道趣味题 → 人格结果 → 可选连接钱包并铸造 Soulbound SBT(EIP-712 签名 + mint)。

本地开发

安装依赖

npm install

启动开发服务器

npm run dev

浏览器访问终端提示的本地地址(一般为 http://localhost:5173)。

其他脚本

命令 说明
npm run build TypeScript 检查 + Vite 生产构建,输出到 dist/
npm run preview 本地预览生产构建
npm run lint ESLint

环境变量

复制 .env.example.env 并按需填写:

变量 说明
VITE_WALLETCONNECT_PROJECT_ID WalletConnect Cloud 项目 ID,用于连接钱包
VITE_SBT_CONTRACT_ADDRESS 已部署的 SBTIBadge 合约地址(0x + 40 位十六进制)
VITE_SBT_CHAIN_ID 与合约所在链一致:11155111(Ethereum Sepolia)或 84532(Base Sepolia)
VITE_SBT_TOKEN_URI_OVERRIDE 可选;若设为 ipfs://...,铸造时使用该 URI,否则前端生成 data:application/json;base64,... 元数据

前端支持的链与 src/config/wagmi.ts 中配置一致(Sepolia / Base Sepolia)。

部署到 Vercel

  1. 将本仓库推送到 GitHub(或 GitLab / Bitbucket)。
  2. 打开 VercelAdd New Project,导入该仓库。
  3. Framework Preset 选择 Vite(或保持自动检测)。
  4. Build Commandnpm run build(默认即可)。Output Directorydist
    仓库根目录已含 .npmrclegacy-peer-deps=true),避免 Vercel 上 npm install 因 wagmi / Web3Modal 的 peer 依赖冲突而失败。
  5. Settings → Environment Variables 中为 Production(及需要的 Preview)添加与上文相同的 VITE_* 变量。
  6. Deploy。部署完成后在 Vercel 控制台将生产域名加入 WalletConnect Cloud 里该项目的 Allowed origins,否则部分环境下调起钱包可能受限。
  7. 若使用自定义域名,同样将该域名加入 WalletConnect 允许列表。

说明:环境变量必须以 VITE_ 开头才会打入 Vite 前端构建;修改后需重新触发一次部署。

SBT 合约部署说明

合约路径:contracts/SBTIBadge.sol

合约要点

  • Solidity^0.8.20
  • Soulboundapprove / transferFrom / safeTransferFrom 等均会 revert,不可转让。
  • 铸造mint(uint8 personalityIndex, string tokenURI_, bytes32 resultHash, bytes signature)
    • 需用户先对 EIP-712 MintIntent 签名(与前端 useWeb3SBT 中 domain / types 一致)。
    • personalityIndex 须为 0~23(共 24 种人格),与前端 src/data/sbti.tsPERSONALITY_CODES 下标一致。
    • 每个地址仅可成功 mint 一次
  • 元数据tokenURI(uint256) 读取链上存储的 URI;personalityOf / resultHashOf 可按 tokenId 查询。

部署方式(任选其一)

Remix

  1. 打开 Remix IDE,新建文件并粘贴 SBTIBadge.sol 完整源码。
  2. Compiler 选择 0.8.20 及以上兼容版本,编译 SBTIBadge
  3. Deploy 选择目标环境(如 Injected Provider 连 MetaMask),网络选 SepoliaBase Sepolia
  4. 部署完成后复制合约地址,写入 .envVITE_SBT_CONTRACT_ADDRESS,并将 VITE_SBT_CHAIN_ID 设为对应链 ID。

Foundry(示例)

forge create contracts/SBTIBadge.sol:SBTIBadge --rpc-url <YOUR_RPC_URL> --private-key <DEPLOYER_KEY>

将输出中的合约地址配置到前端的 VITE_SBT_CONTRACT_ADDRESSVITE_SBT_CHAIN_ID

与前端联调

  1. 部署链必须是 Ethereum SepoliaBase Sepolia(与 wagmi 配置一致)。
  2. 用户钱包需切换到同一网络后再点击「签名并铸造」。
  3. 若更换合约地址或链,需同步更新 Vercel / 本地的环境变量并重新构建。

许可

合约以 SPDX 标注为准;前端以仓库内依赖许可证为准。

Releases

Packages

Contributors

Languages