Signature

什麼是簽名研磨?

  • January 7, 2022

什麼是簽名研磨,為什麼要回答包裹的 segwit 單簽名輸入的大小和重量是多少?“強烈推薦”?

用於 ECDSA 簽名的序列化格式需要 33 個字節來編碼落入範圍上半部分的 r 值,但只需要 32 個字節來編碼落入範圍下半部分的 r 值。這意味著通過重複簽名直到您獲得較低範圍內的 r 值(“研磨簽名”),您可以將簽名的大小減少 1 個字節。這預計每個簽名需要兩次嘗試,並且可以更容易地在簽名之前估算交易的必要費用,並減少區塊空間佔用和交易費用。


這是在實踐中使用的真正技術嗎?僅減少 1 個字節似乎不切實際。還是很有趣的。– m1xolyd1an

是的,不僅僅是 1 B,每個簽名也是 1 B。

在 P2PKH 上,當您建構交易時,您必須保守地將輸入估計為 148 B,以免您可能低於目標費率,儘管大約一半的輸入將是 147 B,另一半將是 148 B。使用簽名研磨,你總是可以用 147 B 來估計。

對於 2-of-3 P2SH,您始終必須使用 297 B 進行估計,因為兩個簽名都可能是高 r。但是,只有大約 1/4 的輸入最終是 297 B,1/2 將是 296 B,1/4 將是 293 B。為什麼是 29 3?好吧,如果兩個簽名都是低 r,則滑入較小的varInt範圍以指定scriptSig節省另外兩個字節的長度。因此,您可以使用簽名研磨來估計減少 4 B,並在每個輸入上平均節省 2.5 B,以免進入區塊鏈。

因此,對於 P2PKH,它將您需要保守估計的總成本(輸入 + 輸出大小)降低了約 0.5%(181 B 對 182 B),並使實際使用的塊空間減少了約 0.25%(181 B 對 181.5 B) . 對於 2-of-3 P2SH,費用減少約 1.2%(325 B 對 329 B),使用的塊空間減少 0.75%(325 B 對 327.5 B)。實施很容易,唯一的持續成本是將簽名工作量增加一倍。在這裡查看例如比特幣核心的實現:https ://github.com/bitcoin/bitcoin/pull/13666

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