Address-Generation
如果我只想使用密鑰路徑,如何構造 P2TR 地址?
我想創建一個 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) 散列(調整)公鑰。