自持钱包
一个非托管的多链钱包。私钥和资产都在用户自己手机上,后端只负责组交易、广播和同步链上状态,永远碰不到私钥。
产品有哪几块
- 资产展示:多条链上的余额和交易记录。
- 转账收款:发起转账、生成收款地址。
- 兑换:链上币种之间互换。
- 法币坡道:法币和数字资产之间的出入金。
转账链路:组 → 记 → 发 → 盯
组交易落单据签名广播盯确认
- 组交易:后端帮 App 查好 nonce,按链上行情估出慢、中、快三档手续费。防止连发两笔撞号,也防止手续费太低一直卡着不上链。
- 落单据:发出前先在本地记一张单,请求号建唯一索引。用户连点两次,也只会有一笔。
- 签名广播:交易在手机本地签名,后端只拿签好的交易去广播。广播失败就原样重发同一笔,不会多扣钱。
- 盯确认:轮询到确认数达标为止,状态一律以链上为准回写本地。长时间不上链,就提示用户加速。
难点
私钥不出手机
后端的所有接口都只接收已签名的交易,从设计上保证服务器被攻破也拿不到用户的钱。
状态和链上一致
链上交易可能被替换、可能长时间卡在内存池、也可能因为分叉回滚。本地状态只是参考,最终一律以链上确认结果为准。
其他做过的
盲盒抢购的高并发处理,以及 NFT 图片裁剪服务的 JVM 调优。