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