比特幣交易生命週期完整解析:從簽名到確認的每一步

以視覺化方式解析比特幣交易的完整生命週期,包括交易建立、數位簽名、節點驗證、Mempool 等待、礦工打包、區塊確認等六個階段。深入解釋手續費機制、RBF、CPFP、零確認等實務議題,適合想要深入理解比特幣運作原理的讀者。

比特幣交易生命週期完整解析:從簽名到確認的每一步

比特幣轉帳這件事,看起來就是「輸入地址、輸入金額、點擊發送」三步驟搞定。但實際上背後發生了什麼?礦工是怎麼把你的交易打包進區塊的?為什麼有時候等半天也沒確認?這篇文章就帶你把比特幣交易的整個生命週期走一遍。

先說結論:交易要經過幾個階段?

一個標準的比特幣交易會經過這些階段:

建立交易 → 簽名廣播 → 節點驗證 → Mempool 等待 → 礦工打包 → 區塊確認

每一個階段都有它的門道,我們一個個來拆解。

第一步:建立交易

當你對著比特幣錢包說「我要轉 0.01 BTC 給這個地址」的時候,錢包在後台幫你組裝了一筆交易資料包。

這筆交易包含兩大部分:輸入(Input)輸出(Output)

輸入是什麼?

輸入就是你告訴比特幣網路「這筆錢是我的」的證明。嚴格來說,每個輸入都會引用一筆更早的交易輸出作為資金來源。

舉個例子:你之前收到了兩筆轉帳,一筆 0.5 BTC,一筆 0.3 BTC。現在你想轉出 0.6 BTC。這時候錢包會選中那筆 0.5 BTC 的輸出作為輸入。

輸入:引用「收到 0.5 BTC」的輸出
輸出:轉給別人 0.6 BTC
     找零給自己 0.4999 BTC(扣掉礦工費)

你可能注意到了——輸出比輸入少。這就是比特幣的手續費機制,差額自動進了礦工口袋。

輸出格式長這樣

{
  "value": 60000000,
  "scriptPubKey": "OP_DUP OP_HASH160 89abcdefabbaabbaabbaabbaabbaabbaabbaabba OP_EQUALVERIFY OP_CHECKSIG"
}

value 是以 satoshi 為單位的金額(1 BTC = 100,000,000 satoshi)。scriptPubKey 是鎖定腳本,決定了誰能花這筆錢。

第二步:數位簽名

好了,現在錢包要證明「這筆錢真的是我的」。

錢包會用你的私鑰對交易資料進行數位簽名。這個簽名有兩個作用:

  1. 證明你擁有私鑰(因為只有私鑰能產生有效簽名)
  2. 證明交易內容沒被篡改(簽名綁定了交易內容)

比特幣用的是 ECDSA(橢圓曲線數位簽名演算法),具體來說是 secp256k1 這條曲線。數學上保證了:從簽名反推私鑰的難度,堪比在宇宙中找到一顆特定沙粒。

產生的簽名長這樣(十六進位):

30450221009981fe97a3c7c2c1e8d7e1c7c2c1e8d7e1c7c2c1e8d7e1c7c2c1e8d7e1c7c2
02205a3e0e7c2c1e8d7e1c7c2c1e8d7e1c7c2c1e8d7e1c7c2c1e8d7e1c7c2

錢包把簽名和未簽名的交易資料組合成完整的交易資料包,然後廣播出去。

第三步:節點驗證

交易資料包首先發到你連接的比特幣節點(可能是你自己的全節點,也可能是交易所的節點)。

節點收到交易後,會開始一連串驗證:

3.1 格式驗證

3.2 簽名驗證

節點用輸入中指定的公鑰驗證簽名。如果簽名無效,直接拒絕這筆交易。

3.3 雙花檢查

節點會查詢內存的 UTXO(未花費交易輸出)集合,確認這筆輸入沒有被之前其他交易花掉。如果發現雙花,拒絕。

3.4 Standardness 規則

比特幣節點有個「standardness」的概念——不是所有合法的腳本都能被大多數節點接受傳播。比如 OP_RETURN 資料承載上限是 83 位元組,超過這個大小的交易會被大多數節點當作「非標準」直接拒絕傳播。還好隔離見證升級後,這個限制放寬到了 80,000 位元組(標準節點共識)。

通過所有檢查後,節點會把交易轉發給它連接的其他節點。這個過程在比特幣網路中快速擴散——通常幾秒鐘內就能傳遍全球大多數節點。

第四步:Mempool 等待

交易通過節點驗證後,就進入了記憶池(Mempool)——這是節點維護的一個交易等待區。

Mempool 不是唯一的。 每個節點都有自己的 Mempool,裡面存放的交易可能略有差異。節點會根據一些策略定期清理 Mempool(比如超過 300 個區塊年齡的交易會被剔除)。

交易在 Mempool 裡排隊的邏輯

礦工不是按先來後到打包交易的,而是按手續費率(Fee Rate,sat/vB)排序。單位 fee rate 越高的交易,越容易被礦工選中打包。

所以問題來了:同樣是等區塊,為什麼別人的交易比我快確認?

答案很殘酷:他的手續費率比你高。

拿當前(2024 年)的數據來說:

費用類型Fee Rate預計確認時間
高優先級> 20 sat/vB下一個區塊
標準5-20 sat/vB1-3 個區塊
1-5 sat/vB幾個小時到一天
極低< 1 sat/vB可能永遠不確認

這就是為什麼在網路擁堵的時候,有人願意付 50 美元的手續費就為了讓交易擠進下一個區塊。比特幣市場經濟的好處就是——你可以選擇付多少錢,也可以選擇等多久。

RBF:改主意的好辦法

有時候你發出去交易才發現手續費給低了。別慌,如果你當初啟用了 RBF(Replace-By-Fee),可以發起新的交易用更高的手續費替換掉舊的。

原理很簡單:新的交易使用相同的輸入(等於「佔用」了原交易的輸入),區塊鏈只能接受其中一筆。礦工看到手續費更高的版本,自然就選新的了。

第五步:礦工打包

終於等到礦工注意到你的交易了。

礦工的任務是:找到一個符合條件的隨機數(nonce),使得區塊頭的雙重 SHA-256 雜湊值小於難度目標。

這個過程就是大家常說的「挖礦」——誰先找到符合條件的 nonce,誰就有權把 Mempool 裡的交易打包成新區塊,然後廣播出去。

區塊空間是稀缺資源

比特幣每個區塊的大小上限是 1 MB(隔離見證升級後有「權重上限」的概念,但實質大同小異),平均下來每個區塊能容納大約 2,000-3,000 筆交易。

稀缺就意味著拍賣。你願意為這筆交易付的手續費,就是你競標區塊空間的出價。

礦工怎麼選交易?

理論上,礦工會選 fee rate 最高的交易先打包。但實際操作中還要考慮:

第六步:區塊確認

恭喜!你的交易終於被寫進區塊了。

但故事還沒完。比特幣的安全模型其實是「機率性」的——區塊確認數越多,交易被逆轉的可能性越低。

為什麼?因為如果有人想篡改區塊鏈,需要重新計算那個區塊以及之後所有區塊的工作量證明。區塊越深,重新計算的成本越高。

常見的確認建議:

場景建議確認數
小額轉帳(咖啡、零食)1 確認
一般線上購物3 確認
大額交易(數千美元)6 確認
交易所充值3-6 確認

交易所通常要求 3-6 個確認,主要原因是防止「六區塊逆轉攻擊」。雖然這種攻擊在正常情況下幾乎不可能發生,但交易所本著小心駛得萬年船的原則,寧可多等一會兒。

交易的生命週期圖

用文字描述可能還是有點抽象,讓我畫個示意圖:

[錢包組裝交易]
      ↓
[私鑰簽名]
      ↓
[廣播到鄰近節點]
      ↓
[節點驗證:格式、簽名、雙花]
      ↓
[傳播至全網 Mempool]
      ↓
[等待礦工選擇]
      ↓ (fee rate 排隊)
[礦工找到 nonce]
      ↓
[區塊寫入區塊鏈]
      ↓
[全網節點驗證新區塊]
      ↓
[交易獲得 1 個確認]
      ↓ (繼續等待後續區塊)
[確認數增加,安全度提升]

關於零確認的迷思

有些人會問:比特幣不是去中心化嗎?為什麼不能轉帳後馬上到帳?

零確認(交易寫入區塊前)的狀態下,理論上存在「雙花」的可能——你廣播一筆轉帳給商家的交易給,同時廣播另一筆把同樣輸入轉給自己的交易。如果你的後者先被礦工打包,商家就收不到錢了。

但實際上,零確認的雙花難度比大多數人想像的高:

  1. 需要控制足夠多的算力或與礦工串通
  2. 礦工通常會拒絕零確認雙花(名聲受損划不來)
  3. 大多數商家會等到起碼 1 個確認才放貨

所以對於小額場景,零確認是可以接受的。當然,大額轉帳的話,乖乖等確認吧。

常見誤解

誤解一:區塊確認就是區塊鏈「把交易寫入資料庫」

不完全對。區塊鏈是分散式帳本,每個節點都有自己的一份副本。礦工廣播新區塊後,各節點會獨立驗證並更新自己的帳本。所以「寫入」這件事,其實是同時在數千個節點上發生的。

誤解二:等六個區塊確認就絕對安全了

數學上,6 個確認的安全性基於「攻擊者擁有低於 50% 算力」的假設。如果攻擊者真的控制了 51% 算力,理論上可以逆轉任意深度的區塊。當然,這種情況發生的概率極低,而且一旦發生,比特幣的價格估計也崩了,攻擊者無利可圖。

誤解三:手續費是固定金額

錯。比特幣手續費是動態的,取決於網路擁堵程度。你可以用 sat/vB(每個位元組多少 satoshi)來理解這件事:位元組越多的交易,總手續費越高,但 fee rate 可能相同。

實務問答

Q: 轉帳後發現手續費給太高了,能撤回嗎?

A: 不能直接撤回,但可以嘗試 RBF(如果啟用的話)或等交易被區塊鏈自動拒絕(很少見)。記得下次用錢包的費用控制功能,先模擬再發送。

Q: 交易卡在 Mempool 裡一直不確認,等下去有用嗎?

A: 要看情況。如果你的 fee rate 太低,網路又不擁堵,等幾個小時到一天可能就輪到了。但如果網路高峰期擁堵,等一個禮拜也可能白搭。建議用區塊流覽器追蹤 fee rate 市場行情,考慮用 CPFP 或 RBF 加速。

Q: 為什麼有些交易所充值需要那麼多確認?

A: 交易所控制的是「充值到帳」的時機。確認數越多,意味著資金越安全。交易所也要防範雙花風險,萬一用戶真金白銀充值後馬上雙花,交易所就虧大了。

Q: 轉帳顯示「未確認」是什麼意思?

A: 說明你的交易還在 Mempool 裡排隊。等礦工把它打包進區塊,就會顯示「1 個確認」。如果等太久,可能是手續費設低了。


比特幣交易的整個生命週期,本質上就是一個分散式共識系統運作的過程。理解這些細節,不僅能幫你最佳化轉帳體驗,還能讓你在這個行業待得更踏實。轉帳時偶爾遇到的手續費波動、確認時間延長,都不是「比特幣出了問題」,而是區塊空間拍賣市場的正常表現。淡定,淡定。

延伸閱讀:

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!