一筆比特幣交易的收款人數量有上限嗎?

一筆比特幣交易的收款人數量有上限嗎?的文章封面插畫

企業發薪、交易所處理提領或一群人分帳時,比特幣錢包可以在同一筆交易裡建立許多輸出,把不同金額送往不同地址。既然輸出可以一個接一個加入,看起來似乎只要清單夠長,就能同時支付任意多的人。

不過,每增加一位收款人,交易都要多帶一份金額與花費條件。這些資料會占用有限的區塊空間,也要由網路參與者接收、檢查與保存。收款清單因此不能無限延伸,問題也無法只靠一個固定人數回答。

較精確的說法是:協議沒有替「收款人」設置獨立計數器,實際上限由整筆交易的結構與重量形成。共識規則決定區塊最多能容納多少資料,常見全節點另有轉送政策,礦工也會依費率與自身政策選擇內容。三層邊界共同決定一筆批次付款能否順利傳播並取得確認。

協議依輸出計算,不替收款人點名

比特幣交易會消耗一筆或多筆 UTXO,再建立一組新的輸出。每個輸出至少要記錄金額與未來可花用它的條件;地址只是錢包用來產生這項條件的常見可讀格式。鏈上資料不會附上姓名,也不會判斷兩個輸出背後是否屬於同一個人。

所以,「最多幾位收款人」無法只由輸出數量換算。某位收款人可以取得兩個輸出,付款方也可能建立找零輸出給自己;反過來,多個輸出還可能由同一個機構控制。協議真正計算的是交易資料與驗證工作,而非現實世界的人數。

不同輸出類型占用的資料量也不完全相同。除此之外,交易還要容納輸入參照、簽署證明、找零與其他固定欄位。即使收款人數相同,動用大量零碎 UTXO 的交易,仍可能比只用少數輸入的交易更重,所需手續費也會不同。

一筆交易必須完整進入同一個區塊

區塊收錄的單位是一份完整交易。全節點驗證時會一起檢查輸入是否仍可花、各項授權能否成立,以及輸入總額是否足以支應所有輸出與費用。只收錄前半段輸出、把其餘部分留到下一個區塊,會變成缺少完整結構的另一份資料,無法算作原交易的一部分確認。

這表示過大的批次交易不能像長檔案那樣自動切成數段,再橫跨多個區塊接續完成。若付款軟體把清單拆開,產生的是多筆各自獨立的交易;它們會有不同識別碼、各自支付費用,也可能在不同時間取得交易確認。

整筆收錄帶來明確結果:同一筆交易裡的所有新輸出會一起出現在鏈上,或一起繼續等待。它也帶來共同失敗邊界;只要其中一個輸入已被花掉、必要簽章缺失,或交易整體超出規則允許範圍,礦工就不能靠刪掉某位收款人來讓原交易局部成立。

共識上限與轉送政策是兩道不同的門

有效區塊有重量上限,還必須容納區塊標頭、Coinbase 交易與其他必要資料。單一普通交易若大到無法和這些內容一起放進有效區塊,就不可能以原樣確認。這是所有相容驗證者都必須遵守的共同邊界。

實際送出以前,交易通常還要通過各全節點的待處理與轉送政策。常見軟體會對單筆標準交易採用比整個區塊更嚴格的重量、腳本與資源限制,避免一份候選資料占用過多記憶體、頻寬或驗證時間。這些政策可能隨版本與設定演進,不能當成永久不變的收款人數規則。

於是,一筆交易可能在共識規則下有機會被某個區塊接受,卻因不符合常見轉送政策而難以經由公開網路抵達礦工。私下交給願意處理的礦工可以繞過部分傳播政策,仍然跨不過區塊重量與其他共識檢查。

實務批次通常遠小於理論邊界

把更多付款放進同一筆交易,可以共用部分輸入與固定欄位,平均到每位收款人的資料成本有機會下降。可是,每個新增輸出仍會增加重量;總手續費取決於交易大小與當時費率,不會因為採用批次就固定不變。金額過小的輸出還可能碰到常見的粉塵政策,使公開轉送更加困難。

營運者也會考慮故障範圍。批次越大,任何輸入、簽署或資料準備錯誤牽連的收款就越多;拆成多筆能縮小單次失敗影響,代價是重複資料增加,而且各批次可能在不同區塊確認。兩種安排都需要在費用、等待與作業風險之間取捨。

公開鏈上還會顯示這些輸出由同一筆交易建立。這不會直接揭露每位收款人的真實身分,卻可能提供共同付款時間與資金來源的分析線索。把很多人放進同一批次,因而也會改變隱私邊界。

所以,一筆比特幣交易沒有脫離交易結構、可以直接填入的固定收款人上限。輸出數量會和輸入、腳本、見證及找零一起形成交易重量,再接受區塊容量、轉送政策與費率選擇的約束。清單大到不適合單筆處理時,只能改成多筆交易;代價是原本共享的確認結果也會隨之拆開。