Bitcoin-Core

其次是比特幣交易簽名

  • February 19, 2020

正如我所理解的,我們可以從我們有 DER 序列化的 ScriptSig 之後的任何事務中恢復 R 和 S 值。

  1. Segwit 交易,簽名將在見證部分,恢復 R 和 S 遵循相同的步驟?
  2. 如果我使用壓縮的公鑰(以 0x02 或 0x03 開頭),我如何驗證簽名,因為我沒有公鑰的 Y 座標?
  3. 據我所知,對於使用 P2SH 的多重簽名交易,我們需要使用第一個密鑰進行簽名,然後使用第一個簽名獲取輸出交易並使用另一個密鑰對其進行簽名,但是使用簽名數學,我們使用消息的雜湊值,即txId,但在 segwit 上,txid 在簽名後不會改變,因為見證人不計入 txid 雜湊的一部分?

簽署交易時我應該注意的其他事項?

  1. 在任何交易中,您都將在scriptsig 中使用push OP 來指示其長度,並在SegWit tx 中將其作為見證項,並使用CompactInt 來指示其長度。提取簽名後,只需解碼 DER。
  2. 要獲得完整(x,y)座標,您必須使用橢圓曲線方程 ( )來y^2 = x^3 + ax + b計算y. ECDSA x,y 座標有效性驗證似乎不起作用x
  3. 要簽署交易,修改後的序列化始終用作要散列的數據,然後簽名而不是原始交易(換句話說,生成的散列將與 txid 不同)。這適用於所有標準腳本,例如 P2PK、P2PKH、P2SH、P2WPKH、P2WSH,… 唯一的區別是修改和序列化。在舊版(前 3 個)中,該過程在比特幣 wiki 上的 OP_CheckSig 中進行了描述,而 SegWit 則在BIP-143中定義。

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