同一枚比特幣能花兩次嗎?

同一枚比特幣能花兩次嗎?的文章封面插畫

一張鈔票交給店家後,不會同時留在付款人手上;數位資料卻很容易被複製。比特幣既是數位形式,又沒有銀行集中維護餘額,因此自然會冒出一個問題:同一份資產能不能同時付給兩個人?

答案要分成兩個階段看。付款人確實可以建立彼此衝突的交易,讓它們在網路不同角落短暫出現;可是,只要兩筆交易想花掉同一份資產,它們就不可能一起留在同一段有效歷史。所謂雙重支付,指的正是有人試圖利用兩個版本尚未定案的空檔,讓收款方誤以為付款已完成。

比特幣底層沒有一枚可複製的硬幣

錢包顯示的餘額,看起來像帳戶裡放著若干枚幣。底層記錄的其實是一組組尚未被花掉的交易輸出,也就是 UTXO。每個 UTXO 都附有花費條件;建立新交易時,付款人指定要使用哪些 UTXO,提出符合條件的簽章,並產生新的輸出給收款人與可能的找零。

這種結構讓重複花費有明確的檢查點。假設某個 UTXO 被交易甲拿來付給店家,付款人又用同一個 UTXO 建立交易乙、把資產送往另一處。甲與乙各自都可能有正確簽章,單獨查看時也可能符合格式,但它們彼此衝突,因為共同依賴的輸入只能消耗一次。

網路沒有全域同步的先後順序

困難之處在於,交易從一台裝置傳到整個網路需要時間。某些全節點可能先收到甲,另一些節點可能先收到乙;它們也會依本身的轉送政策、費率條件與記憶體狀況,決定暫時保留哪一個版本。此時不存在一個所有人同步更新的候車看板,所以「我先按下送出」不等於每個參與者都先看到同一筆交易。

礦工會從自己所知的待處理交易中挑選候選內容,通常也會考量手續費與交易相依關係。當其中一個版本被放進有效區塊,全節點會逐筆檢查:簽章是否成立、輸入在這段歷史中是否仍未花費,以及整個區塊是否符合規則。甲若先被有效歷史接受,同一段歷史裡的乙便會因輸入已經用掉而失效;順序顛倒時,結果也會對調。

因此,礦工能選擇自己提議收錄的交易,卻不能讓同一個 UTXO 在一個有效帳本中憑空變成兩份。其他節點會獨立重做檢查,不合規的區塊即使由算力很高的礦工提出,也不會因此取得有效性。

看見交易,不代表雙重支付風險已經消失

收款方若只看見一筆尚未進入區塊的交易,就立即交付不可追回的商品,等於先承擔網路尚未排定版本的風險。另一筆衝突交易可能傳播得更廣、提供更高費用,或較早被某位礦工收錄。原付款即使一度出現在部分錢包或查詢工具裡,仍可能沒有成為帳本歷史。

交易獲得第一次交易確認後,風險通常明顯下降,但也沒有立刻歸零。兩個有效區塊可能在相近時間出現,使網路末端短暫分岔;若付款所在的分支沒有被後續工作量延伸,那次確認可能因鏈重組而消失。隨著更多區塊接在交易後方,要用另一段歷史取代它所需的工作量、時間與成本通常會增加。

等待多少確認才合理,沒有適用所有情況的固定答案。低價、可承受損失的付款,與交付後無法追回的高價資產,面對的是不同風險;網路是否正出現異常重組、交易本身是否可被替換,也會影響判斷。確認數提供的是逐步增強的穩定性訊號,並非保證未來絕對不會改變的封條。

「花兩次」可以是一場攻擊嘗試,不能成為兩份最終餘額

雙重支付最容易混淆的地方,是把「送出兩筆衝突交易」和「兩筆都完成結算」視為同一件事。前者在技術上做得到,甚至可能讓不同觀察者短暫看見不同版本;後者會被 UTXO 的一次性花費規則擋住,除非攻擊者成功讓另一段有效歷史取代收款方原先相信的版本。

所以,同一份比特幣資產不會在同一條有效歷史裡永久變成兩份。真正需要防範的,是收款方在排序尚未穩定時,把暫時看見的交易當成已經難以推翻的付款。理解這條界線,雙重支付就不再像數位硬幣被無限複製的魔術,而是一個關於交易衝突、歷史排序與確認深度的風險問題。