面向 SCASH 社区的开源轻量级 Web 钱包,强调安全与易用性。所有助记词、私钥与签名操作均在用户本地设备完成,不会上传到网络。
- 地址管理:生成/导入助记词,BIP32/BIP84 路径推导,Bech32 地址校验
- 余额与交易:查询 UTXO/余额,本地构建与签名,节点广播,自动找零
- 安全优先:本地 AES 加密钱包文件,密码不出端,支持离线签名
- 技术栈:前端 Next.js,后端(独立部署)Nest.js + Prisma,区块链交互基于 SCASH RPC
- 前端
- 使用
Next.js构建,Zustand 持久化存储仅保存加密后的钱包文件与必要状态 - 助记词生成与地址推导:
bip39+bip32+tiny-secp256k1,路径为m/84'/0'/0'/0/0 - 地址格式:
bitcoinjs-lib生成 P2WPKH(Bech32,前缀scash) - 交易签名:
bitcoinjs-lib的Psbt在本地完成输入签名与最终原始交易生成
- 使用
- 后端(可选、独立部署)
- 基于
Nest.js提供 SCASH RPC 代理与业务接口(如余额、估算手续费、广播交易) - 使用
Prisma进行轻量数据访问(如价格缓存等,不存储用户私钥)
- 基于
- 区块链交互
- 余额与 UTXO:
/scantxoutset拉取并在前端状态中标注可用性 - 手续费估算:
/estimatesmartfee获取feerate,结合交易体积估算最终费用 - 广播:仅发送原始交易
RawTx到节点或后端代理
- 余额与 UTXO:
- 创建钱包
- 生成 12 词助记词并推导首个地址(P2WPKH)
- 使用用户密码的 MD5 派生值作为密钥,AES 加密钱包明文(助记词、路径、地址、WIF)
- 生成可下载的钱包文件
scash-wallet.json(包含版本、时间戳与加密数据)
- 恢复钱包
- 上传此前下载的加密钱包文件
- 输入密码本地解密,恢复地址与签名能力
- 构建与签名
- 从 UTXO 构建
Psbt,添加目标输出与(可选)应用服务费输出 - 根据估算手续费与输入/输出差额自动添加找零到本人地址
- 本地签名并提取原始交易十六进制文本用于广播
- 从 UTXO 构建
- 私钥不出本地
- 助记词与私钥只在前端内存中使用;持久化仅保存 AES 加密后的钱包文件
- 解密与签名均在用户设备本地进行,后端与节点从不接触私钥
- 本地加密存储
- 使用
CryptoJS AES加密钱包明文,IV 为固定标识字符串,密钥为MD5(password, 'password')的派生值 - 加密数据以十六进制编码后写入
scash-wallet.json,便于备份与离线保存
- 使用
- 离线签名
- 可在无网络环境下完成交易签名,网络仅用于广播
RawTx与查询必要链上数据
- 可在无网络环境下完成交易签名,网络仅用于广播
- 输入校验与格式验证
- 地址校验函数确保 Bech32 前缀与数据长度合法,降低误转风险
- 状态持久化最小化
- Zustand 仅持久化必要非敏感状态与加密后的钱包数据,避免明文敏感信息落地
- 设备安全
- 若设备被恶意软件控制,任何软件钱包都可能受影响;建议使用强密码、为钱包文件做好离线备份并保管
- 浏览器环境
- 避免在不可信网页环境中操作钱包;谨防钓鱼链接与恶意脚本注入
- 密码策略
- 使用 8 位以上的强密码;修改密码时重新加密并下载新钱包文件
- 文件备份
- 妥善备份
scash-wallet.json;建议离线存储,切勿上传到云盘或邮件
- 妥善备份
# 安装依赖
npm install
# 配置环境变量(本地 .env 或 Vercel 项目环境变量)
# 必填:为每个节点单独配置凭据(逗号分隔,每项格式 url|user|password)
BITCOIN_RPC_ENDPOINTS=http://your-ip:8332|your-user|your-password,http://your-ip2:8332|your-user2|your-password2
# 可选:请求超时毫秒数(默认 8000)
BITCOIN_RPC_TIMEOUT_MS=8000
# 启动开发环境
npm run dev- 创建或导入钱包,生成加密钱包文件并下载保存
- 查询余额与交易记录,准备收款/转账所需信息
- 在发送页面构建并本地签名交易,确认后广播
欢迎通过 Issue 与 Pull Request 参与贡献,一起完善 SCASH 钱包。
- 如果你愿意支持本项目的持续开发与维护,欢迎捐助:
- BTC:
bc1qnvdrxs23t6ejuxjs6mswx7cez2rn80wrwjd0u8 - BNB:
0xD4dB57B007Ad386C2fC4d7DD146f5977c039Fefc - USDT(BEP-20):
0xD4dB57B007Ad386C2fC4d7DD146f5977c039Fefc - SCASH:
scash1qy48v7frkutlthqq7uqs8lk5fam24tghjdxqtf5 - 你的支持将用于开源维护与基础设施建设,感谢你为 SCASH 社区的建设与创新助力。
本项目采用 MIT License 开源许可。