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,次要类/接口及关系以下图所示:
二、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
抱歉,评论功能暂时关闭!