您好,登錄后才能下訂單哦!
PHP開發(fā)包中怎么對接Monero區(qū)塊鏈,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
Gateway
是對接Monero區(qū)塊鏈的頂層類,適合管理多用戶的地址及交易,主要包括以下方法:
newAddress():創(chuàng)建新地址
balance():獲取指定地址的XMR余額
transfer():轉(zhuǎn)賬
Gateway的實(shí)例化需要指定服務(wù)節(jié)點(diǎn)和錢包節(jié)點(diǎn)的URL,例如下面的代碼使用本機(jī)的Monero節(jié)點(diǎn)創(chuàng)建一個(gè)Gateway實(shí)例:
$opts = [ 'daemon_url' => 'http://localhost:28081', //服務(wù)節(jié)點(diǎn)URL 'wallet_url' => 'http://localhost:28083' //錢包節(jié)點(diǎn)URL ]; $gateway = new Gateway($opts); //返回Gateway實(shí)例
使用Gateway的newAddress()
方法為用戶創(chuàng)建一個(gè)新的門羅幣地址,例如:
$addr = $gateway->newAddress(); //創(chuàng)建一個(gè)新的XMR地址 echo 'new address => ' . $addr . PHP_EOL;
使用Gateway的balance()
方法獲取指定Monero地址的余額,例如:
$balance = $gateway->balance('9wviCeWe2D8XS82k2o....RrAotYPwq9Gm8'); echo 'total => ' . $balance->total . PHP_EOL; //總余額,單位:piconero echo 'unlocked => ' . $balance->unlocked . PHP_EOL; //解凍余額,單位:piconero
balance()
方法返回一個(gè)對象,total
和unlocked
字段分別表示所查詢地址的總余額和解鎖余額,單位均為:piconero或pico。
使用Gateway的transfer()
方法在指定地址間轉(zhuǎn)賬。例如,下面的代碼從賬戶from向賬戶to轉(zhuǎn)1000000 piconero :
$from = '9wviCeWe2D8XS82k2ovp5...7X1D7Geoo2RrAotYPwq9Gm8'; $to = 'A2GmyHHJ9jtUhPiwoAbR2tX...uzKf6RGGgZTFTpVC4QxAiAX'; $amount = 1000000 //單位:piconero $txid = $gateway->transfer($from,$to,$amount); echo 'tx hash => ' . $txid . PHP_EOL;
transfer()
方法返回轉(zhuǎn)賬交易的哈希。
piconero是門羅幣最小的單位,1 minero = 10^12 piconero。
門羅幣 Php開發(fā)包下載地址:http://sc.hubwiz.com/codebag/monero-php-lib/
RpcClient
是對Monero官方RPC協(xié)議的封裝,用于在PHP應(yīng)用中訪問官方的服務(wù)節(jié)點(diǎn)(Daemon)和錢包節(jié)點(diǎn)(Wallet),點(diǎn)擊這里查看Monero的RPC API 中文文檔。
創(chuàng)建一個(gè)RpcClient實(shí)例很簡單,只需要傳入節(jié)點(diǎn)的RPC API訪問URL即可。例如,下面的代碼實(shí)例化一個(gè)RpcClient對象,這個(gè)對象的所有RPC調(diào)用請求都會發(fā)往參數(shù)URL指定的Monero服務(wù)節(jié)點(diǎn):
$daemon = new RpcClient('http://localhost:28081'); //返回客戶端實(shí)例
對于節(jié)點(diǎn)中的JSON RPC API,可以直接以方法名進(jìn)行調(diào)用。例如,服務(wù)節(jié)點(diǎn)提供 get_block_count方法來獲取鏈上區(qū)塊的數(shù)量,使用RpcClient對象的調(diào)用方式如下:
$ret = $daemon->get_block_count(); //調(diào)用同名JSON RPC API echo 'block count => ' . $ret->count . PHP_EOL;
如果JSON RPC API方法需要參數(shù),例如服務(wù)節(jié)點(diǎn)提供的用來獲取區(qū)塊數(shù)據(jù)的get_block方法,就需要傳入?yún)^(qū)塊高度或區(qū)塊哈希,那么將需要的參數(shù)組織成關(guān)聯(lián)數(shù)組傳入即可。例如查看高度100#區(qū)塊數(shù)據(jù):
$ret = $daemon->get_block(['height'=>100]); echo 'number of txs => ' . $ret->block_header->num_txes . PHP_EOL;
Monero的服務(wù)節(jié)點(diǎn)也提供了非JSON RPC規(guī)范的其他訪問接口,例如按交易ID查詢交易數(shù)據(jù)的方法/get_transactions
。這些非JSON RPC采用自己特定的訪問端結(jié)點(diǎn),因此我們可以使用RpcClient的post()
方法,來指定訪問端結(jié)點(diǎn)和請求參數(shù)。
例如,下面的代碼獲取指定哈希a6fa....b8fs
的交易數(shù)據(jù):
$inputs = [ 'txs_hashes' => ['a6fa97b7c1d7a4f68a8041a2e7ca7a250d01391f14a0d5947b0936dca1f2b8f3'] ]; $ret = $daemon->post('/get_transactions',$inputs); //非JSON RPC APi調(diào)用 echo 'number of missed tx => ' . count($ret->missed_tx) . PHP_EOL; echo 'number of found tx => ' . count($ret->txs) . PHP_EOL;
門羅幣有不同的計(jì)量單位,從最小的原子單位piconero到最大的meganero:
FaceValue
類封裝了門羅幣/XMR的面值計(jì)算邏輯,可以認(rèn)為FaceValue表示了包含計(jì)量單位的門羅幣數(shù)量。因此在實(shí)例化一個(gè)FaceValue對象時(shí),需要同時(shí)指定數(shù)量和單位,例如,創(chuàng)建一個(gè)包含20.34個(gè)門羅幣的FaceValue對象來表征銷售收入:
$sales = FaceValue::parse('20.34 mo'); echo 'sales => ' . $sales . PHP_EOL; // 20.34 mo
FaceValue封裝了門羅幣的面值轉(zhuǎn)換邏輯,因此可以得到上面的銷售收入轉(zhuǎn)換為其他單位的數(shù)量:
echo 'sales in pico => ' . $sales->pico . PHP_EOL; // 20.340000000000 echo 'sales in mega => ' . $sales->mega . PHP_EOL; // 0.00002034
也可以直接更新指定的單位,例如將銷售量更新為203.4 mo
:
$sales->mo = 203.4; echo 'sales in mega => ' . $sales->mega . PHP_EOL; // 0.0002034
使用Mnemonic
類來創(chuàng)建Monero專有類型的助記詞,或者將助記詞轉(zhuǎn)換為密碼學(xué)種子。Monero的助記詞包含25個(gè)單詞,詞表也不同于比特幣。下面是一個(gè)Monero助記詞的示例:
vipers opposite alpine debut rebel essential enigma irony moon incur fugitive tufts touchy moisture hijack chlorine vivid textbook chrome bias nimbly hamburger wayside tarnished tarnished
Mnemonic提供了靜態(tài)方法new()
來生成新的助記詞。例如,下面的代碼生成一組隨機(jī)的新助記詞:
$words = Mnemonic::new(); echo 'mnemonic => ' . $words . PHP_EOL;
Mnemonic提供了靜態(tài)方法seed()
來將指定的助記詞轉(zhuǎn)換為密碼學(xué)種子,以便用于密鑰對的恢復(fù)等操作。例如,下面的代碼將助記詞轉(zhuǎn)換為密碼學(xué)種子:
$seed = Mnemonic::seed('vipers opposite alpine debut rebel essential enigma irony moon incur fugitive tufts touchy moisture hijack chlorine vivid textbook chrome bias nimbly hamburger wayside tarnished tarnished'); echo 'seed => ' . $seed . PHP_EOL; //78bf0d6c8e877c8ffbf9701e8063a690a91295d6f3a576e7b61c8c7829d8a7e0
門羅幣 Php開發(fā)包下載地址:http://sc.hubwiz.com/codebag/monero-php-lib/
憑證類Crendential
用來管理Monero區(qū)塊鏈上的個(gè)人身份憑證 —— 密鑰對:
可以生成一個(gè)隨機(jī)憑證,例如:
$credential = Credential::new(); //生成隨機(jī)密鑰對
也可以使用之前保存的助記詞重建身份憑證,例如:
$seed = Mnemonic::seed('vipers opposite alpine debut rebel essential enigma irony moon incur fugitive tufts touchy moisture hijack chlorine vivid textbook chrome bias nimbly hamburger wayside tarnished tarnished'); $credential = Credential::infer($seed); //從種子推導(dǎo)密鑰對
門羅幣是一種隱私貨幣,進(jìn)入?yún)^(qū)塊鏈的交易是經(jīng)過加密混淆的,因此和其他區(qū)塊鏈相比,Monero需要兩套密鑰:消費(fèi)密鑰(spend key)和查看密鑰(view key),消費(fèi)密鑰類似于其他區(qū)塊鏈中的身份標(biāo)識密鑰對,而查看密鑰則用戶查看加密混淆的區(qū)塊鏈交易,以便錢包跟蹤交易輸出。
例如,下面的代碼查看憑證對象的消費(fèi)密鑰對和查看密鑰對:
echo 'secret spend key => ' . $credential->secretSpendKey() . PHP_EOL; echo 'public spend key => ' . $credential->publicSendKey() . PHP_EOL; echo 'secret view key => ' . $credential->secretViewKey() . PHP_EOL; echo 'public view key => ' . $credential->publicViewKey() . PHP_EOL;
Address:Monero區(qū)塊鏈標(biāo)準(zhǔn)地址實(shí)現(xiàn)
SubAddress:Monero區(qū)塊鏈中的子地址實(shí)現(xiàn),子地址由標(biāo)準(zhǔn)地址和兩級索引序號推導(dǎo)得出
IntegratedAddress:Monero區(qū)塊鏈中的整合地址實(shí)現(xiàn),整合地址由標(biāo)準(zhǔn)地址和支付ID推導(dǎo)得出
使用Address類的靜態(tài)方法decode()
解碼地址字符串,返回的Address對象中 包含了解碼后的信息。
例如,下面的代碼解碼指定的地址,并顯示該地址所屬網(wǎng)絡(luò)、消費(fèi)公鑰和查看公鑰:
$addr = Address::decode('9wviCeWe2D8XS82k2ovp5EUYLzBt9pYNW2LXUFsZiv8S3Mt21FZ5qQaAroko1enzw3eGr9qC7X1D7Geoo2RrAotYPwq9Gm8'); echo 'network => ' . $addr->network() . PHP_EOL; echo 'spend key => ' . $addr->spendKey() . PHP_EOL; echo 'view key => ' . $addr->viewKey() . PHP_EOL;
調(diào)用Credential對象的address()
方法,可以獲得該憑證對象的門羅幣地址。例如:
$addressMain = $credential->address('main'); //返回主網(wǎng)地址 echo 'address@mainnet => ' . $addressMain . PHP_EOL; $addressMain = $credential->address('main'); //返回測試網(wǎng)地址 echo 'address@testnet => ' . $addressTest . PHP_EOL;
address()
方法返回的是一個(gè)Address對象。
使用Address對象的generateIntegratedAddress()
方法,可以從標(biāo)準(zhǔn)地址 推導(dǎo)出集成地址IntegratedAddress對象:
$addr = $credential->address('test'); $ia = $addr->generateIntegratedAddress(); echo 'ia => ' . $ia . PHP_EOL; echo 'ia payment id => ' . $ia->paymentId() . PHP_EOL;
集成地址適合商戶的訂單收費(fèi),通過為每個(gè)訂單生成不同的支付ID,可以 避免生成大量的Monero憑證和標(biāo)準(zhǔn)地址。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。