PHP 程式設計師開發比特幣入門介紹

geeker發表於2018-10-08

Linux Apache MySQL PHP + 比特幣教程。

在本簡介中,我們假設你擁有Apache和PHP的GNU/Linux伺服器,並且你希望從Web應用程式與比特幣網路進行互動。我們假設你有一些比特幣的知識和PHP經驗。

雖然這是為PHP編寫的,但同樣的原則適用於其他語言。有關其他語言的資訊,請參閱相關的API參考頁面

最簡單的入門方法是在守護程式模式下執行比特幣,PHP透過本地HTTP請求進行通訊。一個名為JSON-RPC的庫用於呼叫bitcoind的各種函式,這些函式將使用JSON物件進行響應。

但是,建議使用列出的替代庫之一,因為它們更復雜。

設定比特幣

你可以從主頁下載比特幣守護程式並執行其中一個包含的二進位制檔案,或者從包含的原始碼編譯你自己的守護程式。有關配置bitcoind的詳細資訊,請參閱執行比特幣

在執行bitcoind之前,你需要在比特幣資料目錄中建立一個配置檔案(Linux上的~/.bitcoin/bitcoin.conf):

rpcuser=user
rpcpassword={you MUST pick a unique password to be secure}

如果你錯過了這一步,bitcoind會提醒你。

現在執行bitcoind:

$ ./bitcoind
# wait a few seconds for it to start up
$ ./bitcoin-cli getinfo
# various information will be shown. If you get an error, try again until you see some useful output.
$ ./bitcoin-cli help
# get help on commands, note no dash before help

比特幣將開始與網路同步並下載完整的區塊鏈副本。截至2012年8月,在此過程中必須下載並驗證超過2GB的資料。完成可能需要兩個小時或更長時間。當塊計數達到當前計數時,你將知道何時完成。

Getinfo(比特幣的Hello World版本)

假設比特幣已完成初始化過程;從JSON-RPC PHP下載檔案jsonRPCClient.php並將其放在Web可訪問的位置。

其次,使用以下內容建立一個PHP檔案,並使用瀏覽器訪問它並進行測試。

  require_once 'jsonRPCClient.php';

  $bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/');

  echo "<pre>\n";
  print_r($bitcoin->getinfo());
  echo "</pre>";

注意:jsonRPCClient庫使用fopen(),如果從bitcoind收到404或500錯誤,將丟擲一個異常,說“Unable to connect”即無法連線。這可以防止你看到bitcoind生成的錯誤訊息(因為它們以狀態404或500傳送)。下面列出的替代庫在功能上與JSON-RPC PHP類似,但沒有此問題。

精度

比特幣金額範圍從1 Satoshi(0.00000001 BTC)到近2,100,000,000,000,000(21,000,000 BTC)。為避免舍入錯誤,你必須確保PHP實現支援所有比特幣值而不會丟失精度。大多數PHP實現使用具有53位精度的IEEE 64位雙精度浮點數,這足以正確表示全部比特幣值。

有關詳細資訊,請參閱正確的資金處理(JSON-RPC)

如果你的PHP實現不支援64位數字(再次,這是非常罕見的),你必須使用一個版本的bitcoind,它將值作為字串傳送(genjix在http://github.com/genjix/bitcoin維護一個分支)並使用GMPBC Math庫進行涉及比特幣金額的所有計算。

帳號

在比特幣中,錢被髮送到地址,許多地址可以由一個錢包持有。比特幣中預設顯示的餘額是錢包中所有地址中比特幣的總和。

再進一步,你可以擁比特幣賬戶。每個帳戶都擁有多個地址,其行為類似於迷你比特幣。

$ ./bitcoin-cli listaccounts
# show list of accounts and various info for each one
$ ./bitcoin-cli getaccountaddress user889
# get an address to receive money to that is unique for the account user889
$ ./bitcoin-cli getbalance user889
# get the sum of all the money in the addresses owned by the account user889

在你的應用程式中,每個使用者都應具有唯一的使用者名稱。然後,你可以使用$ bitcoin->getaccountaddress(“user889”);,查詢bitcoind的唯一地址;獲取user889的第一個地址。或$ bitcoin->getnewaddress(“user889”);,為user889建立一個新地址。

然後客戶存入此地址。

你可以透過$ bitcoin->getbalance(“user889”,4);,來檢查該客戶的資金。4表示在假設此付款有效之前我們將接受的最低確認數。

如果你將長期使用多個存款和取款帳戶,你可能需要考慮在自己的資料庫中跟蹤使用者餘額。這簡化了應用程式帳戶之間的轉移,並將你的帳戶與比特幣錢包分離。

getnewaddress vs getaccountaddress

使用getnewaddress可以使惡意代理難以跟蹤流經應用程式的付款,從而有助於提高使用者的匿名性。但是,經常執行getnewaddress會導致你的錢包充滿許多空地址。

因此,建議以某種方式限制每個使用者可以請求的未提供資金的地址的數量。以下是使用會話的示例:

<?php
    require_once('jsonRPCClient.php');
    $bitcoin = new jsonRPCClient('http://root:root@127.0.0.1:8332/'); 
    # now check for appropriate funds in user account
    try {
        $username = ...
        if(isset($_SESSION['sendaddress']))
            $sendaddress = $_SESSION['sendaddress'];
        else {
            $sendaddress = $bitcoin->getnewaddress($username);
            $_SESSION['sendaddress'] = $sendaddress;
        }
        $balance = $bitcoin->getbalance($username);
    }
    catch (Exception $e) {
        die("<p>Server error! Please contact the admin.</p>");
    }
?>

這會在每個新會話開始時建立一個新地址,並將其儲存在會話變數中。

RPC的替代Libs

有一些替代的PHP庫可以連線到bitcoind RPC,建議使用普通的jsonRPCClient.php類。他們不依賴於magic__call,使用cURL而不是fopen並且有更好的錯誤處理(並且可以使用composer安裝)。

如果你希望快速掌握使用Php對接比特幣錢包的方法,可以訪問:php比特幣開發教程

這裡是原文

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章