Transactions

三種比特幣地址類型是否都可以互操作(傳統、隔離見證、原生隔離見證)?

  • November 30, 2021

是否可以在所有 3 種地址類型(舊版、隔離見證、原生 segwit-bech32)之間來回發送交易?

還是其中一個無法發送給另一個?

絕對地!

每種地址類型處理事務生成的方式略有不同,但它們都可以在協議級別上相互操作。如果您遇到一種地址類型不會發送到另一種地址類型的問題,這不是比特幣程式碼的限制,而是客戶端的限制。

不過,您可能會聽到類似的聲音:

“舊地址與 SegWit 不兼容”

這僅僅意味著舊地址無法發送SegWit 交易。在接收方面,一切都是可互操作的。交易類型以及接收地址能否充分利用所有交易收益取決於發送地址。

舊地址

比特幣的原始地址格式 — Pay-to-Pubkey Hash (P2PKH) — 使用接收者公鑰的散列建構交易。如果地址以 開頭1,則為舊地址。由於其簡單性和通用集成性,它仍然被普遍使用,雖然 P2PKH 可以發送到 SegWit 地址,但由於遺留交易稍大,費用會稍高一些。

P2SH地址

這些地址以 a 開頭,3旨在**支付腳本雜湊,**將基本腳本功能添加到地址。交易有額外的邏輯——在多重簽名的情況下——表明需要多個簽名來授權交易。只要所有必需的簽名都到位,任何地址都可以從該地址接收交易。

如果你聽說過“非原生 SegWit”這個詞,或者想知道為什麼 SegWit 被稱為“原生 SegWit”,那是因為這個地址。即使發送地址不是 SegWit,也會創建一個 P2SH 交易,其中包含一個“Pay-to-Witness-Pubkey Hash”。這模仿了 SegWit 格式,允許原生 SegWit 地址來解釋它,嗯……原生。

隔離見證 & Bech32

Bech32 是原生 SegWit 地址格式,使用塊空間更有效。Bech32 地址可以通過它的bc1前綴來辨識。SegWit 是一種將交易拆分(Seg regates)為兩部分的交易格式:一個包含標準交易 ID 數據(to、from、金額、簽名等),以及該數據的腳本片段( Witness ),即鏈上規模縮小 75%以及其他好處. 由於見證人包含遺留數據的“縮小版”,它允許將隔離見證交易發送到遺留地址(沒有成本效益)或隔離見證地址(作為僅依賴見證人的更便宜的交易) )。然而,舊地址不知道如何生成見證數據,因此無法將其包含在 SegWit 交易中並從中受益。不過沒關係,因為 SegWit 地址不需要見證數據,因此舊地址將令牌發送到 SegWit 地址不會有問題。

充分受益於隔離見證

無論你使用什麼錢包,任何 UTXO 都可能來自任何地址類型。對於地址中的任何硬幣,它到達的 UTXO 要麼包含遺留數據,要麼包含見證數據,或兩者兼有,這取決於用於發送硬幣的交易類型。

如果您使用 Bech32 地址發送 SegWit 交易,則在將 UTXO 作為 SegWit 交易發送給您時,它的全部好處就會實現,但無論如何都會發送。

混合腳本事務

在這些交易中,可能來自不同地址類型的 UTXO 被放入單個交易中。這也說明了當硬幣在其生命週期中被發送到不同的地址類型時會發生什麼。例子:

  1. Alice 從 Bob 的舊地址收到 0.5 BTC 到她的 SegWit 錢包。
  2. Alice 從 Charlie 那裡收到了使用 SegWit 發送的 0.5 BTC。
  3. Alice 向 Bech32 地址發送 1 BTC 交易,該交易同時使用傳統和原生 SegWit 交易。

結果是 SegWit 交易,儘管如果所有 UTXO 都是 SegWit,它並不能完全受益於隱私或交易成本降低。如果它被發送到一個遺留地址,硬幣的任何進一步移動都將是遺留交易,直到它到達一個 Bech32 地址,該地址將它作為 SegWit 交易發送,此時它再次成為 SegWit 交易。

注意:一些較舊的錢包客戶端或不支持 SegWit 的錢包客戶端可能無法將新版本的地址辨識為有效,並且不會讓您發送給他們:這是一種預防措施(在錢包程式碼中,而不是比特幣程式碼中)以防止使用者從發送到非比特幣地址。

直根 -Update (Nov 2021)

除了傳統的橢圓曲線數字簽名算法 (ECDSA) 之外,最近的 Taproot 升級還通過啟用 Schnorr 簽名增加了額外的交易更改。比特幣最初發佈時,Schnorr 算法受到專利保護。使用 Schnorr 有很多好處,最重要的是能夠聚合簽名密鑰。雖然 P2SH 多重簽名包括各方公鑰和簽名,但 Schnorr 可以聚合密鑰,為節點提供隱私和更容易的計算。

由於聚合密鑰仍用於創建具有必要輸入和輸出的簽名 UTXO,因此即使是新算法也與所有現有比特幣客戶端兼容!

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