← 返回

自持钱包

一个非托管的多链钱包。私钥和资产都在用户自己手机上,后端只负责组交易、广播和同步链上状态,永远碰不到私钥。

角色:Java 后端,负责转账链路

JavaSpringMySQL多链节点

产品有哪几块

转账链路:组 → 记 → 发 → 盯

组交易落单据签名广播盯确认
  1. 组交易:后端帮 App 查好 nonce,按链上行情估出慢、中、快三档手续费。防止连发两笔撞号,也防止手续费太低一直卡着不上链。
  2. 落单据:发出前先在本地记一张单,请求号建唯一索引。用户连点两次,也只会有一笔。
  3. 签名广播:交易在手机本地签名,后端只拿签好的交易去广播。广播失败就原样重发同一笔,不会多扣钱。
  4. 盯确认:轮询到确认数达标为止,状态一律以链上为准回写本地。长时间不上链,就提示用户加速。

难点

私钥不出手机

后端的所有接口都只接收已签名的交易,从设计上保证服务器被攻破也拿不到用户的钱。

状态和链上一致

链上交易可能被替换、可能长时间卡在内存池、也可能因为分叉回滚。本地状态只是参考,最终一律以链上确认结果为准。

其他做过的

盲盒抢购的高并发处理,以及 NFT 图片裁剪服务的 JVM 调优。