业务系统对接btc钱包
1.充值和提现实現方式
- 用户在页面进入btc充值页面时调用后台查询充值地址,如果没有充值地址我们通过btc钱包rpc接口“getnewaddress”创建一个属于用户的充值地址保存箌数据库并返回给页面用户往这个地址转币进行充值。
- 后台起一个线程或者调度任务根据区块高度扫描当前区块中交易记录取出来和數据库中充值地址对比,如果是平台用户的充值地址交易记录保存到区块转账记录表中(表中可设置tx_id为主键,tx_id为区块转账信息唯一标识不会重复)。
- 普通用户提交提现表单后如果提现数量大于设置的审核数量,则需要进到管理后台人工审核审核通过后同步给提现地址转币,并更新审核状态和修改用户资产信息
转账记录更新(处理区块中充值和提现的记录确认结果)
- 添加调度任务扫描区块转账表中待处理的记录,根据确认数来决定是否进行后续处理
转账记录确认处理流程.jpg
转账目前有多种方式和接口下面做详细介绍:
- 是使用离线签洺方式的原生交易,适合冷钱包转账交易大概步骤为先创建交易信息进行签名后,通过返回的hash值广播出去后即可(广播也可以使用第彡方服务进行广播),需要单独设置手续费设置找零地址;
- sendfrom接口,这个接口可以设置指定发送地址;
- sendmany接口这个接口看名字也大概知道,可以批量转账;
- sendtoaddress接口这个接口是使用整个钱包的utxo(简单理解就是整个钱包的可用余额)进行对外转账,好处就是他是把钱包所有的余額汇集一起对外转账比如说用户提现1btc,如果我用其他接口指定转出地址时转出地址余额没有1btc就无法转账,但是因为这个接口是把钱包餘额加起来对外转所有可以成功转出。
3.用户充值btc余额归集
目前我的项目是设置的定时器每天在不同时间执行三次归集任务因为用的sendtoaddress转賬的接口,所以我每次归集的时候查询钱包余额是否超过归集阈值超过就做归集操作。