我想深入研究開放的 Taproot PR 以了解它、測試它,甚至可能審查它。有什麼建議或建議嗎?
我想深入研究開放的 Taproot PR ( PR #19953 ) 來理解它、測試它,甚至可能審查它。有什麼建議或建議嗎?
以前的比特幣核心公關評論俱樂部會議
一個很好的起點是迄今為止針對Taproot PR的特定送出舉行的各種比特幣核心 PR 審查俱樂部會議。最新的一篇是關於“實施 Taproot 驗證”(由 John Newbery 主持),那裡有各種筆記和會議記錄。該頁面上的 Taproot PR 上也有指向以前複習俱樂部會議的連結。
建立公關
在審查 PR 時,建立 PR 總是一個好主意。有關建構 PR 的簡化指南,請參閱此 StackExchange問題。如需更詳細的指導,請參閱 Jon Atack 提供的此資源。
顯然,您要複製的 Bitcoin Core 的分支是 sipa’s (Pieter Wuille’s),而您要檢查的分支是
taproot
.此 Taproot PR 中沒有 GUI 或錢包支持,因此您在配置時需要使用以下標誌以節省時間。
./configure --without-gui --disable-wallet
了解 PR 做什麼(以及不做什麼)
在 PR Pieter Wuille 上說:
不包括任何類型的簽名或錢包支持,因為測試完全通過 Python 測試框架完成。
這是相當有限的範圍。(Schnorr) 簽名的所有簽名和驗證都已由 libsecp256k1庫處理,該庫具有自己的單獨儲存庫。但 Pieter 在這裡所說的是,使用目前的 Taproot分支,你無法從比特幣核心錢包或使用
bitcoin-cli
. 創建 Taproot 事務的唯一方法是使用功能測試框架中的 Python 程式碼。因此,如果您了解一些 Python,您可以調整 Python 程式碼以創建不同的 Taproot 交易,但除此之外,您無法創建 Taproot UTXO 或從中消費。從 Python 功能測試框架創建 Taproot 事務後,此 PR 分支將允許您使用 C++ 驗證程式碼驗證 Taproot 支出。
功能測試
鑑於您的比特幣核心完整節點驗證的唯一 Taproot 交易來自功能測試框架,因此從那裡開始您的程式碼審查是一個好主意。此 PR 中編輯了一些現有的功能測試,但添加了一個名為feature_taproot.py的新功能測試。該測試生成隨機 Taproot 交易並驗證它們是否被接受到記憶體池(在適當的時候)和被接受(在適當的時候)到 Python 建構的塊中。
您可以通過執行以下命令直接執行此新功能測試:
test/functional/feature_taproot.py
幾分鐘後,這個測試很可能會通過。因此,您可以在此處創造性地更改測試或它正在測試的 C++ 程式碼,然後再次執行測試,看看您需要做什麼才能使該測試失敗。
要避免什麼
這個 PR 有一些事情要避免。Taproot 設計仍有可能存在概念問題,但在現階段不太可能。在倫敦 BitDevs舉行的蘇格拉底研討會上,對 Taproot 概念設計的演變進行了深入討論,涵蓋了多年的討論。如果您認為自己發現了概念性問題,我建議您觀看或閱讀其記錄。或者,您可以在 IRC 的 ##taproot-bip-review 頻道上自由提問。
在此 PR 中要避免的另一件事是討論啟動(或部署)。此 PR 完全避免了任何關於啟動方法的決定,因此不應討論此 PR 上的啟動。如果您查看關於在 regtest 上啟動 Taproot/Tapscript 的送出(BIP 341、BIP 342),則 regtest 的部署日期設置為 2008 年 1 月 1 日,但除此之外沒有設置啟動或部署參數。如果您想討論啟動問題,還有另一個 IRC 頻道 ##taproot-activation 用於此目的。
// Deployment of Taproot (BIPs 340-342) consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1199145601; // January 1, 2008 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1230767999; // December 31, 2008
PR 處於相當先進的階段,它真正尋求的是程式碼審查、測試和(也許!)附加測試。
有關調試 Taproot 功能測試的指導,請參閱其他 StackExchange問題。