Bech32-Address

Bech32 編碼地址到 scriptPubKey

  • August 22, 2022

我的目標是解析 BTC 交易並驗證交易是否發送到給定的 BTC 地址。所以我需要將一個 BTC 地址轉換為交易中使用的 scriptPubKey。

我得到了這個用於base58Check編碼地址的工作,因為它可以解碼地址並獲取scriptPubKey。

但是,我無法讓它適用於 Bech32 編碼地址。從下面連結的頁面上找到的資訊來看,似乎無法將地址解碼為 scriptPubKey,因為還應用了壓縮:https ://en.bitcoin.it/wiki/Bech32

那麼我不能將 bech32 編碼地址轉換為 scriptPubKey 是否正確?

謝謝!

那麼我不能將 bech32 編碼地址轉換為 scriptPubKey 是否正確?

這是不正確的。

根據定義,地址是錢包關於如何創建交易輸出的說明。由於交易輸出包含一個 scriptPubKey,這必然意味著一個地址可以轉換為一個。否則錢包將無法發送給它。

該文件中提到的壓縮是指使用壓縮的公鑰(33 字節的),而不是未壓縮的 65 字節的。這不會影響您,因為 bech32 P2WPKH 地址包含公鑰的散列,而該散列需要放在 scriptPubKey 中。該雜湊計算的內容是接收者的業務,而不是發送者(您)的業務。順便說一句,base58 P2PKH 地址也是如此;您還已經在那里處理了公鑰雜湊。

有關如何解碼 bech32 地址的確切描述,請參閱指定它們的 BIP。它具有虛擬碼、參考程式碼連結和測試向量,包括提供地址和它們轉換為的 scriptPubKey 的向量。相關文件為:

  • BIP173指定 bech32 和見證 v0 地址的編碼(P2WPKH、P2WSH)。
  • BIP350指定 bech32m,以及見證 v1(及更高版本)地址的編碼(目前僅 P2TR)。

最後讓它工作。這段程式碼對我很有幫助: https ://github.com/sipa/bech32/tree/master/ref

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