主页 > 最新版imtoken官网 > Omni/USDT钱包对接PHP开发包

Omni/USDT钱包对接PHP开发包

最新版imtoken官网 2023-01-18 10:47:57

OmniTool开发包适用于为PHP应用快速添加对Omni Layer/USDT数字资产的支持,即支持使用自有Omni Layer节点的应用场景,也支持基于第三方API服务和离线的轻量级部署场景裸交易。 下载地址:omni/usdt php开发包。

一、OmniTool开发包介绍

OmniTool开发包主要包含以下功能:

OmniTool支持本地部署的Omnicored节点,也支持blockchain.info、btc.com等提供的开放API,添加对其他第三方服务的支持也非常简单。 只需要参考代码实现如下接口:

OmniTool软件包运行在**Php 7.1++**环境下,当前版本为1.0.0,主要类/接口及其关系如下图所示:

OmniTool的主要代码文件清单如下:

代码文件说明

omn​​i.php/src/RpcClient.php

Omni Layer的RPC协议封装类

omn​​i.php/src/RpcModule.php

Omni Layer的RPC协议子模块访问语法糖

omn​​i.php/src/protocol-spec.json

Omni Layer 协议描述元信息

omn​​i.php/src/SerializeBuffer.php

Omni Layer 协议序列化缓冲区

omn​​i.php/src/PayloadFactory.php

Omni Layer 协议负载工厂类

omn​​i.php/src/Utxo.php

未消费的交易输出类

omn​​i.php/src/UtxoBag.php

Utxo 集合类

omn​​i.php/src/UtxoCollectorInterface.php

Utxo收集器接口

omn​​i.php/src/LocalUtxoCollector.php

基于OmniCore节点的utxo收集器实现

omn​​i.php/src/CloudUtxoCollector.php

基于第三方服务的utxo收集器实现

omn​​i.php/src/UtxoSelectorInterface.php

Utxo过滤器接口

omn​​i.php/src/DefaultUtxoSelector.php

默认 Utxo 过滤器实现

omn​​i.php/src/BroadcasterInterface.php

裸交易广播接口

omn​​i.php/src/LocalBroadcaster.php

基于OmniCore节点的裸交易广播者实现

omn​​i.php/src/CloudBroadcaster.php

基于第三方服务的裸交易广播者的实现

omn​​i.php/src/ExplorerInterface.php

数据查询接口

omn​​i.php/src/CloudExplorer.php

基于第三方服务的数据查询接口的实现

omn​​i.php/src/LocalExplorer.php

查询q币余额一定要激活财付通吗_查询虚拟币usdt地址余额怎么查_比特币地址查余额

基于OmniCore节点的数据查询接口的实现

omn​​i.php/src/Utils.php

常用辅助函数

omn​​i.php/src/Wallet.php

离线钱包类

演示/rpc-demo.php

使用RpcClient完全实现OMNI代币发行和转移的例子

演示/omni-tx-cloud.php

创建并广播Omni代币转账裸交易,使用第三方云服务API

演示/omni-tx-local.php

使用自己的节点创建和广播 Omni 代币转账裸交易

演示/btc-tx-cloud.php

创建和广播比特币转账裸交易,使用第三方云服务API

演示/btc-tx-local.php

使用自己的节点创建和广播比特币转账裸交易

演示/资源管理器-cloud.php

查询指定地址的比特币余额/Omni代币余额,使用第三方云服务API

演示/explorer-local.php

查询指定地址的比特币余额/Omni代币余额,使用自身节点

演示/wallet-init.php

本地钱包初始化

演示/钱包-demo.php

钱包加载、裸交易构建和广播

小贩

第三方依赖包目录

作曲家.json

作曲家配置文件

2.RpcClient类使用说明

RpcClient类封装了Omni Layer的RPC接口协议。 创建RpcClient对象时查询虚拟币usdt地址余额怎么查,需要传入包含有效身份信息的节点RPC URL。例如,假设本机安装的omnicored节点软件配置如下:

然后就可以使用下面的代码来实例化RpcClient:

use \OmniTool\RpcClient;
$client = new RpcClient(
            'http://user:123456@localhost:8332'   /*节点RPC接口的URL*/
          );
复制代码

Omni Core节点除了比特币原有的RPC接口外,还扩展了额外的接口来操作Omni层的数据。 这些扩展的RPC接口使用omni_前缀来区别于比特币原有的RPC接口。 为了方便分离两层RPC调用,RpcClient引入了protocol子模块的概念,将Bitcoin原有的RPC接口和Omni的扩展RPC接口附加到btc子模块和omni子模块中- 模块分别。

例如获取某个地址的USDT代币余额需要使用Omni层的omni_getbalance调用,这个RPC调用对应RpcClient实例的omni子模块的getBalance()方法。 以下代码获取地址1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P的USDT(资产ID:31)余额:

$ret = $client->omni->getBalance(
          '1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P',   /*地址*/
          31                                      /*资产ID:USDT*/
       );

查询q币余额一定要激活财付通吗_比特币地址查余额_查询虚拟币usdt地址余额怎么查

复制代码

类似地,可以使用 omni_send 调用执行简单的 USDT 传输,它对应于 RpcClient 实例的 omni 子模块的 send() 方法。 以下代码将 100.0 USDT 代币从地址 3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY 转移到地址 37FaKponF7zqoMLUjEiko25pDiuVH5YLEa:

$ret = $client->omni->send(
          '3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY',    /*代币转出地址*/
          '37FaKponF7zqoMLUjEiko25pDiuVH5YLEa',    /*代币转入地址*/
          31,                                      /*代币ID:USDT*/
          "100.00"                                 /*转移的代币数量*/
       );
复制代码

原来bitoin层的RPC接口可以通过RpcClient的btc子模块访问。 例如,使用 listunspent 调用获取本地节点中指定地址的 utxo:

$ret = $client->btc->listUnspent(
          6,                                        /*最小确认数*/
          999999,                                   /*最大确认数*/
          ['mgnucj8nYqdrPFh2JfZSB1NmUThUGnmsqe']    /*地址清单*/  
       );
复制代码

开发包中的demo/rpc-demo.php示例代码使用了RpcClient类,充分展示了Omni层的代币发行和转账功能。 如果你打算搭建自己的 Omni Core 节点,相信这个例子会有很大的帮助。

3. Wallet类使用说明

如果你不愿意搭建自己的Omni Core节点查询虚拟币usdt地址余额怎么查,而是想在你的基于第三方API的PHP应用中加入对Omni Layer/USDT的支持,那么最简单的方法就是使用离线交易入口类Wallet。

Wallet类的主要功能是创建和广播Omni代币转账裸交易或比特币转账裸交易。 其基本步骤如下:

3.1 Omni代币转移

使用Wallet实现的Omni代币转账示例代码如下,说明在注释中:

'../vendor/autoload.php');
use OmniTool\Wallet;                              /*引入开发包*/
$wallet = Wallet::cloud(
            './demo.wallet',                      /*钱包文件地址,自动创建*/
            'testnet'                             /*网络ID*/
          );
$prvKey = '4aec8e45106....00d5c5af494a4e05b';     /*私钥:16进制字符串*/            
$wallet->addKey($prvKey);                         /*将私钥加入钱包,只需加入一次*/
$addressList = $wallet->getAddressList();         /*返回钱包管理的所有地址,数组*/
$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001'                            /*转账OMNI代币数量*/
         );

查询虚拟币usdt地址余额怎么查_查询q币余额一定要激活财付通吗_比特币地址查余额

$ret = $wallet->broadcast($rawtx); /*广播OMNI裸交易*/ var_dump($ret); 复制代码

注意:

3.2 指定Omni交易的手续费支付地址

Omni协议层无需支付交易费用,但嵌入Omni交易所的比特币交易仍需支付交易费用。 默认情况下,omniSendTx() 方法使用发送方地址来支付比特币交易费用,但您可以传入额外的参数来指定其他地址来支付交易费用。 当你的PHP应用需要实现多账户收款功能时,使用统一的缴费地址会更容易管理。

例如,下面的代码使用地址 mnRo8JyTHDd5NxRb3UvGbAhCBPQTQ4UZ8W 来支付 omni 交易费用:

$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001',                           /*转账OMNI代币数量*/
            'mnRo8JyTHDd5...CBPQTQ4UZ8W'          /*交易手续费支付地址*/
         );
复制代码

注意:

3.3 指定Omni交易的比特币转账次数

由于Omni交易要求发送方必须有可用的UTXO,为了便于Omni代币的接收地址继续流通持有的Omni代币,omniSendTx()方法会通过默认。 coins (546 SATOSHI),调用此方法时可以修改此默认值。

例如,以下代码将 1000 SATOSHI 转给接收方:

$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            'mgYPLmNuZymK...e2XUNF6VFnT',         /*接收方地址
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            '0.000001',                           /*转账OMNI代币数量*/
            'mnRo8JyTHDd5...CBPQTQ4UZ8W',         /*交易手续费支付地址*/
            1000                                  /*转账比特币数量,单位:SATOSHI*/
         );
复制代码

3.4 比特币转账

OmniTool 还支持比特币转账裸交易的生成和广播。

例如,以下代码将1000 SATOSHI从钱包首地址转入指定收款地址:

'../vendor/autoload.php');
use OmniTool\Wallet;
$wallet = Wallet::cloud('./demo.wallet','testnet');
$addressList = $wallet->getAddressList();
$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/

查询虚拟币usdt地址余额怎么查_查询q币余额一定要激活财付通吗_比特币地址查余额

'moneyqMan7u...8qVrc9ikLP', /*接收方地址*/ 1000, /*转账比特币数量,单位:SATOSHI*/ 500 /*手续费,单位:SATOSHI*/ ); echo 'btc rawtx => ' . $rawtx . PHP_EOL; $ret = $wallet->broadcast($rawtx); /*广播裸交易*/ 复制代码

btcSendTx()默认使用发件人地址作为找零地址,调用时也可以指定其他地址作为找零地址。 例如,以下代码创建一个新地址来接收找零:

$changeAddress = $wallet->getNewAddress();          /*创建新地址*/
$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/
                    'moneyqMan7u...8qVrc9ikLP',     /*接收方地址*/
                    1000,                           /*转账比特币数量,单位:SATOSHI*/
                    500,                            /*手续费,单位:SATOSHI*/
                    $changeAddress                  /*找零地址*/
                  );                       
复制代码

4. UTXO收集器

OmniTool使用接口UtxoCollectorInterface来约定UTXO的收集功能。 该接口的实现需要支持获取指定地址的候选UTXO集,可以指定多个地址。

接口方法:

参数$addressList用于声明收集UTXO的地址列表,类型为数组。

当前实现类:

例如以下代码使用CloudUtxoCollector获取地址为mi8BvbK73nDQfaN3acpaFGYQKhfQ5ysKRn的UTXO:

use OmniTool\CloudUtxoCollector;
$collector = new CloudUtxoCollector(
                    'testnet'                       /*测试网*/
                 );
$candidateBag = $collector->collect(
                    ['mi8BvbK73nDQ...KhfQ5ysKRn']   /*地址清单*/
                );
复制代码

5.UTXO过滤器

OmniTool 使用 UtxoSelectorInterface 来承包 UTXO 筛选功能。 该接口的实现需要根据目标数量从候选UTXO中选择可用的UTXO,并返回一个新的UtxoBag实例。

接口方法:

参数$target声明了要达到的最小金额目标,单位:wei。

参数$candidates为候选utxo集合,通常为UtxoCollectorInterface实现对象的collect()调用返回的UtxoBag对象。

当前实现类:

例如,以下代码使用 DefaultUtxoSelector 实例从候选 UTXO 中选择至少 100000 wei 的 UTXO:

use OmniTool\DefaultUtxoSelector;

比特币地址查余额_查询虚拟币usdt地址余额怎么查_查询q币余额一定要激活财付通吗

$selector = new DefaultUtxoSelector(); $selectedBag = $selector->select( 100000, /*最低目标金额*/ $candidateBag /*候选UTXO集合*/ ); 复制代码

考虑到 UTXO 的不可分割性,选择的 UTXO 的总和可能会超过目标数量。 可以使用 UtxoBag 实例的 getTotal() 方法查看集合中的 UTXO 总数:

echo 'total wei in bag => ' . $selectedBag->getTotal() . PHP_EOL;
复制代码

6. 裸交易广播者

OmniTool 使用 BroadcasterInterface 来承包裸交易广播的功能。 该接口的实现应该将裸交易广播到 Omni 网络中。

接口方法:

参数$rawtx用于声明要广播的原始交易,类型为十六进制字符串。

当前实现类:

例如,以下代码使用 CloudBroadcaster 将原始交易流广播到 Omni 网络:

use OmniTool\CloudBroadcaster;
$broadcaster = new CloudBroadcaster(
                      'testnet'                     /*测试网*/
                   );
$ret = $broadcaster->broadcast(
        '01000000011da9283b4...59f58488ac00000000'  /*裸交易*/
       );
复制代码

7.数据查询接口

OmniTool 使用 ExplorerInterface 来承包 Omni 数据查询功能。

接口方法:

当前实现类:

例如以下代码使用CloudExplorer查询地址1Jekm8ZswQmDhLFMp9cuYb1Kcq26riFp6m的比特币余额和USDT代币余额:

use OmniTool\CloudExplorer;
$explorer = new CloudExplorer('mainnet');
$address = '1Jekm8ZswQmDhLFMp9cuYb1Kcq26riFp6m';
$balance = $explorer->getBtcBalance($address);
echo 'btc balance => ' . PHP_EOL;
$balance = $explorer->getOmniBalance($address,31);
echo 'usdt balance => ' . $balance['balance']. PHP_EOL;
复制代码

OmniTool下载链接:sc.hubwiz.com/codebag/omn...