zoukankan      html  css  js  c++  java
  • usdt转入转出出入金开发

    usdt转入转出出入金开发

    比特币协议 -> Omni 层协议 -> USDT
    USDT是基于比特币omni协议的一种代币: https://omniexplorer.info/asset/31 ID是31

    Tether(USDT 的发行方)的官方钱包已关闭注册,无法注册钱包就无法获得 API Key,也就意味着无法实现类似基于钱包接口的开发方案,但我们可以基于 USDT 的底层协议(叫做 Omni 层协议)进行开发

    USDT 的协议结构从底层到顶层大致是:「比特币协议 -> Omni 层协议 -> USDT」,也就是说,USDT 是基于比特币的一种代币(token);
    另外USDT也出了最新的以太坊(ERC20 标准)版本,但发行量和流通量都太小,所以还是基于比特币 Omni 层协议的经典USDT。

    可以安装并运行一个 Omni Core 节点客户端,然后利用其提供的 RPC 接口,实现我们 USDT 出入金所需的代币发送、接收等功能。

    调用时http响应时间默认设置3秒超时会失败,实际已转出成功,需要改成10秒或更长后才可以正常接收到返回状态。

    usdt基于btc的,所以钱包里转入转出都需要通过比特币链上操作都需要btc手续费,这也是很多交易所有最低充值额度的限制的原因。

    =========================
    usdt有单独节点,一般是用bitcond源码搭建的
    如果自己搭建了节点看下面这个文档就可以搞定了
    怎么搭建节点,github上有的。
    https://github.com/OmniLayer/omnicore/blob/master/src/omnicore/doc/rpc-api.md#omni_send
    这个是usdt rpc调用提供的命令文档。

    自己不搭建节点需要另外开发?
    自己不搭建节点就需要依赖三方平台,这样不安全。

    ==================

    importprivkey 出金之前需要把 address and privKey import to node
    call rpc : importprivkey pls
    usdt node 提供的命令。
    文档上有说明。

    importprivkey 就是个rpc命令,你call下就可以了,参数就是address和privKey, 也许你们node不需要,
    如果你刚才出金成功了,就ok,没有成功,就call importprivkey 下

    Usdt 出金 是个from to的形式,如果出金地址固定,就不用知道from, to是必须要指定的。
    deposit: 扫描区块,如果发现 to

    to地址如果是存在你们的db中,就需要处理deposit的数据。
    deposit 指的是入金。
    扫描区块的时候,blocknumber->blockHash->txHash->tx Details.
    其中details就是json字符串,里面就有from to的地址,然后判断to地址是否存在db中,说明别的平台向你们平的to地址有入金。

    出金: 平台必须有个出金总地址addr,所有的出金都是从addr扣取。
    扫描区块的时候,blocknumber->blockHash->txHash->tx Details. 其中details就是json字符串,里面就有from to的地址,然后判断to地址是否存在db中,说明别的平台向你们平的to地址有入金。

    入金是要扫描区块的,去分析交易详情,发现有个to地址,要判断这个to地址是不是你们平台的,如果是的,说明这次交易就是你们自己平台的地址在入金,所以这个交易详情需要入库。

    中心钱包按照一定的百分比条件转钱给冷钱包。 如果出金总地址余额不够了,就要从热钱包转账给出金总地址。
    现金流监控有个策略的。

    转账上链就必须要扣除手续费, to地址有N多个,你要写个算法以最少的手续费转给冷钱包。
    中心钱包, 出金钱包, 热钱包, 冷钱包 四个钱包按照策略比例相互转。先要把这四个钱包概念弄清楚。

    要分平台内出金还是平台外,平台外出金上链扣手续费,平台内直接划账
    地址存db, 没有导入到钱包,实现方式可以不一样

    用户地址对应公链上的余额是转到冷钱包地址
    用户看到的余额是用户账号对应db中的余额,用户地址对应公链的余额用户没有实际的转账权限,不能到外部平台转账,只能在自己平台转账。
    就是像中心钱包到了,钱包冷,钱包之间相互转,这个你是必须要上链的,上链要手续费,这个余额是钱包的余额。
    如果是平台内转账,那是你这个平台内的。一个是钱包的余额。一个是一个用户在你这个平台申请个账号,你给他分配的余额,这是两个不同的余额。
    子钱包充值进来的都是链上的余额转账都需要通过链上,需要手续费。比特币的最佳手续费有第三方api接口可以动态获取。
    usdt钱包里的币要转出到大钱包需要先转点btc进去做手续费才能转账,转多少进去合适需要看代码和策略。

    -------------------------
    交易所,要出金的时候,importprivkey, 出金完了,能把privkey删除掉吗?
    其他币种也是这么操作的?像ETH用什么RPC ?

    只有usdt需要import
    eth使用web3j组件就可以了

    那BTC的处理,和USDT一样吧?

    不需要删除

    不删除,那不就成了热钱包了吗?

    btc用的是bitcoinj
    importprivkey 只是node提供的rpc命令,

    并不会把privkey存储到wallet.dat中? 命令执行完, 就会自动删除?
    下次执行,还需要import ?

    import一次就可以了

    跟自己直接在node上创建的账户差不多
    你们只是在另外一个node 或者工具上创建了账号,并保存在数据库中,真正要转账时,把它import到节点上
    这不是真正的离线签名吧?

    就是你说的这样
    离线签名是先算出交易签名,然后再广播出去
    地址这块你们实现跟我实现的不一样,我用的是地址派生,根据userid派生
    只有usdt在创建地址的时候会import到node

  • 相关阅读:
    CocoaPods使用详细说明
    cocoapod使用
    Android-利用LinearGradient实现文字一闪一闪
    Android5.0 CheckBox颜色修改
    android实现文字渐变效果和歌词进度的效果
    Ceph 常规操作笔记
    Git版本控制器使用总结性梳理
    CentOS 7.5 部署 MySQL 5.7 基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
    Ansible-playbook 运维笔记
    Docker容器基础介绍
  • 原文地址:https://www.cnblogs.com/zdz8207/p/qkl-usdt-Omni-bitcond-node.html
Copyright © 2011-2022 走看看