Bitcoin Core 29.0

Bitcoin Core installation binaries can be downloaded from bitcoincore.org and the source-code is available from the Bitcoin Core source repository.

29.0 版本說明

Bitcoin Core 29.0 版本現已發布,可從以下位置下載:

https://bitcoincore.org/bin/bitcoin-core-29.0/

此版本包含新功能、各種錯誤修正和效能改善,以及更新的翻譯。

請使用 GitHub 的問題追蹤器回報錯誤:

https://github.com/bitcoin/bitcoin/issues

如需接收安全性和更新通知,請訂閱:

https://bitcoincore.org/zh_TW/list/announcements/join/

如何升級

如果您正在執行舊版本,請將其關閉。等待它完全關閉(在某些情況下可能需要幾分鐘),然後執行安裝程式(在 Windows 上)或直接複製 /Applications/Bitcoin-Qt(在 macOS 上)或 bitcoind/bitcoin-qt(在 Linux 上)。

可以直接從已達到 EOL 的 Bitcoin Core 版本升級,但如果需要遷移資料目錄,可能需要一些時間。通常支援舊版本的 Bitcoin Core 錢包。

相容性

Bitcoin Core 在使用 Linux Kernel 3.17+、macOS 13+ 和 Windows 10+ 的作業系統上受到支援和測試。Bitcoin Core 也應該可以在大多數其他類 Unix 系統上運作,但在這些系統上的測試頻率較低。不建議在不受支援的系統上使用 Bitcoin Core。

重要變更

P2P 和網路變更

  • 已停止對 UPnP 的支援。如果您想自動開啟連接埠,請考慮改用 -natpmp 選項,該選項根據路由器支援使用 PCP 或 NAT-PMP。(#31130)

  • libnatpmp 已被內建的 PCP 和 NAT-PMP 實作取代(仍使用 -natpmp 選項啟用)。這支援自動 IPv4 連接埠轉送以及 IPv6 pinholing。(#30043)

  • 當使用 -port 設定選項時,預設的 onion 監聽連接埠現在將衍生為該連接埠 + 1,而不是設定為固定值(在 mainnet 上為 8334)。這重新允許使用不同 -port 且未使用 -bind 的多個本地節點設定,在 v28.0 中這會因連接埠衝突而導致啟動失敗。 請注意,如果與 -port 選項一起使用,在 torrc 中手動設定的 HiddenServicePort 可能需要調整。 例如,如果您使用非標準值 -port=5555 且未使用 -bind=...=onion,先前 Bitcoin Core 會在 127.0.0.1:8334 上監聽傳入的 Tor 連線。現在它會在 127.0.0.1:5556-port 加一)上監聽。如果您現在在 torrc 中手動設定了隱藏服務,則必須將其從 HiddenServicePort 8333 127.0.0.1:8334 更改為 HiddenServicePort 8333 127.0.0.1:5556,或使用 -bind=127.0.0.1:8334=onion 設定 bitcoind 以獲得先前的行為。 (#31223)

  • 在收到 orphan transaction(花費未知輸入的未確認交易)時,節點將嘗試從所有宣告該 orphan 的對等節點下載缺失的父交易。此變更可能會增加頻寬使用量,但使 orphan 處理更可靠。(#31397)

Mempool Policy 和挖礦變更

  • Ephemeral dust 是一個新概念,允許交易中有單一 dust 輸出,前提是該交易為零費用。為了花費此交易中的任何未確認輸出,花費者除了任何其他所需輸出外,還必須花費此 dust。換句話說,此類型的交易應該在交易套件中建立,其中 dust 同時被建立和花費。(#30239)

  • 由於一個錯誤,固定大小區塊標頭、交易計數和 coinbase 交易的預設區塊保留權重(4,000 WU)被保留了兩次且無法降低。因此,總保留權重始終為 8,000 WU,這意味著即使指定高於預設值的 -blockmaxweight(甚至達到最大 4,000,000 WU),實際區塊大小也永遠不會超過 3,992,000 WU。 此修正將保留整合到單一位置,並引入新的啟動選項 -blockreservedweight,直接指定保留權重。-blockreservedweight 的預設值設定為 8,000 WU,以確保依賴先前 -blockmaxweight 行為的使用者的向後相容性。 -blockreservedweight 的最小值設定為 2,000 WU。將 -blockreservedweight 設定為低於預設值的使用者應確保其區塊標頭、交易計數和 coinbase 交易的總權重不超過減少的值,否則可能會冒險挖掘無效區塊。(#31384)

更新的 RPC

  • RPC testmempoolaccept 回應現在在某些情況下包含 reject-details 欄位,類似於 sendrawtransaction 返回的完整錯誤訊息 (#28121)

  • 使用 submitblock 提交的重複區塊現在將保留其區塊資料,即使它先前已被修剪。如果啟用修剪,一旦選擇保留資料的區塊檔案進行修剪,該資料最終將再次被修剪。這與 getblockfrompeer 的行為一致,即使在修剪時也會保留區塊。(#31175)

  • getmininginfo 現在返回 nBitstarget 欄位中的當前目標。它還返回一個 next 物件,指定下一個區塊的 heightnBitsdifficultytarget。(#31583)

  • getblockgetblockheader 現在在 target 欄位中返回當前目標 (#31583)

  • getblockchaininfogetchainstates 現在在 target 欄位中返回 nBits 和當前目標 (#31583)

  • getblocktemplate RPC 的 curtime(BIP22)和 mintime(BIP23)欄位現在在所有網路上考慮 BIP94 中提議的 timewarp 修正。這確保在主網上啟用 timewarp 修正軟分叉時,未升級的礦工不會意外違反 timewarp 規則。(#31376, #31600) 提醒一下,使用 getblocktemplate RPC 的任何軟體都必須考慮這些值(curtimemintime 都可以)。在某些情況下,僅依賴時鐘可能會導致無效區塊,特別是在部署 timewarp 修正後。(#31600)

新的 RPC

  • getdescriptoractivity 可用於在一組指定的區塊中尋找與給定描述符集合相關的所有花費/接收活動。此呼叫可與 scanblocks 一起使用,以減少對額外索引程式的需求。(#30708)

更新的 REST API

  • GET /rest/block/<BLOCK-HASH>.jsonGET /rest/headers/<BLOCK-HASH>.json 現在在 target 欄位中返回當前目標

更新的設定

  • 由於最近 UTXO 集的增長,-dbcache 設定選項的最大允許值已降低。請注意,在此變更之前,大的 -dbcache 值會自動減少到 16 GiB(在 32 位元系統上為 1 GiB)。(#28358)

  • 對否定的 -noseednode-nobind-nowhitebind-norpcbind-norpcallowip-norpcwhitelist-notest-noasmap-norpcwallet-noonlynet-noexternalip 選項的處理已變更。先前否定這些選項會有各種令人困惑且未記錄的副作用。現在否定它們只是重置設定並恢復預設行為,就像未指定選項一樣。

  • 從 v28.0 開始,-mempoolfullrbf 啟動選項預設設定為 1。隨著此政策的廣泛採用,使用者不再從停用它中受益,因此已移除該選項,使 full replace-by-fee 成為標準行為。(#30592)

  • 設定 -upnp 現在會記錄警告並被解釋為 -natpmp。請考慮直接使用 -natpmp。(#31130, #31916)

  • 作為安全檢查,當 -blockreservedweight 初始化參數值低於 2000 權重單位時,Bitcoin Core 將無法啟動。如果 -blockmaxweight-blockreservedweight 初始化參數超過共識限制 4,000,000 WU,Bitcoin Core 也將無法啟動

  • 傳遞 -debug=0-debug=none 現在的行為類似於 -nodebug:先前設定的除錯類別將被清除,但後續的 -debug 選項仍將被套用。

  • -rpcthreads 的預設值已從 4 更改為 16,-rpcworkqueue 的預設值已從 16 更改為 64。(#31215)

建置系統

建置系統已從 Autotools 遷移到 CMake:

  • 所需的最低 CMake 版本為 3.22。

  • 不允許原始碼內建置。當使用根原始碼樹中的子目錄作為建置目錄時,建議其名稱包含子字串「build」。

  • CMake 變數可用於設定建置系統。某些預設值已變更。 例如,您現在需要新增 -DWITH_ZMQ=ON 來建置 zmq,並新增 -DBUILD_GUI=ON 來建置 bitcoin-qt。詳細資訊請參閱 Autotools to CMake Options Mapping

  • 對於單一設定產生器,預設建置設定(CMAKE_BUILD_TYPE)為「RelWithDebInfo」。但是,對於「Release」設定,CMake 預設使用編譯器最佳化旗標 -O3,該旗標尚未在 Bitcoin Core 上進行廣泛測試。因此,建置系統將其替換為 -O2

  • 預設情況下,建置的可執行檔和程式庫位於建置目錄的 bin/lib/ 子目錄中。

  • 建置系統支援基於元件的安裝。可安裝元件的名稱與建置目標名稱一致。例如:

cmake -B build
cmake --build build --target bitcoind
cmake --install build --component bitcoind
  • 如果您在基於 Autotools 的建置過程中使用了任何 CPPFLAGSCFLAGSCXXFLAGSLDFLAGS 環境變數,您應該改用相應的 CMake 變數(APPEND_CPPFLAGSAPPEND_CFLAGSAPPEND_CXXFLAGSAPPEND_LDFLAGS)。或者,如果您選擇使用專用的 CMAKE_<...>_FLAGS 變數,則必須確保產生的編譯器或連結器呼叫符合預期。

有關設定和使用 CMake 的更詳細指導,請參閱官方 CMake documentationCMake’s User Interaction Guide。此外,請參閱特定於平台的 doc/build-*.md 建置指南,以獲取針對您作業系統的說明。

低階變更

工具和實用程式

  • 新工具 utxo_to_sqlite.py 將壓縮序列化的 UTXO 快照(如使用 dumptxoutset RPC 建立)轉換為 SQLite3 資料庫。有關更多詳細資訊,請參閱腳本的 --help 輸出。(#27432)

測試

  • BIP94 timewarp 攻擊緩解(為 testnet4 設計)在 regtest 網路上不再活躍。(#31156)

相依性

  • MiniUPnPc 和 libnatpmp 已作為相依性移除 (#31130, #30043)。

致謝

感謝所有直接為此版本做出貢獻的人:

  • 0xb10c
  • Adlai Chandrasekhar
  • Afanti
  • Alfonso Roman Zubeldia
  • am-sq
  • Andre
  • Andre Alves
  • Anthony Towns
  • Antoine Poinsot
  • Ash Manning
  • Ava Chow
  • Boris Nagaev
  • Brandon Odiwuor
  • brunoerg
  • Chris Stewart
  • Cory Fields
  • costcould
  • Daniel Pfeifer
  • Daniela Brozzoni
  • David Gumberg
  • dergoegge
  • epysqyli
  • espi3
  • Eval EXEC
  • Fabian Jahr
  • fanquake
  • furszy
  • Gabriele Bocchi
  • glozow
  • Greg Sanders
  • Gutflo
  • Hennadii Stepanov
  • Hodlinator
  • i-am-yuvi
  • ion-
  • ismaelsadeeq
  • Jadi
  • James O’Beirne
  • Jeremy Rand
  • Jon Atack
  • jurraca
  • Kay
  • kevkevinpal
  • l0rinc
  • laanwj
  • Larry Ruane
  • Lőrinc
  • Maciej S. Szmigiero
  • Mackain
  • MarcoFalke
  • marcofleon
  • Marnix
  • Martin Leitner-Ankerl
  • Martin Saposnic
  • Martin Zumsande
  • Matthew Zipkin
  • Max Edwards
  • Michael Dietz
  • naiyoma
  • Nicola Leonardo Susca
  • omahs
  • pablomartin4btc
  • Pieter Wuille
  • Randall Naar
  • RiceChuan
  • rkrux
  • Roman Zeyde
  • Ryan Ofsky
  • Sebastian Falbesoner
  • secp512k2
  • Sergi Delgado Segura
  • Simon
  • Sjors Provoost
  • stickies-v
  • Suhas Daftuar
  • tdb3
  • TheCharlatan
  • tianzedavid
  • Torkel Rogstad
  • Vasil Dimov
  • wgyt
  • willcl-ark
  • yancy

以及所有在 Transifex 上協助翻譯的人。