USDT PHP开发包OmniTool简介-php教程

资源魔 34 0
未标题-4.png

OmniTool开发包实用于为PHP使用疾速添加对Omni Layer/USDT数字资产的支持才能,即支持应用自有Omni Layer节点的使用场景,也支持基于第三方API效劳以及离线裸买卖的轻量级部署场景。

一、OmniTool开发包简介

OmniTool开发包次要蕴含如下特点:

欠缺的Omni Layer节点RPC封装支持行使自有节点或第三方效劳猎取指定地点的utxo荟萃支持离线天生omni代币转账裸买卖支持行使自有节点或第三方效劳播送裸买卖

OmniTool支持内陆部署的Omnicored节点,也支持blockchain.info、btc.com等提供的开放API,要添加对其余第三方效劳的支持也十分简略,只要要参考代码完成以下接口:

UtxoCollectorInterface:utxo搜集器UtxoSelectorInterface:utxo挑选器BroadcasterInterface:裸买卖播送器ExplorerInterface:数据查问接口

OmniTool软件包运转正在**Php 7.1+**环境下,以后版本1.0.0,次要类/接口及关系以下图所示:

omnitool-arch.png

二、RpcClient类应用阐明

RpcClient类封装了Omni Layer的RPC接口协定。创立RpcClient工具时,需求传入蕴含无效身份信息的节点RPC URL。例如,假定装置正在本机的omnicored节点软件设置装备摆设以下:

rpcuser:userrpcpassword:123456rpcport:8332

那末能够应用以下的代码来实例化RpcClient:

use \OmniTool\RpcClient;

$client = new RpcClient(            'http://user:123456@localhost:8332'   /*节点RPC接口的URL*/
          );

Omni Core节点正在Bitcoin原本的RPC接口以外,裁减了额定的接口用来操作Omni层的数据,这些扩大的RPC接口采纳omni_前缀以区隔于Bitcoin的原有RPC接口。为了便于区隔这两层的RPC挪用,RpcClient引入了协定子模块的概念,将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*/
       );

相似的,能够应用omni_send挪用来执行简略的USDT转账,这个挪用对应于RpcClient实例的omni子模块的send()办法。上面的代码从地点3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY向地点37FaKponF7zqoMLUjEiko25pDiuVH5YLEa 转入100.0个USDT代币:

$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节点,置信这个示例会有很年夜协助。

三、Wallet类应用阐明

假如不肯意搭建本人的Omni Core节点,而是心愿基于第三方API为本人的PHP使用添加对Omni Layer/USDT的支持,那末最简略的办法是应用离线买卖的入口类Wallet。

Wallet类的次要作用是依据创立并播送Omni代币转账裸买卖或比特币转账裸买卖,它的根本应用步骤以下:

应用Wallet::cloud()动态办法创立一个支持云端API效劳的Wallet实例应用addKey()办法将须要的私钥退出该Wallet实例,例如转出地点的私钥,由于Wallet需求行使私钥对裸买卖进行署名应用omniSendTx()办法天生Omni代币转账裸买卖,或许应用btcSendTx()办法比特币转账裸买卖应用broadcast()办法播送裸买卖

3.1 Omni代币转账

应用Wallet完成的Omni代币转账示例代码以下,阐明见正文:

<?phprequire('../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代币数目*/
         );

$ret = $wallet->broadcast($rawtx);                /*播送OMNI裸买卖*/var_dump($ret);

留意:

Wallet实例行使钱包中的私钥天生地点列表,并行使这些地点从第三方效劳猎取utxo信息。 因而需求钱包中 的私钥对应地点正在链上有utxo存正在,Wallet工具能力够胜利结构裸买卖。转账指标地点该当与创立Wallet工具时指定的链ID分歧,例如mainnet的p2pkh地点,前缀该当为1

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'          /*买卖手续费领取地点*/
         );

留意:

即便指定了余额短缺的手续费领取地点,Omni买卖的发送方仍然必需有微量的比特币 余额(546 SATOSHI),由于Omni协定需求买卖发送方至多有一个可用UTXO。手续费领取地点同时也是找零地点,过剩的比特币将前往至该地点

3.3 指定Omni买卖的比特币转账数目

因为Omni买卖要求发送方必需有可用的UTXO,因而为了便于接纳Omni代币的地点能够持续畅通流畅所持有的Omni代币,omniSendTx()办法正在默许状况下将向接纳方地点转入微量的比特币(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:

<?phprequire('../vendor/autoload.php');use OmniTool\Wallet;

$wallet = Wallet::cloud('./demo.wallet','testnet');
$addressList = $wallet->getAddressList();

$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地点*/
                    '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                  /*找零地点*/
                  );

四、UTXO搜集器

OmniTool应用接口UtxoCollectorInterface来商定UTXO的搜集性能。该接口的完成需求支持猎取指定地点的候选UTXO荟萃,可指定多个地点。

接口办法:

collect($addressList):提取并前往候选UTXO荟萃

参数$addressList用来申明要搜集UTXO的地点清单,类型为数组。

以后完成类:

CloudUtxoCollector:基于blockchain.com的开放API完成的Utxo搜集器LocalUtxoCollector:基于omnicored节点RPC API完成的Utxo搜集器

例如,上面的代码应用CloudUtxoCollector猎取地点mi8BvbK73nDQfaN3acpaFGYQKhfQ5ysKRn的UTXO:

use OmniTool\CloudUtxoCollector;

$collector = new CloudUtxoCollector(                    'testnet'                       /*测试网*/
                 );
$candidateBag = $collector->collect(
                    ['mi8BvbK73nDQ...KhfQ5ysKRn']   /*地点清单*/
                );

五、UTXO挑选器

OmniTool应用UtxoSelectorInterface来商定UTXO挑选性能。该接口的完成需求依据指标金额从候选UTXO落选择可用UTXO,并前往新的UtxoBag实例。

接口办法:

select($target,$candidates):抉择可生产UTXO,前往UtxoBag工具

参数$target申明要告竣的最低金额指标,单元:wei。

参数$candidates是候选的utxo荟萃,一般为UtxoCollectorInterface完成工具的collect()挪用前往的UtxoBag工具。

以后完成类:

DefaultUtxoSelector

例以下面的代码应用DefaultUtxoSelector实例从候选UTXO中删选出至多100000 wei 的UTXO:

use OmniTool\DefaultUtxoSelector;

$selector = new DefaultUtxoSelector();
$selectedBag = $selector->select(                  100000,                         /*最低指标金额*/
                  $candidateBag                   /*候选UTXO荟萃*/
               );

思考到UTXO的不成宰割性,挑选出的若干UTXO的总以及,有可能超越指标金额。能够应用UtxoBag实例的getTotal()办法查看荟萃中的UTXO总额:

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

六、裸买卖播送器

OmniTool应用BroadcasterInterface来商定裸买卖播送的性能。该接口的完成该当将裸买卖播送到Omni网络中。

接口办法:

broadcast($rawtx):播送裸买卖

参数$rawtx用来申明要播送的裸买卖,类型为16进制字符串。

以后完成类:

CloudBroadcasterLocalBroadcaster

例如,上面的代码应用CloudBroadcaster将裸买卖码流播送到Omni网络中:

use OmniTool\CloudBroadcaster;

$broadcaster = new CloudBroadcaster(                      'testnet'                     /*测试网*/
                   );
$ret = $broadcaster->broadcast(        '01000000011da9283b4...59f58488ac00000000'  /*裸买卖*/
       );

七、数据查问接口

OmniTool应用ExplorerInterface来商定Omni数据查问性能。

接口办法:

getBtcBalance($address):查问指定地点的比特币余额getOmniBalance($address,$propertyId):查问指定地点的Omni代币余额

以后完成类:

CloudBroadcasterLocalBroadcaster

例如,上面的代码应用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;

保举教程:领取宝即时到账正在线领取实战名目开发视频教程

以上就是USDT PHP开发包OmniTool简介的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 USDT PHP开发包 OmniTool

抱歉,评论功能暂时关闭!