比特幣在確認期如何防止欺詐?
我正在盡力了解比特幣的工作原理,雖然我已經掌握了基礎知識,但還有一個揮之不去的問題:
是什麼阻止我在確認期內多次花費我的比特幣?
假設我有一個擁有 1 個比特幣的地址。我去一家咖啡館,用硬幣(為簡單起見,假設整枚硬幣)買了一杯咖啡。交易通過網路廣播。然後礦工相互競爭,將我的交易包含在一個經過驗證的多交易區塊中,該區塊將送出給區塊鏈。這個過程大約需要十分鐘。在那十分鐘的時間裡,我步行到加油站並重新使用我的 1 BTC 來購買一些汽油。加油站怎麼會知道我幾分鐘前已經用我的 1 BTC 買了咖啡,而我的實際餘額為零,因為咖啡交易還不是官方區塊鏈的一部分?
最後,這兩項交易中的一項肯定會被比特幣網路拒絕,但咖啡館或加油站都會變得僵硬,對嗎?似乎唯一的解決方案是讓咖啡館在給我咖啡之前等待十分鐘確認——但這顯然不是一個實用的方法。
我錯過了什麼?
這絕對是一個問題,也是鼓勵比特幣使用者在接受交易和傳遞貨物之前等待多次確認的原因。
不過,這並不像您建議的那麼容易。當您在咖啡館進行交易時,正如您所說,它是通過網路廣播的。除非出現連接問題,網路上的每個節點幾乎都會立即獲得一份副本。(他們不需要等待它被包含在一個塊中。)特別是,加油站會得到一個副本。因此,當您嘗試與他們花費相同的硬幣時,他們知道它已經被花費並會拒絕您的交易。
要使這項工作正常進行,您必須確保受害者不知道其他交易。一種方法是第一筆交易,而不是購買其他商品,只需將硬幣發送回您控制的另一個地址。你不在網路上廣播它;相反,您將其直接提供給礦工,並理解他們應該將其包含在下一個區塊中,而不是將代幣發送到加油站的衝突交易。在一種稱為Finney 攻擊的變體中,礦工(可能是您自己)已經使用將代幣發送給您的交易探勘了一個區塊,但他們等待將其送出到網路,直到您購買了您的 gas。