您好,登錄后才能下訂單哦!
這篇文章主要介紹“Ripple區(qū)塊鏈如何對接PHP開發(fā)包”,在日常操作中,相信很多人在Ripple區(qū)塊鏈如何對接PHP開發(fā)包問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Ripple區(qū)塊鏈如何對接PHP開發(fā)包”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
XrpTool可以幫助PHP應用快速接入瑞波/Ripple區(qū)塊鏈, 即支持部署自有Ripple節(jié)點的應用場景,也支持利用公開的Ripple節(jié)點廣播離線裸交易的輕量級部署場景。
XrpTool主要包括以下特性:
全功能的Ripple節(jié)點客戶端,支持完整的RPC API開發(fā)接口
支持離線生成Ripple密鑰對和地址,支持Secp256k1和Ed25519密碼學算法
支持Ripple交易的離線序列化與離線簽名
支持瑞波幣/XRP和自發(fā)行代幣的直接轉賬,支持代幣發(fā)行、幣幣交易、支票簽發(fā)、資金托管等多種Ripple交易
XrpTool開發(fā)包運行在PHP 7.1+環(huán)境下, 當前版本1.0.0
XrpTool是開發(fā)包的入口類,可以利用它快速組織并廣播一個交易,或者訪問開發(fā)包的其他類的預創(chuàng)建實例對象。
在XrpTool中,一個Ripple交易的執(zhí)行包含以下環(huán)節(jié):
交易數(shù)據(jù)的組織,使用關聯(lián)數(shù)組來組織交易數(shù)據(jù)
交易數(shù)據(jù)簽名與廣播,使用XrpTool實例的transact()
方法進行交易 預處理、序列化和簽名,最后提交給節(jié)點廣播到網(wǎng)絡中
等待交易確認
例如,下面的代碼使用XrpTool完成瑞波幣/XRP的直接支付交易:
use XrpTool\XrpTool; $tool = new XrpTool('https://s.altnet.rippletest.net:51234'); //使用測試鏈公開節(jié)點 //用密文恢復身份憑證 $credential = $tool->restoreCredential('snT3WxQbGLMAfqPhS9pYHM9gpib79'); //發(fā)起賬號的身份憑證 //組織交易數(shù)據(jù) $tx = [ 'TransactionType' => 'Payment', //交易類型:支付 'Account' => 'rfT5EnW5kfJNyLpUb6X9Do8HoUMvQKDrS8', //發(fā)起賬號 'Destination' => 'rnU5a7v51BV6znn8kq8jdGtZNDiMJxojcc', //接收賬號 'Amount' => '13500' //交易數(shù)量,單位:drop ]; //交易序列化、簽名、提交 $txid = $tool->transact($tx,$credential); //提交給節(jié)點廣播 echo "tx hash => " . $txid . PHP_EOL; //顯示交易哈希 //等待交易確認 $validated = $tool->waitForTx($txid); //默認超時:5秒 echo "tx validated => " . $validated . PHP_EOL; //顯示是否已確認 //查詢接收賬號的余額 $balance = $tool->getBalance($tx['Destination']); //檢查接收賬號的余額 echo "xrp balance => " . $balance->xrp . PHP_EOL; //顯示XRP余額
XrpTool目前支持的Ripple交易類型參見官網(wǎng)說明:http://sc.hubwiz.com/codebag/xrp-php-lib/
Ripple區(qū)塊鏈支持任何用戶發(fā)行代幣,前提是得到別人的信任,這就是信任線/TrustLine的作用: Ripple使用信任線來表示一個用戶對另一個用戶的有限的信任額度。
在Ripple區(qū)塊鏈中發(fā)行代幣有三個步驟:
啟用發(fā)行賬戶的DefaultRipple標志
接收賬戶設置對發(fā)行賬戶的信任線
發(fā)行賬戶向接收賬戶轉賬代幣
下面代碼展示了如何使用XrpTool發(fā)行自定義代幣,其中issuer表示發(fā)行賬戶,receiver表示代幣接收賬戶:
use XrpTool\XrpTool; $tool = new XrpTool('https://s.altnet.rippletest.net:51234'); //使用測試鏈公開節(jié)點 $issuer_address = 'rfT5EnW5kfJNyLpUb6X9Do8HoUMvQKDrS8'; //發(fā)行賬戶地址 $issuer_secret = 'snT3WxQbGLMAfqPhS9pYHM9gpib79'; //發(fā)行賬戶密文 $receiver_address = 'rnU5a7v51BV6znn8kq8jdGtZNDiMJxojcc'; //接收賬戶地址 $receiver_secret = 'snfjzzfRtq3hPdZ2msjFUxRN1748B'; //接收賬戶密文 //啟用發(fā)行賬戶的相關標志 $txi = [ 'TransactionType' => 'AccountSet', //交易類型:AccountSet 'Account' => $issuer_address, //交易發(fā)起賬戶 'SetFlag' => 8, //default-ripple //設置DefaultRipple標志 ]; $txid = $tool->transactWithSecret($txi,$issuer_secret); //提交交易 $tool->waitForTx($txid); //等待交易確認 //接收賬戶設置信任線 $txi = [ 'TransactionType' => 'TrustSet', //交易類型:TrustSet 'Account' => $receiver_address, //交易發(fā)起賬戶 'LimitAmount' => [ 'currency' => 'WIZ', //信任的代幣名稱:WIZ 'issuer' => $issuer_address, //信任的發(fā)行賬戶 'value' => '1000' //信任額度 ] ]; $txid = $tool->transactWithSecret($txi,$receiver_secret); //提交交易 $tool->waitForTx($txid); //等待交易確認 //發(fā)行代幣 $txi = [ 'TransactionType' => 'Payment', //交易類型:Payment 'Account' => $issuer_address, //交易發(fā)起賬戶 'Destination' => $receiver_address, //代幣接收賬戶 'Amount' => [ //代幣金額 'currency' => 'WIZ', //代幣名稱 'value' => '15', //代幣數(shù)量 'issuer' => $issuer_address //代幣發(fā)行賬戶 ] ]; $txid = $tool->transactWithSecret($txi,$issuer_secret); //提交交易 $tool->waitForTx($txid); //等待交易確認 //查詢代幣余額 $balance = $tool->getBalance($receiver_address); //查詢接收賬戶的代幣余額 foreach($balance->issued as $issued) { echo "issuer => " . $issued->issuer . PHP_EOL; //代幣發(fā)行賬戶 echo "currency => " . $issued->currency . PHP_EOL; //代幣名稱 echo "balance => " . $issued->balance . PHP_EOL; //代幣余額 }
可以看到,在Ripple中XRP轉賬和代幣轉賬都使用Payment交易,區(qū)別僅在于Amount
字段的值類型:如果值是一個關聯(lián)數(shù)組,表示執(zhí)行代幣轉賬;如果是一個數(shù)值字符串,表示執(zhí)行XRP轉賬。
RpcClient類封裝了Ripple節(jié)點的RPC API接口協(xié)議,XrpTool實例通過rpcClient
屬性提供了預創(chuàng)建的RpcClient對象,也可以獨立創(chuàng)建一個RpcClient實例。
實例化RpcClient需要指定節(jié)點的RPC API訪問URL。例如,下面的代碼創(chuàng)建一個連接本地Ripple節(jié)點的RpcClient實例,之后的RPC調(diào)用都將提交給這個URL對應的節(jié)點:
use XrpTool\RpcClient; $client = new RpcClient('http://localhost:51234'); //使用本地節(jié)點
注意:Ripple節(jié)點的RPC API的訪問協(xié)議(http | https)與監(jiān)聽端口依賴于 配置文件。上面的代碼假設本地Ripple節(jié)點RPC API已經(jīng)配置了http協(xié)議訪問,并且 在51234端口監(jiān)聽。
你也可以創(chuàng)建一個連接主鏈公開節(jié)點的RpcClient實例,例如:
$client = new RpcClient('https://s1.ripple.com:51234'); //使用主鏈公開節(jié)點
或者創(chuàng)建一個連接測試鏈公開節(jié)點的RpcClient實例,例如:
$client = new RpcClient('https://s.altnet.rippletest.net:51234'); //使用測試鏈公開節(jié)點
XrpTool官方下載地址:http://sc.hubwiz.com/codebag/xrp-php-lib/。
RpcClient的方法名直接對應Ripple的RPC API名稱,例如,如下的代碼調(diào)用server_info接口查詢Ripple節(jié)點信息:
$ret = $client->server_info(); //調(diào)用RPC API:server_info echo 'version => ' . $ret->info->build_version . PHP_EOL; //顯示節(jié)點軟件版本信息
有的RPC API調(diào)用需要傳入一些參數(shù),例如查詢賬戶信息的account_info調(diào)用,這時需要將參數(shù)整理為關聯(lián)數(shù)組傳入RpcClient對象的同名方法:
$params = [ //使用關聯(lián)數(shù)組聲明RPC API參數(shù) 'account' => 'rG1QQv2nh3gr7RCZ1P8YYcBUKCCN633jCn' //account: 要查詢的賬戶 ]; $ret = $client->account_info($params); //查詢指定Ripple賬戶的詳細信息 echo 'balance => ' . $ret->account_data->Balance . PHP_EOL; //顯示賬戶余額,單位:drop
如果你使用自己的Ripple節(jié)點,可以使用submit調(diào)用的Sign-and-Submit
模式執(zhí)行轉賬等交易。例如,使用下面的代碼從Alice的賬號向Bob的賬號支付0.0123456 XRP:
$alice = "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"; //Alice的賬戶 $bob = "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX"; //Bob的賬戶 $amount = "123456"; //單位:drop $params = [ "offline" => false, //需要節(jié)點簽名 "secret" => "s████████████████████████████", //用于簽名的密碼 "tx_json" => [ "TransactionType": "Payment", //交易類型:支付 "Account" => $alice, //發(fā)起賬號 "Destination": $bob, //接收賬號 "Amount" => $amount //支付數(shù)量,單位:drop ] ]; $ret = $client->submit($params); //簽名并廣播交易 echo 'tx hash => ' . $ret->tx_json->hash . PHP_EOL; //交易哈希
注意:默認情況下
submit
調(diào)用的sign-and-submit
模式只允許在節(jié)點管理連接上調(diào)用,要正確執(zhí)行 上面的代碼,你需要使用管理連接創(chuàng)建RpcClient實例,或者為該節(jié)點啟用公共簽名支持。如果你 執(zhí)行demo/rpcclient-demo.php
,就會出現(xiàn)如下異常:
和其他區(qū)塊鏈一樣,Ripple也使用非對稱密鑰對來標識身份,不過它即支持經(jīng)典的Secp256k1算法,也支持更新一些的Ed25519算法,XrpTool開發(fā)包分別使用CrdlSecp256k1
類和CrdlEd25519
類來表征這兩種算法對應的Ripple身份憑證。
可以使用CrdlFacotry工廠類來離線創(chuàng)建新的Ripple密鑰對和地址,或者使用Ripple密文來恢復之前創(chuàng)建的密鑰對和地址。XrpTool對象的crdlFactory屬性提供了預創(chuàng)建的CrdlFactory對象,也可以用如下的代碼直接創(chuàng)建CrdlFactory對象:
use Xrp\Crypto\CrdlFactory; $cf = new CrdlFactory(); //創(chuàng)建身份憑證工廠對象
使用generate()
方法來創(chuàng)建一個新的隨機密鑰對并推導出相應的Ripple地址。例如,下面的代碼使用Secp256k1
算法創(chuàng)建一個Ripple身份憑證:
$credential = $cf->generate(); //使用secp256k1算法創(chuàng)建隨機身份憑證 //$credential = $cf->generate('secp256k1'); //同上,默認使用secp256k1算法 echo 'private => ' . $credential->private . PHP_EOL; //顯示身份憑證的私鑰 echo 'public => ' . $credential->public . PHP_EOL; //顯示身份憑證的公鑰 echo 'address => ' . $credential->address . PHP_EOL; //顯示身份憑證的地址
類似的,下面的代碼使用ed25519
算法創(chuàng)建身份憑證:
$credential = $cf->generate('ed25519'); //使用ed25519算法創(chuàng)建隨機身份憑證 echo 'address => ' . $credential->address . PHP_EOL; //顯示身份憑證的地址
如果持有身份憑證密文,那么可以使用fromSecret()
方法來恢復對應的Ripple身份憑證。例如:
$secret = 'snfjzzfRtq3hPdZ2msjFUxRN1748B'; //Ripple身份憑證密文 $credential = $cf->fromSecret($secret); //利用密碼恢復身份憑證 echo 'address => ' . $credential->address . PHP_EOL; //顯示身份憑證的地址
到此,關于“Ripple區(qū)塊鏈如何對接PHP開發(fā)包”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。