Retail

比特幣自動售貨機

  • August 29, 2014

如果我想建造一台可以用比特幣支付可樂的自動售貨機,下面的場景是典型的實現方式嗎?

  1. 客戶走近機器,選擇產品(無論採用何種方法 - 按產品圖像按鈕,或在鍵盤上鍵入相應的數字 ID)
  2. 機器為此交易生成比特幣地址,並在螢幕上顯示地址的二維碼和字母數字表示,以及以比特幣支付的金額。
  3. 客戶使用他們的智能手機(或任何帶有比特幣客戶端的設備)掃描程式碼,輸入金額並送出交易。
  4. 自動售貨機等待預期金額到達賬戶,然後
  • 如果金額符合預期,則傳遞產品
  • 如果金額與預期不符,則將錢退回
  • 如果 2 分鐘內沒有任何東西到達,則超時
  • 如果在傳遞產品時出現技術問題,則將款項退回
  1. 為了避免每次成功交易都需要儲存私鑰,自動售貨機將剛剛收集的金額發送到聚合地址並忘記臨時地址。

從廣義上講,這聽起來不錯。有幾件事我要注意:

  • 退款可能很棘手。使用網路錢包的人可能沒有自己的地址;錢包運營商擁有大量地址池,並在內部跟踪客戶餘額。當客戶想要付款時,運營商從池地址之一付款並從客戶的帳戶中扣除。因此,如果您嘗試向這樣的客戶發送退款,它會返回到運營商的地址,但他們可能沒有能力/動力重新信用客戶。一旦硬幣用完(並將找零發送到新的礦池地址),他們甚至可能會丟棄私鑰,在這種情況下,退還的硬幣將永遠失去。無論哪種方式,客戶都感到沮喪。比特幣交易退款有標準程序嗎?, 和BIP 70是一個提議的解決方案(客戶明確提供單獨的退款地址),但由於這涉及一些通過 HTTPS 的帶外消息,因此伺服器端需要更多的基礎設施。
  • 您可能希望在 2 分鐘後放棄傳遞產品,但您可能不想放棄付款。例如,如果您的機器或客戶的移動設備出現 Internet 連接問題,則可能會創建付款但直到很久以後才廣播(或您沒有收到)。客戶可能不再在那裡拿他們的 Tab 罐頭,但無論如何您可能想退還他們的錢。所以你應該保留私鑰。(實際上,丟棄它們真的沒有什麼好的理由:如果你把錢寄回總部,它們通常沒有硬幣,所以如果它們被偷了也沒什麼問題,但是如果有人出於某種原因向他們發送了額外的硬幣,你我肯定想擁有它們。)
  • 同樣,如果您確實發送了退款,您可能希望確保您花費了與進來的交易相同的交易。這將保護您,以防客戶試圖雙花。
  • 支付金額可以嵌入二維碼中。這為客戶節省了一點打字時間。
  • 將收款快速發送到總部進行保管是個好主意,但每筆交易都會收取費用。您可以將它們分批並每天發送幾次,或者在它們達到某個門檻值時發送。或者,您可以有一個系統,您可以在總部生成一堆地址,將私鑰保存在那裡(甚至可能離線),然後將地址提供給機器。(BIP 32提供了一種更好的方法來實現這一點。)機器仍然可以檢測到收款,但如果需要退款,它必須將請求發送回總部。

引用自:https://bitcoin.stackexchange.com/questions/30266