Address-Generation

如果我只想使用密鑰路徑,如何構造 P2TR 地址?

  • June 23, 2021

我想創建一個 P2TR(支付給 Taproot)地址,但我只想訪問關鍵路徑支出,在這個特定範例中我對腳本路徑支出沒有用處。在這種情況下,我應該如何處理腳本路徑?

BIP 341 (BIP-Taproot) 討論了不需要腳本路徑的範例。

如果支出條件不需要腳本路徑,則輸出鍵應送出到不可支出的腳本路徑,而不是沒有腳本路徑。

BIP 也在這裡解釋了這樣做的理由。

如果主根輸出密鑰是密鑰的集合,則惡意方有可能在不被其他方注意到的情況下添加腳本路徑。這允許繞過多方政策並竊取硬幣。

Taproot 上的比特幣 Optech研討會解釋說,您使用以下方法計算調整後的公鑰:

Q = P + H(P|c)G

在哪裡

Q is the tweaked public key
P is the initial public key (P = xG where x is the private key)
H is the hash function
| is concatenation
c is the commitment to the script path spend
G is the generator point

如果您不需要腳本路徑花費,您可以使用以下方法計算調整後的公鑰:

Q = P + H(bytes(P))G

其中bytes(P)BIP 340 (BIP-Schnorr) 中定義的 P 的序列化。

這個經過調整的公鑰 Q 將是您的 Taproot (P2TR) 地址。請記住,我們不會像使用 P2PKH、P2SH、P2WSH (SegWit v0) 那樣使用 Taproot (SegWit v1) 散列(調整)公鑰。

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