Silly Big Personality Test:31 道趣味题 → 人格结果 → 可选连接钱包并铸造 Soulbound SBT(EIP-712 签名 + mint)。
npm installnpm 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)。
- 将本仓库推送到 GitHub(或 GitLab / Bitbucket)。
- 打开 Vercel,Add New Project,导入该仓库。
- Framework Preset 选择 Vite(或保持自动检测)。
- Build Command:
npm run build(默认即可)。Output Directory:dist。
仓库根目录已含.npmrc(legacy-peer-deps=true),避免 Vercel 上npm install因 wagmi / Web3Modal 的 peer 依赖冲突而失败。 - 在 Settings → Environment Variables 中为 Production(及需要的 Preview)添加与上文相同的
VITE_*变量。 - Deploy。部署完成后在 Vercel 控制台将生产域名加入 WalletConnect Cloud 里该项目的 Allowed origins,否则部分环境下调起钱包可能受限。
- 若使用自定义域名,同样将该域名加入 WalletConnect 允许列表。
说明:环境变量必须以
VITE_开头才会打入 Vite 前端构建;修改后需重新触发一次部署。
合约路径:contracts/SBTIBadge.sol。
- Solidity:
^0.8.20。 - Soulbound:
approve/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.ts中PERSONALITY_CODES下标一致。- 每个地址仅可成功
mint一次。
- 需用户先对 EIP-712
- 元数据:
tokenURI(uint256)读取链上存储的 URI;personalityOf/resultHashOf可按tokenId查询。
Remix
- 打开 Remix IDE,新建文件并粘贴
SBTIBadge.sol完整源码。 - Compiler 选择
0.8.20及以上兼容版本,编译SBTIBadge。 - Deploy 选择目标环境(如 Injected Provider 连 MetaMask),网络选 Sepolia 或 Base Sepolia。
- 部署完成后复制合约地址,写入
.env的VITE_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_ADDRESS 与 VITE_SBT_CHAIN_ID。
- 部署链必须是 Ethereum Sepolia 或 Base Sepolia(与
wagmi配置一致)。 - 用户钱包需切换到同一网络后再点击「签名并铸造」。
- 若更换合约地址或链,需同步更新 Vercel / 本地的环境变量并重新构建。
合约以 SPDX 标注为准;前端以仓库内依赖许可证为准。