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