PHP程式設計師開發比特幣介紹
LinuxA pacheM ySQLP HP + 比特幣教程。
在本簡介中,我們假設你擁有Apache和PHP的GNU/Linux伺服器,並且你希望從Web應用程式與比特幣網路進行互動。我們假設你有一些比特幣的知識和PHP經驗。
雖然這是為PHP編寫的,但同樣的原則適用於其他語言。有關其他語言的資訊,請參閱相關的API_reference_\(JSON-RPC\" target="_blank" rel="nofollow,noindex">API參考頁面 )。
最簡單的入門方法是在守護程序模式下執行比特幣,PHP通過本地HTTP請求進行通訊。一個名為JSON-RPC 的庫用於呼叫bitcoind的各種函式,這些函式將使用JSON物件 進行響應。
但是,建議使用列出的替代庫 之一,因為它們更復雜。
設定比特幣http://blog.hubwiz.com/2018/10/07/bitcoin-php-intro/#more
你可以從主頁 下載比特幣守護程式並執行其中一個包含的二進位制檔案,或者從包含的原始碼編譯你自己的守護程式。有關配置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:[email protected]: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 維護一個分支)並使用GMP 和BC 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:[email protected]: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比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- EOS入門教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
匯智網原創翻譯,轉載請標明出處。這裡是原文