Client
如何實現像 SatoshiDice 這樣的遊戲?
每個人都知道 SatoshiDice 是什麼。他們的核心機制是通過使用比特幣交易進行賭博,其支出與推動床的交易直接相關,以避免雙花攻擊。我的問題是,如何實現這樣的機制?它可以在標準客戶端中完成,還是需要一些額外的軟體來選擇交易的確切輸入?
創建類似 SatoshiDice 的遊戲相當容易。以下是製作此類游戲所涉及的高級步驟。
對於每筆傳入交易…
獲取客戶金額和付款地址
- 打電話
bitcoind getrawtransaction [The incoming transaction ID] 1
。末尾的 1 將以“詳細模式”返回數據,本質上是 JSON 格式的原始數據。- 從原始交易細節中,從對像中獲取
txid
and 。通過此事務,再次呼叫.vout``vin``bitcoind getrawtransaction``txid
- 從這些原始事務詳細資訊中找到
vout
對象,由vout
步驟 #2 中的索引引用。在這個vout
對像中,應該有一個收款人地址列表。獲取並儲存第一個地址。確定回合的贏/輸狀態並返回結果
- 散列交易的
txid
+vout
索引。使用密鑰為您的雜湊函式播種。作為旁注,您需要定期提供您的密鑰。如果不更新和提供您的密鑰,您的玩家將無法驗證您的公平性。- 比較雜湊的最後四個字節以確定贏/輸條件。
萬一虧損…
- 打電話
bitcoind createrawtransaction
。您必須傳入原始txid
和vout
您的客戶付款。在客戶地址中,包含一個小的分數值以發送回客戶。這告訴他們他們已經輸掉了這一輪。此外,包括第二個付款地址,該地址將從發起付款的客戶那裡接收剩餘部分的比特幣。這應該是您錢包中的地址。- 致電
bitcoind signrawtransaction
簽署交易。如果它返回一個值complete=true
,你的交易是有效的。- 呼叫
bitcoind sendrawtransaction
並包含上述構造的原始交易。中獎的情況下
- 計算客戶中獎金額。
- 打電話
bitcoind listunspent
。這將返回您的錢包尚未花費的輸入交易列表。- 創建要作為付款處理的交易列表。首先,包括客戶的付款來源
txid
和vout
索引。接下來,將向您的客戶支付獎金所需的任意數量的未使用交易(從步驟#1)附加到列表中。請記住包含一個額外的付款地址,該地址將從最終未使用的交易中接收剩餘部分的比特幣,其中可能包含超過玩家獎金的超額部分。 4. 呼叫
bitcoind createrawtransaction
,傳入步驟 #3 中累積的所有事務。 5. 致電bitcoind signrawtransaction
簽署交易。 6. 呼叫bitcoind sendrawtransaction
並包含上述構造的原始交易。而已!這是一個非常簡單的 SatoshiDice 處理器。您可能想要添加更多驗證、記憶體您的交易、監控孤立塊並集成一些其他管理常式。
值得一提的是,您始終在所有退貨交易中包含客戶原始付款的一部分。這是因為如果他們的付款是孤立的,或者被標記為無效,您希望確保您的交易也從區塊鏈中刪除。
使用這種方法,您實際上可以幾乎立即做出響應,並且無需確認。如果他們的交易格式錯誤並被網路拒絕,您的交易也將被網路丟棄,因為它是他們原始交易的子交易。