Bitcoind
如何以可擴展的方式線上接收付款到每個使用者的單個地址?
假設我們正在建立線上賭場/市場並希望接收付款。
為了具有可擴展性、安全性和良好的使用者體驗,我們:
- 無法為每筆付款生成新地址。擁有單一存款地址要容易得多。即使生成了新地址,使用者也始終可以通過 mitake 向舊地址存款。
- 無法檢查
listreceivedbyaddress
,因為定期檢查數百個地址是不可擴展的。當單個使用者進行數千筆存款時,RPC 輸出也很大。- 我們不應該依賴外部服務線上區塊鏈 API。
我們絕對不能使用任何 RPC 呼叫來列出完整且不斷增長的交易列表,例如錢包的所有交易或地址的所有交易。
因此,最明智的方法應該是檢查
listsinceblock
以“按分析的區塊”解析所有交易,並按目標地址加入使用者餘額 - 在我們的線上服務中增加使用者數量並將此付款標記為“已完成”,以免第二次計算。將此事務標記為“已解決”的最簡單方法是將其**ID 儲存為“已使用”**在增加使用者餘額的同一 SQL 事務中。但是聽說區塊鏈可以改變交易ID,這樣的方案安全嗎?
如何使用 RPC 呼叫逐個塊地接收付款,以及我可以使用哪些數據將付款標記為已解決,以防止單次付款的重複存款?
TL;DR像 Cryptsy 這樣的“大玩家”如何收款?
在伺服器模式下使用 Bitcoin Core 並使用它的通知功能:
server=1 blocknotify = curl\yoururl walletnotify = curl\yoururl
設置它們以呼叫您的應用程序。
這樣,您就不會對 Bitcoin Core 進行昂貴的 RPC 呼叫。你只會收到比特幣核心本身已經在進行的操作的通知。所以你不會給比特幣核心帶來任何額外的負擔。您將受到其自身可擴展性的限制。
像 Cryptsy 這樣的“大玩家”如何收到付款?
據我所知,大多數大玩家都依賴於 Bitcoin Core 在伺服器模式下執行的可擴展性,而不會給它帶來額外的負載。
但是聽說區塊鏈可以改變交易ID,這樣的方案安全嗎?
不是在他們收到確認後。因此,如果您在更新使用者餘額之前等待 TX 的 blocknotify 呼叫,則您描述的方法有效。