首頁 後端開發 php教程 USDT PHP開發包OmniTool簡介

USDT PHP開發包OmniTool簡介

Jun 06, 2019 pm 01:29 PM
usdt

USDT PHP開發包OmniTool簡介

OmniTool開發包適用於為PHP應用快速增加對Omni Layer/USDT數位資產的支援能力,即支援使用自有Omni Layer節點的應用場景,也支援基於第三方API服務和離線裸交易的輕量級部署場景。

1、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,主要類別/介面及關係如下圖所示:

USDT PHP開發包OmniTool簡介

2、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代幣:

rewreeeDRPDD 或者DRA缸通過的介面例如,使用listunspent呼叫來取得本機節點中指定位址的utxo:

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

開發套件中的demo/rpc-demo.php範例程式碼使用RpcClient類別完整示範了在Omni層的代幣發行與轉賬功能,如果你打算搭建自己的Omni Core節點,相信這個範例會有很大幫助。

3、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(&#39;../vendor/autoload.php&#39;);use OmniTool\Wallet;                              /*引入开发包*/$wallet = Wallet::cloud(            &#39;./demo.wallet&#39;,                      /*钱包文件地址,自动创建*/
            &#39;testnet&#39;                             /*网络ID*/
          );
$prvKey = &#39;4aec8e45106....00d5c5af494a4e05b&#39;;     /*私钥:16进制字符串*/            $wallet->addKey($prvKey);                         /*将私钥加入钱包,只需加入一次*/$addressList = $wallet->getAddressList();         /*返回钱包管理的所有地址,数组*/$rawtx = $wallet->omniSendTx(
            $addressList[0],                      /*发送方地址,私钥必须已经加入钱包*/
            &#39;mgYPLmNuZymK...e2XUNF6VFnT&#39;,         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            &#39;0.000001&#39;                            /*转账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],                      /*发送方地址,私钥必须已经加入钱包*/
            &#39;mgYPLmNuZymK...e2XUNF6VFnT&#39;,         /*接收方地址*/
            2,                                    /*转账OMNI代币ID,2:TOMN*/
            &#39;0.000001&#39;,                           /*转账OMNI代币数量*/
            &#39;mnRo8JyTHDd5...CBPQTQ4UZ8W&#39;          /*交易手续费支付地址*/
         );
登入後複製

注意:

即使指定了余额充足的手续费支付地址,Omni交易的发送方依然必须有微量的比特币 余额(546 SATOSHI),因为Omni协议需要交易发送方至少有一个可用UTXO。手续费支付地址同时也是找零地址,多余的比特币将返回至该地址

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

由于Omni交易要求发送方必须有可用的UTXO,因此为了便于接收Omni代币的地址可以继续流通所持有的Omni代币,omniSendTx()方法在默认情况下将向接收方地址转入微量的比特币(546 SATOSHI),可以在调用该方法时修改这个默认数值。

例如,下面的代码转入接收方1000个SATOSHI:

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

3.4 比特币转账

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

例如,下面的代码从钱包的第一个地址向指定接受地址转入1000个SATOSHI:

<?phprequire(&#39;../vendor/autoload.php&#39;);use OmniTool\Wallet;

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

$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/
                    &#39;moneyqMan7u...8qVrc9ikLP&#39;,     /*接收方地址*/
                    1000,                           /*转账比特币数量,单位:SATOSHI*/
                    500                             /*手续费,单位:SATOSHI*/
                  );                       
echo &#39;btc rawtx => &#39; . $rawtx . PHP_EOL;

$ret = $wallet->broadcast($rawtx);                  /*广播裸交易*/
登入後複製

默认情况下,btcSendTx()使用发送方地址作为找零地址,也可以在调用时指定其他地址作为找零地址,例如,下面的代码创建一个新地址接收找零:

$changeAddress = $wallet->getNewAddress();          /*创建新地址*/$rawtx = $wallet->btcSendTx(
                    $addressList[0],                /*发送方地址*/
                    &#39;moneyqMan7u...8qVrc9ikLP&#39;,     /*接收方地址*/
                    1000,                           /*转账比特币数量,单位:SATOSHI*/
                    500,                            /*手续费,单位:SATOSHI*/
                    $changeAddress                  /*找零地址*/
                  );
登入後複製

4、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(                    &#39;testnet&#39;                       /*测试网*/
                 );
$candidateBag = $collector->collect(
                    [&#39;mi8BvbK73nDQ...KhfQ5ysKRn&#39;]   /*地址清单*/
                );
登入後複製

5、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 &#39;total wei in bag => &#39; . $selectedBag->getTotal() . PHP_EOL;
登入後複製

6、裸交易广播器

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

接口方法:

broadcast($rawtx):广播裸交易

参数$rawtx用来声明要广播的裸交易,类型为16进制字符串。

当前实现类:

CloudBroadcasterLocalBroadcaster

例如,下面的代码使用CloudBroadcaster将裸交易码流广播到Omni网络中:

use OmniTool\CloudBroadcaster;

$broadcaster = new CloudBroadcaster(                      &#39;testnet&#39;                     /*测试网*/
                   );
$ret = $broadcaster->broadcast(        &#39;01000000011da9283b4...59f58488ac00000000&#39;  /*裸交易*/
       );
登入後複製

7、数据查询接口

OmniTool使用ExplorerInterface来约定Omni数据查询功能。

接口方法:

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

当前实现类:

CloudBroadcasterLocalBroadcaster

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

use OmniTool\CloudExplorer;

$explorer = new CloudExplorer(&#39;mainnet&#39;);

$address = &#39;1Jekm8ZswQmDhLFMp9cuYb1Kcq26riFp6m&#39;;

$balance = $explorer->getBtcBalance($address);echo &#39;btc balance => &#39; . PHP_EOL;

$balance = $explorer->getOmniBalance($address,31);echo &#39;usdt balance => &#39; . $balance[&#39;balance&#39;]. PHP_EOL;
登入後複製

推荐教程:支付宝即时到账在线支付实战项目开发视频教程

以上是USDT PHP開發包OmniTool簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1674
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
瑞波幣(XRP幣)屬於什麼幣種 新手詳細教程 瑞波幣(XRP幣)屬於什麼幣種 新手詳細教程 Apr 28, 2025 pm 07:57 PM

瑞波幣(XRP)由Ripple公司創建,用於跨境支付,快速且費用低,適合小額交易支付。註冊錢包和交易所後,可進行購買和存儲。

okx交易平台官網app是哪個地址 排名前三的交易所 okx交易平台官網app是哪個地址 排名前三的交易所 Apr 28, 2025 pm 07:21 PM

OKX提供便捷的交易體驗,app可在App Store和Google Play下載。排名前三的交易所為Binance、OKX和Gate.io。

幣安官網入口 幣安官方最新入口2025 幣安官網入口 幣安官方最新入口2025 Apr 28, 2025 pm 07:54 PM

訪問幣安官網,並查看HTTPS和綠鎖標誌,避免釣魚網站,官方應用也可安全訪問。

十大幣圈交易平台排行榜 十大幣圈交易所app推薦2025年 十大幣圈交易平台排行榜 十大幣圈交易所app推薦2025年 Apr 28, 2025 pm 12:18 PM

十大幣圈交易平台排行榜:1. Binance,2. OKX,3. Gate.io,4. Coinbase,5. Kraken,6. Huobi,7. KuCoin,8. Bitfinex,9. Bittrex,10. Poloniex,這些交易所均提供註冊、驗證、存款、提款和交易等功能,適合不同水平的交易者使用。

ok交易所國內如何註冊? ok交易平台大陸新手註冊使用指南 ok交易所國內如何註冊? ok交易平台大陸新手註冊使用指南 May 08, 2025 pm 10:51 PM

在加密貨幣市場中,選擇一個可靠的交易平台是至關重要的。 OK交易平台作為全球知名的數字資產交易所,吸引了大量大陸新手用戶。本指南將詳細介紹如何在OK交易平台上進行註冊和使用,幫助新手用戶快速上手。

2025年幣圈'撿錢”指南:5分鐘學會合約槓桿,日賺10萬! 2025年幣圈'撿錢”指南:5分鐘學會合約槓桿,日賺10萬! May 08, 2025 pm 08:39 PM

合約槓桿交易是幣圈中一種常見的交易方式,它允許交易者使用較少的資金進行更大金額的交易。通過使用槓桿,交易者可以放大他們的盈利潛力,但同時也增加了風險。槓桿通常以倍數表示,比如10倍槓桿意味著你可以用1個比特幣的保證金交易10個比特幣的合約。

期貨交易平台TOP10:永續合約與期權交易 期貨交易平台TOP10:永續合約與期權交易 May 08, 2025 pm 07:12 PM

在加密貨幣市場中,期貨交易平台扮演著重要角色,尤其是在永續合約和期權交易方面。以下是當前市場上備受推崇的十大期貨交易平台,並詳細介紹它們在永續合約和期權交易方面的特點和優勢。

幣安怎麼減倉 幣安怎麼減倉 May 07, 2025 pm 07:12 PM

幣安(Binance)作為全球領先的加密貨幣交易平台,為用戶提供了多種交易和管理資產的方式。減倉,即賣出部分持倉以降低風險,是交易者常用的一種策略。本文將詳細介紹在幣安平台上如何進行減倉操作。

See all articles