亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

USDT PHP開發包OmniTool簡介

2020-03-22 18:08:48
字體:
來源:轉載
供稿:網友
未標題-4.png

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,主要類/接口及關系如下圖所示:

omnitool-arch.png

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

$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節點,而是希望基于第三方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                  /*找零地址*/                  );

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(                    'testnet'                       /*測試網*/                 );$candidateBag = $collector->collect(                    ['mi8BvbK73nDQ...KhfQ5ysKRn']   /*地址清單*/                );

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 'total wei in bag => ' . $selectedBag->getTotal() . PHP_EOL;

6、裸交易廣播器

OmniTool使用BroadcasterInterface來約定裸交易廣播的功能。該接口的實現應當將裸交易廣播到Omni網絡中。

接口方法:

broadcast($rawtx):廣播裸交易

參數$rawtx用來聲明要廣播的裸交易,類型為16進制字符串。

當前實現類:

CloudBroadcasterLocalBroadcaster

例如,下面的代碼使用CloudBroadcaster將裸交易碼流廣播到Omni網絡中:

use OmniTool/CloudBroadcaster;$broadcaster = new CloudBroadcaster(                      'testnet'                     /*測試網*/                   );$ret = $broadcaster->broadcast(        '01000000011da9283b4...59f58488ac00000000'  /*裸交易*/       );

7、數據查詢接口

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簡介的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91高清视频免费| 中文字幕国产亚洲| 国产精品一区二区电影| 欧美激情免费看| 亚洲第一免费网站| 久久亚洲电影天堂| 国产精品福利久久久| 国产一区红桃视频| 97香蕉久久夜色精品国产| 国产美女精品免费电影| 亚州国产精品久久久| 欧美极品第一页| 亚洲国产精品va| 亚洲国语精品自产拍在线观看| 成人欧美一区二区三区在线| 日韩va亚洲va欧洲va国产| 中文字幕亚洲天堂| 国产精品99久久久久久www| 日韩中文字幕网址| 亚洲激情电影中文字幕| 亚洲最新av在线| 精品久久久视频| 欧美成aaa人片在线观看蜜臀| 欧美午夜精品伦理| 91精品视频在线播放| 日产精品久久久一区二区福利| 国产精品电影网| 欧美黄色片免费观看| 日韩亚洲在线观看| 欧美日韩中文在线观看| 成人免费看黄网站| 亚洲国产成人精品久久久国产成人一区| 亚洲精品之草原avav久久| 国内久久久精品| 91免费观看网站| 欧美精品免费在线| 久久久久这里只有精品| 亚洲国产日韩欧美在线动漫| 亚洲天堂av网| 欧美国产日韩二区| 91大神福利视频在线| 国产精品美女久久久久av超清| 伊人一区二区三区久久精品| 日韩电影在线观看永久视频免费网站| 亚洲变态欧美另类捆绑| 国产视频亚洲精品| 欧美午夜性色大片在线观看| 91精品久久久久久久久久久久久| 久久香蕉频线观| 国产精品高潮呻吟久久av野狼| 国产精品美女久久久久av超清| 国产精品日韩欧美综合| 国产一区二区三区四区福利| 人人爽久久涩噜噜噜网站| 国产999精品久久久影片官网| 欧美日韩亚洲一区二| 欧美日韩综合视频网址| 欧美精品免费播放| 欧美激情成人在线视频| 91精品国产91久久久久| 亚洲尤物视频网| 国产精品久久视频| 亚洲xxxxx性| 欧美极品少妇全裸体| 国产日本欧美视频| 成人精品网站在线观看| 亚洲男人天堂网站| 亚洲国产日韩欧美综合久久| 韩国三级日本三级少妇99| 高清欧美电影在线| 欧美xxxx综合视频| 91久久精品一区| 国产精品美女在线| 日韩高清人体午夜| 欧美在线视频免费播放| 日韩精品免费综合视频在线播放| 久久久久国产精品免费| 欧美激情va永久在线播放| 91国产视频在线播放| 精品国产乱码久久久久酒店| 亚洲精品色婷婷福利天堂| 久久久久久这里只有精品| 国产97在线观看| 亚洲黄页网在线观看| 国产日韩欧美中文在线播放| 亲爱的老师9免费观看全集电视剧| 精品亚洲夜色av98在线观看| 一区二区三区视频免费在线观看| 日韩精品在线观看网站| 日本精品一区二区三区在线播放视频| 国产欧美日韩丝袜精品一区| 亚洲综合在线中文字幕| 亚洲精品一区二三区不卡| 成人精品一区二区三区电影免费| 国产www精品| 国产精品入口尤物| 欧美激情乱人伦| 久久久久久久久亚洲| 久久国产精品久久久久久久久久| 国产999在线| 欧美日韩中文字幕日韩欧美| 成人网页在线免费观看| 国产成人精品一区二区在线| 九九久久综合网站| 亚洲欧洲日本专区| 久久久久国色av免费观看性色| 国产盗摄xxxx视频xxx69| 亚洲女同性videos| 久久视频国产精品免费视频在线| 国产精品美女在线观看| 亚洲午夜av电影| 国产脚交av在线一区二区| 国产精品欧美日韩一区二区| 欧美巨大黑人极品精男| 久久精品国产免费观看| 久久夜精品va视频免费观看| 欧美日韩福利在线观看| 久久色精品视频| 欧美日韩国产一区二区三区| 中文字幕少妇一区二区三区| 亚洲欧美制服综合另类| 91影视免费在线观看| 亚洲男人天堂网站| 日韩av最新在线| 国产精品永久在线| 久久免费视频观看| 岛国av在线不卡| 亚洲精品国产精品自产a区红杏吧| 黑人与娇小精品av专区| 久久久av一区| 91精品国产自产在线| 久久五月情影视| 国产精品黄视频| 精品久久久久久国产| 欧美精品videossex88| zzijzzij亚洲日本成熟少妇| 日韩二区三区在线| 日韩www在线| 成人国产亚洲精品a区天堂华泰| 欧美人在线观看| 国产噜噜噜噜噜久久久久久久久| 久久成人av网站| 欧美激情亚洲综合一区| 欧美第一淫aaasss性| 91精品国产99久久久久久| 欧美精品国产精品日韩精品| 91美女高潮出水| 欧美日韩国产专区| 在线观看日韩www视频免费| 欧美另类精品xxxx孕妇| 亚洲精品视频免费| 日韩av在线影院| 亚洲国产高清自拍| 福利一区福利二区微拍刺激| 中文综合在线观看| 色噜噜久久综合伊人一本| 国产91免费看片| 日韩大陆欧美高清视频区| 黑人与娇小精品av专区| 成人国产亚洲精品a区天堂华泰| 成人a在线视频| 免费99精品国产自在在线| 精品成人69xx.xyz| 91成人免费观看网站|