中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP開發包中怎么對接Monero區塊鏈

發布時間:2021-06-29 17:17:31 來源:億速云 閱讀:243 作者:Leah 欄目:互聯網科技

PHP開發包中怎么對接Monero區塊鏈,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、Gateway - 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實例
1.1 創建新地址

使用Gateway的newAddress()方法為用戶創建一個新的門羅幣地址,例如:

$addr = $gateway->newAddress();                     //創建一個新的XMR地址
echo 'new address => ' . $addr . PHP_EOL;
1.2 獲取地址余額

使用Gateway的balance()方法獲取指定Monero地址的余額,例如:

$balance = $gateway->balance('9wviCeWe2D8XS82k2o....RrAotYPwq9Gm8');
echo 'total => ' . $balance->total . PHP_EOL;          //總余額,單位:piconero
echo 'unlocked => ' . $balance->unlocked . PHP_EOL;    //解凍余額,單位:piconero

balance()方法返回一個對象,totalunlocked字段分別表示所查詢地址的總余額和解鎖余額,單位均為:piconero或pico。

1.3 門羅幣轉賬

使用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/

2、RpcClient - Rpc Api客戶端

RpcClient是對Monero官方RPC協議的封裝,用于在PHP應用中訪問官方的服務節點(Daemon)和錢包節點(Wallet),點擊這里查看Monero的RPC API 中文文檔。

創建一個RpcClient實例很簡單,只需要傳入節點的RPC API訪問URL即可。例如,下面的代碼實例化一個RpcClient對象,這個對象的所有RPC調用請求都會發往參數URL指定的Monero服務節點:

$daemon = new RpcClient('http://localhost:28081');      //返回客戶端實例
2.1 調用JSON RPC API

對于節點中的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;
2.2 調用其他RPC API

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;

3、FaceValue - 門羅幣面值

門羅幣有不同的計量單位,從最小的原子單位piconero到最大的meganero:

PHP開發包中怎么對接Monero區塊鏈

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

4、Mnemonic - 助記詞

使用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
4.1 生成新的Monero助記詞

Mnemonic提供了靜態方法new()來生成新的助記詞。例如,下面的代碼生成一組隨機的新助記詞:

$words = Mnemonic::new();
echo 'mnemonic => ' . $words . PHP_EOL;
4.2 將助記詞轉換為密碼學種子

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/

5、Credential

憑證類Crendential用來管理Monero區塊鏈上的個人身份憑證 —— 密鑰對:

PHP開發包中怎么對接Monero區塊鏈

5.1 生成隨機身份

可以生成一個隨機憑證,例如:

$credential = Credential::new();    //生成隨機密鑰對
5.2 重建身份憑證

也可以使用之前保存的助記詞重建身份憑證,例如:

$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);  //從種子推導密鑰對
5.3 消費密鑰與查看密鑰

門羅幣是一種隱私貨幣,進入區塊鏈的交易是經過加密混淆的,因此和其他區塊鏈相比,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;

6、Address / SubAddress / IntegratedAddress

PHP開發包中怎么對接Monero區塊鏈

  • Address:Monero區塊鏈標準地址實現

  • SubAddress:Monero區塊鏈中的子地址實現,子地址由標準地址和兩級索引序號推導得出

  • IntegratedAddress:Monero區塊鏈中的整合地址實現,整合地址由標準地址和支付ID推導得出

6.1 解碼標準地址字符串

使用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;
6.2 地址的推導

調用Credential對象的address()方法,可以獲得該憑證對象的門羅幣地址。例如:

$addressMain = $credential->address('main');    //返回主網地址
echo 'address@mainnet => ' . $addressMain . PHP_EOL;
$addressMain = $credential->address('main');   //返回測試網地址
echo 'address@testnet => ' . $addressTest . PHP_EOL;

address()方法返回的是一個Address對象。

6.3 使用集成地址

使用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憑證和標準地址。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

施甸县| 井冈山市| 沁阳市| 永嘉县| 深州市| 饶河县| 三原县| 高唐县| 浙江省| 房山区| 西吉县| 洛阳市| 阿合奇县| 丽江市| 平湖市| 揭阳市| 郸城县| 苏州市| 沐川县| 古交市| 滦南县| 安乡县| 衡阳县| 大庆市| 手机| 綦江县| 鱼台县| 新郑市| 苗栗县| 吉隆县| 勃利县| 改则县| 宁化县| 万山特区| 来宾市| 阿拉善左旗| 阿拉尔市| 泰宁县| 施甸县| 嘉峪关市| 宣城市|