Bip174-Psbt
PSBT 簽名者如何辨識非 bip32 密鑰?
在 PSBT 版本 0 或 2 中,如果密鑰對不是通過 bip32 派生的,簽名者如何知道用於輸入或輸出的密鑰對?
對於輸入,為了簡單起見,假設 p2wpkh,我想可以使用 PSBT_IN_HASH160 將輸出腳本中的 pubkey 雜湊作為 keydata,將 pubkey 作為 valuedata。
但是您將如何辨識輸出的公鑰?似乎無法通過 PSBT 傳達該資訊。
(因此,簽名者需要為其所有 pubkey 維護從 pubkey 散列到 pubkey 的映射,以驗證它是否擁有輸出。或者,它可以計算它知道的每個 pubkey 的 pubkey 散列,直到找到與 pubkey 散列匹配的散列在輸出中。它還必須對交易的每個輸出執行此操作,因為 psbt 中沒有提示簽名者可以簽署哪些輸出。不過,公鑰最多需要散列一次,因為您可以檢查每個公鑰雜湊對所有輸出。)
PSBT_*_BIP32_DERIVATION
即使是非 BIP32 派生的密鑰也可以而且應該使用。它只是密鑰本身的指紋,然後是長度為 0 的派生路徑。每個密鑰都可以表示為從其自身派生而來,派生路徑為m
。對於輸入,為了簡單起見,假設 p2wpkh,我想可以使用 PSBT_IN_HASH160 將輸出腳本中的 pubkey 雜湊作為 keydata,將 pubkey 作為 valuedata。
我不建議這樣做。簽名者不會期望在
PSBT_IN_HASH160
. 該欄位實際上是為終結者準備的,以便他們可以建構 scriptSig/witness。