Terminology

Taproot中的控制塊是什麼?

  • June 22, 2021

Taproot上下文中“控制塊”的定義是什麼?

它在 Bitcoin Core repo 和BIP 341中的standard.cpp中被引用。

使用 Taproot 輸出有兩種可能的方式:

  • 通過密鑰路徑:只需提供一個 BIP340 簽名,使用輸出中的公鑰對支出交易進行簽名。
  • 通過腳本路徑:顯示輸出實際上是經過調整的密鑰,通過顯示原始和調整,並顯示此調整送出到腳本葉。這就是控制塊發揮作用的地方。

當通過腳本路徑消費時,簽名者必須提供一些數據來驗證他們的消費:

  1. 公開的劇本。
  2. 滿足該腳本所需的輸入(簽名和它可能需要的任何其他數據)。
  3. 葉版本(目前,始終為 0xc0,如 BIP342 中所指定)。
  4. 內部密鑰(調整前的公鑰)
  5. 用於證明調整送出到顯示的腳本和葉版本(#1 和 #2)的 Merkle 路徑。
  6. 指示輸出鍵是否被否定的符號位(這是啟用批量驗證所必需的)。

調整本身沒有透露。它由驗證者根據顯示的腳本、葉子版本和內部密鑰重新計算。然後驗證使用該調整調整內部密鑰與輸出中的公鑰匹配。

這給我們帶來了一個問題,即所有這些資訊是如何在支出輸入的見證堆棧中編碼的:

  • 首先,腳本的所有輸入都被使用(上面的#2)

  • 作為倒數第二個項目,揭示的腳本(上面的#1)

  • 作為最後一項,控制塊,它包含所有其他資訊:

    • 它的第一個字節儲存葉子版本(#3)(前 7 位)和符號位(#6)(下位)。
    • 接下來的 32 個字節儲存內部公鑰(#4)的(僅 X 座標,因為只有 x 密鑰)
    • 之後的每個 32 字節塊編碼 Merkle 路徑 (#5) 的一個組件,該路徑將葉連接到根(然後是調整),以自下而上的方向進行。

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