怎么理解USDT PHP開發(fā)包OmniTool,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
沙依巴克網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,沙依巴克網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為沙依巴克近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的沙依巴克做網(wǎng)站的公司定做!
OmniTool開發(fā)包適用于為PHP應(yīng)用快速增加對Omni Layer/USDT數(shù)字資產(chǎn)的支持能力,即支持使用自有Omni Layer節(jié)點的應(yīng)用場景,也支持基于第三方API服務(wù)和離線裸交易的輕量級部署場景。
OmniTool開發(fā)包主要包含以下特性:
完善的Omni Layer節(jié)點RPC封裝
支持利用自有節(jié)點或第三方服務(wù)獲取指定地址的utxo集合
支持離線生成omni代幣轉(zhuǎn)賬裸交易
支持利用自有節(jié)點或第三方服務(wù)廣播裸交易
OmniTool支持本地部署的Omnicored節(jié)點,也支持blockchain.info、btc.com等提供的開放API,要增加對其他第三方服務(wù)的支持也非常簡單,只需要參考代碼實現(xiàn)如下接口:
UtxoCollectorInterface:utxo收集器
UtxoSelectorInterface:utxo篩選器
BroadcasterInterface:裸交易廣播器
ExplorerInterface:數(shù)據(jù)查詢接口
OmniTool軟件包運行在**Php 7.1+**環(huán)境下,當(dāng)前版本1.0.0,主要類/接口及關(guān)系如下圖所示:
OmniTool的主要代碼文件清單參見:http://sc.hubwiz.com/codebag/omni-php-lib/
RpcClient類封裝了Omni Layer的RPC接口協(xié)議。創(chuàng)建RpcClient對象時,需要傳入包含有效身份信息的節(jié)點RPC URL。例如,假設(shè)安裝在本機(jī)的omnicored節(jié)點軟件配置如下:
rpcuser:user
rpcpassword:123456
rpcport:8332
那么可以使用如下的代碼來實例化RpcClient:
use \OmniTool\RpcClient; $client = new RpcClient( 'http://user:123456@localhost:8332' /*節(jié)點RPC接口的URL*/ );
Omni Core節(jié)點在Bitcoin原有的RPC接口之外,擴(kuò)充了額外的接口用來操作Omni層的數(shù)據(jù),這些擴(kuò)展的RPC接口采用omni_
前綴以區(qū)隔于Bitcoin的原有RPC接口。為了便于區(qū)隔這兩層的RPC調(diào)用,RpcClient引入了協(xié)議子模塊的概念,將Bitcoin的原始RPC接口和Omni的擴(kuò)展RPC接口分別掛接到btc子模塊和omni子模塊。
例如,獲取某個地址的USDT代幣余額需要使用Omni層的omni_getbalance調(diào)用,這個RPC調(diào)用對應(yīng)于RpcClient實例的omni
子模塊的getBalance()
方法。下面的代碼獲取地址1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P
的USDT(資產(chǎn)ID:31)余額:
$ret = $client->omni->getBalance( '1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P', /*地址*/ 31 /*資產(chǎn)ID:USDT*/ );
類似的,可以使用omni_send調(diào)用來執(zhí)行簡單的USDT轉(zhuǎn)賬,這個調(diào)用對應(yīng)于RpcClient實例的omni子模塊的send()
方法。下面的代碼從地址3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY
向地址37FaKponF7zqoMLUjEiko25pDiuVH5YLEa
轉(zhuǎn)入100.0個USDT代幣:
$ret = $client->omni->send( '3M9qvHKtgARhqcMtM5cRT9VaiDJ5PSfQGY', /*代幣轉(zhuǎn)出地址*/ '37FaKponF7zqoMLUjEiko25pDiuVH5YLEa', /*代幣轉(zhuǎn)入地址*/ 31, /*代幣ID:USDT*/ "100.00" /*轉(zhuǎn)移的代幣數(shù)量*/ );
原有的bitoin層的RPC接口則可以通過RpcClient的btc子模塊來訪問。例如,使用listunspent調(diào)用來獲取本地節(jié)點中指定地址的utxo:
$ret = $client->btc->listUnspent( 6, /*最小確認(rèn)數(shù)*/ 999999, /*最大確認(rèn)數(shù)*/ ['mgnucj8nYqdrPFh3JfZSB1NmUThUGnmsqe'] /*地址清單*/ );
開發(fā)包中的demo/rpc-demo.php
示例代碼使用RpcClient類完整演示了在Omni層的代幣發(fā)行與轉(zhuǎn)賬功能,如果你計劃搭建自己的Omni Core節(jié)點,相信這個示例會有很大幫助。
如果不愿意搭建自己的Omni Core節(jié)點,而是希望基于第三方API為自己的PHP應(yīng)用增加對Omni Layer/USDT的支持,那么最簡單的方法是使用離線交易的入口類Wallet。
Wallet類的主要作用是根據(jù)創(chuàng)建并廣播Omni代幣轉(zhuǎn)賬裸交易或比特幣轉(zhuǎn)賬裸交易,它的基本使用步驟如下:
使用Wallet::cloud()
靜態(tài)方法創(chuàng)建一個支持云端API服務(wù)的Wallet實例
使用addKey()
方法將必要的私鑰加入該Wallet實例,例如轉(zhuǎn)出地址的私鑰,因為Wallet需要利用私鑰對裸交易進(jìn)行簽名
使用omniSendTx()
方法生成Omni代幣轉(zhuǎn)賬裸交易,或者使用btcSendTx()
方法比特幣轉(zhuǎn)賬裸交易
使用broadcast()
方法廣播裸交易
使用Wallet實現(xiàn)的Omni代幣轉(zhuǎn)賬示例代碼如下,說明見注釋:
addKey($prvKey); /*將私鑰加入錢包,只需加入一次*/ $addressList = $wallet->getAddressList(); /*返回錢包管理的所有地址,數(shù)組*/ $rawtx = $wallet->omniSendTx( $addressList[0], /*發(fā)送方地址,私鑰必須已經(jīng)加入錢包*/ 'mgYPLmNuZymK...e2XUNF6VFnT', /*接收方地址*/ 2, /*轉(zhuǎn)賬OMNI代幣ID,2:TOMN*/ '0.000001' /*轉(zhuǎn)賬OMNI代幣數(shù)量*/ ); $ret = $wallet->broadcast($rawtx); /*廣播OMNI裸交易*/ var_dump($ret);
注意:
Wallet實例利用錢包中的私鑰生成地址列表,并利用這些地址從第三方服務(wù)獲取utxo信息。 因此需要錢包中 的私鑰對應(yīng)地址在鏈上有utxo存在,Wallet對象才能夠成功構(gòu)造裸交易。
轉(zhuǎn)賬目標(biāo)地址應(yīng)當(dāng)與創(chuàng)建Wallet對象時指定的鏈ID一致,例如mainnet的p2pkh地址,前綴應(yīng)當(dāng)為1
在Omni協(xié)議層不需要支付交易手續(xù)費,但是Omni交易所嵌入的比特幣交易依然需要支付手續(xù)費。默認(rèn)情況下omniSendTx()
方法使用發(fā)送方地址支付比特幣交易手續(xù)費,但可以傳入額外的參數(shù)來指定其他地址支付交易手續(xù)費,當(dāng)你的PHP應(yīng)用需要實現(xiàn)多賬戶歸集功能時,使用統(tǒng)一的手續(xù)費支付地址會更容易管理一些。
例如,下面的代碼使用地址mnRo8JyTHDd5NxRb3UvGbAhCBPQTQ4UZ8W
支付omni交易的手續(xù)費:
$rawtx = $wallet->omniSendTx( $addressList[0], /*發(fā)送方地址,私鑰必須已經(jīng)加入錢包*/ 'mgYPLmNuZymK...e2XUNF6VFnT', /*接收方地址*/ 2, /*轉(zhuǎn)賬OMNI代幣ID,2:TOMN*/ '0.000001', /*轉(zhuǎn)賬OMNI代幣數(shù)量*/ 'mnRo8JyTHDd5...CBPQTQ4UZ8W' /*交易手續(xù)費支付地址*/ );
注意:
即使指定了余額充足的手續(xù)費支付地址,Omni交易的發(fā)送方依然必須有微量的比特幣 余額(546 SATOSHI),因為Omni協(xié)議需要交易發(fā)送方至少有一個可用UTXO。
手續(xù)費支付地址同時也是找零地址,多余的比特幣將返回至該地址
由于Omni交易要求發(fā)送方必須有可用的UTXO,因此為了便于接收Omni代幣的地址可以繼續(xù)流通所持有的Omni代幣,omniSendTx()
方法在默認(rèn)情況下將向接收方地址轉(zhuǎn)入微量的比特幣(546 SATOSHI),可以在調(diào)用該方法時修改這個默認(rèn)數(shù)值。
例如,下面的代碼轉(zhuǎn)入接收方1000個SATOSHI:
$rawtx = $wallet->omniSendTx( $addressList[0], /*發(fā)送方地址,私鑰必須已經(jīng)加入錢包*/ 'mgYPLmNuZymK...e2XUNF6VFnT', /*接收方地址 2, /*轉(zhuǎn)賬OMNI代幣ID,2:TOMN*/ '0.000001', /*轉(zhuǎn)賬OMNI代幣數(shù)量*/ 'mnRo8JyTHDd5...CBPQTQ4UZ8W', /*交易手續(xù)費支付地址*/ 1000 /*轉(zhuǎn)賬比特幣數(shù)量,單位:SATOSHI*/ );
OmniTool也支持比特幣轉(zhuǎn)賬裸交易的生成與廣播。
例如,下面的代碼從錢包的第一個地址向指定接受地址轉(zhuǎn)入1000個SATOSHI:
getAddressList(); $rawtx = $wallet->btcSendTx( $addressList[0], /*發(fā)送方地址*/ 'moneyqMan7u...8qVrc9ikLP', /*接收方地址*/ 1000, /*轉(zhuǎn)賬比特幣數(shù)量,單位:SATOSHI*/ 500 /*手續(xù)費,單位:SATOSHI*/ ); echo 'btc rawtx => ' . $rawtx . PHP_EOL; $ret = $wallet->broadcast($rawtx); /*廣播裸交易*/
默認(rèn)情況下,btcSendTx()
使用發(fā)送方地址作為找零地址,也可以在調(diào)用時指定其他地址作為找零地址,例如,下面的代碼創(chuàng)建一個新地址接收找零:
$changeAddress = $wallet->getNewAddress(); /*創(chuàng)建新地址*/ $rawtx = $wallet->btcSendTx( $addressList[0], /*發(fā)送方地址*/ 'moneyqMan7u...8qVrc9ikLP', /*接收方地址*/ 1000, /*轉(zhuǎn)賬比特幣數(shù)量,單位:SATOSHI*/ 500, /*手續(xù)費,單位:SATOSHI*/ $changeAddress /*找零地址*/ );
OmniTool使用接口UtxoCollectorInterface
來約定UTXO的收集功能。該接口的實現(xiàn)需要支持獲取指定地址的候選UTXO集合,可指定多個地址。
接口方法:
collect($addressList):提取并返回候選UTXO集合
參數(shù)$addressList
用來聲明要收集UTXO的地址清單,類型為數(shù)組。
當(dāng)前實現(xiàn)類:
CloudUtxoCollector:基于blockchain.com的開放API實現(xiàn)的Utxo收集器
LocalUtxoCollector:基于omnicored節(jié)點RPC API實現(xiàn)的Utxo收集器
例如,下面的代碼使用CloudUtxoCollector獲取地址mi8BvbK73nDQfaN3acpaFGYQKhfQ5ysKRn
的UTXO:
use OmniTool\CloudUtxoCollector; $collector = new CloudUtxoCollector( 'testnet' /*測試網(wǎng)*/ ); $candidateBag = $collector->collect( ['mi8BvbK73nDQ...KhfQ5ysKRn'] /*地址清單*/ );
OmniTool使用UtxoSelectorInterface
來約定UTXO篩選功能。該接口的實現(xiàn)需要根據(jù)目標(biāo)金額從候選UTXO中選擇可用UTXO,并返回新的UtxoBag實例。
接口方法:
select($target,$candidates):選擇可消費UTXO,返回UtxoBag對象
參數(shù)$target
聲明要達(dá)成的最低金額目標(biāo),單位:wei。
參數(shù)$candidates
是候選的utxo集合,通常是UtxoCollectorInterface實現(xiàn)對象的collect()調(diào)用返回的UtxoBag對象。
當(dāng)前實現(xiàn)類:
DefaultUtxoSelector
例如下面的代碼使用DefaultUtxoSelector實例從候選UTXO中刪選出至少100000 wei 的UTXO:
use OmniTool\DefaultUtxoSelector; $selector = new DefaultUtxoSelector(); $selectedBag = $selector->select( 100000, /*最低目標(biāo)金額*/ $candidateBag /*候選UTXO集合*/ );
考慮到UTXO的不可分割性,篩選出的若干UTXO的總和,有可能超過目標(biāo)金額??梢允褂肬txoBag實例的getTotal()
方法查看集合中的UTXO總額:
echo 'total wei in bag => ' . $selectedBag->getTotal() . PHP_EOL;
OmniTool使用BroadcasterInterface
來約定裸交易廣播的功能。該接口的實現(xiàn)應(yīng)當(dāng)將裸交易廣播到Omni網(wǎng)絡(luò)中。
接口方法:
broadcast($rawtx):廣播裸交易
參數(shù)$rawtx
用來聲明要廣播的裸交易,類型為16進(jìn)制字符串。
當(dāng)前實現(xiàn)類:
CloudBroadcaster
LocalBroadcaster
例如,下面的代碼使用CloudBroadcaster將裸交易碼流廣播到Omni網(wǎng)絡(luò)中:
use OmniTool\CloudBroadcaster; $broadcaster = new CloudBroadcaster( 'testnet' /*測試網(wǎng)*/ ); $ret = $broadcaster->broadcast( '01000000011da9283b4...59f58488ac00000000' /*裸交易*/ );
OmniTool使用ExplorerInterface
來約定Omni數(shù)據(jù)查詢功能。
接口方法:
getBtcBalance($address):查詢指定地址的比特幣余額
getOmniBalance($address,$propertyId):查詢指定地址的Omni代幣余額
當(dāng)前實現(xiàn)類:
CloudBroadcaster
LocalBroadcaster
例如,下面的代碼使用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;
如果你想學(xué)習(xí)區(qū)塊鏈并在Blockchain Technologies建立職業(yè)生涯,那么請查看我們分享的一些以太坊、比特幣、EOS、Fabric、Tendermint等區(qū)塊鏈相關(guān)的交互式在線編程實戰(zhàn)教程:
java以太坊開發(fā)教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
python以太坊,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。
php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。
以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。
以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js、MongoDB、區(qū)塊鏈、ipfs實現(xiàn)去中心化電商DApp實戰(zhàn),適合進(jìn)階。
ERC721以太坊通證實戰(zhàn),課程以一個數(shù)字藝術(shù)品創(chuàng)作與分享DApp的實戰(zhàn)開發(fā)為主線,深入講解以太坊非同質(zhì)化通證的概念、標(biāo)準(zhǔn)與開發(fā)方案。內(nèi)容包含ERC-721標(biāo)準(zhǔn)的自主實現(xiàn),講解OpenZeppelin合約代碼庫二次開發(fā),實戰(zhàn)項目采用Truffle,IPFS,實現(xiàn)了通證以及去中心化的通證交易所。
C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。
java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
c#比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機(jī)制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在C#代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是C#工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
EOS入門教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發(fā)。
深入淺出玩轉(zhuǎn)EOS錢包開發(fā),本課程以手機(jī)EOS錢包的完整開發(fā)過程為主線,深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā),課程內(nèi)容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區(qū)塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發(fā)包訪問EOS區(qū)塊鏈,以及如何在React前端應(yīng)用中集成對EOS區(qū)塊鏈的支持。課程內(nèi)容深入淺出,非常適合前端工程師深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開發(fā)。
Hyperledger Fabric 區(qū)塊鏈開發(fā)詳解,本課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書與MSP服務(wù)、權(quán)限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計、nodejs鏈碼與應(yīng)用開發(fā)的操作實踐,是Nodejs工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。
Hyperledger Fabric java 區(qū)塊鏈開發(fā)詳解,課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書與MSP服務(wù)、權(quán)限策略、信道配置與啟動、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計、java鏈碼與應(yīng)用開發(fā)的操作實踐,是java工程師學(xué)習(xí)Fabric區(qū)塊鏈開發(fā)的最佳選擇。
tendermint區(qū)塊鏈開發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態(tài)庫等,也包括代幣發(fā)行等豐富的實操代碼,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。