Bitcoin Core 28.0

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

28.0 版本說明

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

https://bitcoincore.org/bin/bitcoin-core-28.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 錢包。

在 macOS 上執行 Bitcoin Core 二進位檔案需要自簽。

cd /path/to/bitcoin-28.0/bin
xattr -d com.apple.quarantine bitcoin-cli bitcoin-qt bitcoin-tx bitcoin-util bitcoin-wallet bitcoind test_bitcoin
codesign -s - bitcoin-cli bitcoin-qt bitcoin-tx bitcoin-util bitcoin-wallet bitcoind test_bitcoin

相容性

Bitcoin Core 在使用 Linux Kernel 3.17+、macOS 11.0+ 和 Windows 7 及更新版本的作業系統上受到支援和廣泛測試。Bitcoin Core 也應該可以在大多數其他類 UNIX 系統上運作,但在這些系統上的測試頻率較低。不建議在不受支援的系統上使用 Bitcoin Core。

重要變更

Testnet4/BIP94 支援

已新增對 BIP94 中指定的 Testnet4 的支援。可以使用 -testnet4 選項選擇該網路,區段標頭也命名為 [testnet4]

雖然計劃在即將發布的版本中逐步停止對 Testnet3 的支援,但在此版本中仍可透過已知選項使用 Testnet3。(#29775)

Windows 資料目錄

Windows 上的預設資料目錄已從 C:\Users\Username\AppData\Roaming\Bitcoin 移至 C:\Users\Username\AppData\Local\Bitcoin。Bitcoin Core 將首先檢查舊目錄的存在,如果存在則繼續使用該目錄以實現向後相容性。(#27064)

JSON-RPC 2.0 支援

JSON-RPC 伺服器現在識別 JSON-RPC 2.0 請求並嚴格遵守規範進行回應。詳細資訊請參閱 JSON-RPC-interface.md。(#27101)

JSON-RPC 客戶端可能需要更新以與 JSON-RPC 伺服器相容。如果發現任何相容性問題,請在 GitHub 上開啟問題。

libbitcoinconsensus 移除

libbitcoin-consensus 程式庫在 27.0 中已被棄用,現已完全移除。(#29648)

P2P 和網路變更

  • 先前,如果 Bitcoin Core 正在監聽 P2P 連線(使用預設設定或透過 bind=addr:port),它也總是會綁定到 127.0.0.1:8334 以監聽 Tor 連線。即使節點不使用 Tor,也無法關閉此功能。現已變更,現在 bind=addr:port 僅導致綁定到 addr:port。綁定到 0.0.0.0:8333127.0.0.1:8334 的預設行為沒有變更。

    如果您使用 bind=... 設定而沒有 bind=...=onion,並且依賴先前的隱含行為在 127.0.0.1:8334 接受傳入的 Tor 連線,您現在需要使用 bind=... bind=127.0.0.1:8334=onion 明確指定。(#22729)

  • 如果任何 P2P 綁定失敗,Bitcoin Core 現在將無法啟動,而不是先前只有在所有 P2P 綁定都失敗時才中止啟動的行為。(#22729)

  • UNIX domain sockets 現在可用於代理連線。將 -onion-proxy 設定為帶有前綴 unix: 的本地 socket 路徑(例如 -onion=unix:/home/me/torsocket)。(#27375)

  • -zmqpubrawblock-zmqpubrawtx 現在接受 UNIX socket 路徑,格式為 -zmqpubrawtx=unix:/path/to/file (#27679)

  • -whitelist 新增了「in」和「out」旗標,用於控制權限是否適用於入站連線和/或手動連線(預設:僅入站)。(#27114)

  • 費率過低的交易將機會性地與其子交易配對並作為套件提交,從而使節點能夠使用現有的交易中繼協定下載 1-parent-1-child 套件。結合其他 mempool 政策,當父交易低於 mempool 最小費率時,此變更允許有限的「package relay」。Topologically Restricted Until Confirmation (TRUC) 父交易還允許低於最小中繼費率(即支付 0 費用)。使用 submitpackage RPC 直接向節點提交套件。警告:此 P2P 功能是有限的(與 submitpackage 介面不同,不支援具有多個未確認父交易的子交易),並且在對抗性條件下尚不可靠。(#28970)

Mempool Policy 變更

  • 版本號設定為 3 的交易現在在所有網路上都被視為標準 (#29496),並受制於 BIP 431 中描述的選擇性 Topologically Restricted Until Confirmation (TRUC) 交易政策。該政策包括對花費未確認輸出的限制 (#28948)、如果提交更具激勵相容性的後代則驅逐先前的後代 (#29306),以及最大交易大小為 10,000vB (#29873)。這些限制簡化了接受或替換 TRUC 交易的激勵相容性評估,從而確保任何替換對節點更有利,並使費用提升更可靠。

  • Pay To Anchor (P2A) 是一種新的標準 witness 輸出類型,用於花費,是一種新識別的輸出範本。這允許無密鑰的 anchor 輸出,具有緊湊的花費條件,在等效的 sh(OP_TRUE) 輸出之上具有額外的效率,以及花費交易的 txid 穩定性。 注意:在網路上足夠數量的節點採用此升級之前,此輸出在網路上的傳播將受到限制。(#30352)

  • 現在啟用了有限的 package RBF,其中提議的衝突套件將在 mempool 中產生大小為 2 的連接元件(又名 cluster)。所有被衝突的 cluster 必須為大小 2 或更小。(#28984)

  • -mempoolfullrbf 設定選項的預設值已從 0 更改為 1,即 mempoolfullrbf=1。(#30493)

更新的 RPC

  • dumptxoutset RPC 現在以新的改進格式返回 UTXO 集轉儲。相應地,loadtxoutset RPC 現在期望其嘗試載入的轉儲採用此新格式。不再支援舊格式的轉儲,需要使用新格式重新建立才能使用。(#29612)

  • 已為高度 840,000 新增 AssumeUTXO mainnet 參數。這意味著 loadtxoutset RPC 現在可以在 mainnet 上使用該高度的匹配 UTXO 集。(#28553)

  • getblockchaininfogetmininginfogetnetworkinfo 中的 warnings 欄位現在將所有活動節點警告作為字串陣列返回,而不是單一警告。可以透過使用設定選項 -deprecatedrpc=warnings 執行 Bitcoin Core 來暫時恢復當前行為。(#29845)

  • 先前使用 sendrawtransaction RPC 並指定 UTXO 集中已存在的輸出時,會返回 RPC 錯誤代碼 -27,訊息為「Transaction already in block chain」。錯誤訊息已更改為「Transaction outputs already in utxo set」,以更準確地描述問題來源。(#30212)

  • estimatesmartfee RPC 的預設模式已從 conservative 更新為 economical,預計將減少許多使用者的過度估計,特別是如果 Replace-by-Fee 是一個選項。對於需要對費用估計有高信心但代價是可能過度估計的使用者,conservative 模式仍然可用。(#30275)

  • RPC scantxoutset 現在在「unspents」JSON 陣列中返回 2 個新欄位:blockhashconfirmations。詳細資訊請參閱 scantxoutset 說明。(#30515)

  • RPC submitpackage 現在允許傳遞 2 個新參數:maxfeeratemaxburnamount。詳細資訊請參閱 subtmitpackage 說明。(#28950)

與錢包相關的 RPC 變更可以在下面的錢包部分找到。

更新的 REST API

  • 透過在截斷或過大的 txid 以及格式錯誤的 outpoint 索引時引發 HTTP_BAD_REQUEST「Parse error」,改進了 /rest/getutxos 的參數驗證。這些請求先前是靜默處理的。(#30482, #30444)

建置系統

  • 現在需要 GCC 11.1 或更高版本,或 Clang 16.0 或更高版本,才能編譯 Bitcoin Core。(#29091, #30263)

  • 執行 Bitcoin Core 所需的最低 glibc 現在為 2.31。這意味著不再支援 RHEL 8 和 Ubuntu 18.04 (Bionic)。(#29987)

  • 由於 lcov 版本 1 和 2 之間的不相容性,已移除 --enable-lcov-branch-coverage。應改用 LCOV_OPTS 設定任何選項。(#30192)

更新的設定

  • 使用 -alertnotify 執行時,現在可以多次引發警報,而不僅僅是一次。先前,僅在啟用未知的新共識規則時才會引發警報。其範圍現已擴大到包括所有核心警告。具體而言,當檢測到具有大量工作量的無效鏈時,現在也會引發警報。未來可能會新增其他警告。(#30058)

與 GUI 或錢包相關的設定變更可以在下面的 GUI 或錢包部分找到。

錢包

  • 錢包現在檢測錢包交易何時與 mempool 衝突。與 mempool 衝突的交易可以在 gettransaction"mempoolconflicts" 欄位中看到。當父交易從 mempool 中刪除時,與 mempool 衝突的交易的輸入現在可以重新花費,而無需手動放棄交易,這可能導致錢包餘額顯示更高。(#27307)

  • RPC fundrawtransactionwalletcreatefundedpsbtsend 新增了新的 max_tx_weight 選項。它指定最大交易權重。如果在資助期間超過限制,則不會建立交易。預設值為 4,000,000 WU。(#29523)

  • 新的 createwalletdescriptor RPC 允許使用者將新的自動產生的描述符新增到其錢包。這可用於升級在引入新標準描述符(例如 taproot)之前建立的錢包。(#29130)

  • 新的 RPC gethdkeys 列出錢包中所有描述符使用的所有 BIP32 HD 密鑰。這些密鑰可與 createwalletdescriptor 結合使用,為錢包已知的特定密鑰建立並新增單一密鑰描述符到錢包。(#29130)

  • sendall RPC 現在可以花費未確認的找零,並將視需要包含額外費用,以使產生的交易將未確認交易的費率提升到指定的費率。(#28979)

  • 在 RPC bumpfee 中,如果指定了 fee_rate,則費率不再限制為遵循錢包的增量費率 5 sat/vb。費率仍必須至少是原始費用和 mempool 增量費率的總和。(#27969)

GUI 變更

  • 「Migrate Wallet」選單允許使用者遷移其錢包目錄中的任何舊版錢包,無論載入的錢包為何。(gui#824)

  • 「Information」視窗現在顯示最大 mempool 大小以及 mempool 使用量。(gui#825)

低階變更

測試

  • BIP94 timewarp 攻擊緩解現在在 regtest 網路上活躍。(#30681)

  • test_bitcoin 新增了新的 -testdatadir 選項,允許指定單元測試資料目錄的位置。(#26564)

區塊儲存

  • 區塊檔案現在預設使用儲存在 blocksdir 中的密鑰進行 XOR 處理。先前版本的 Bitcoin Core 或先前的外部軟體將無法讀取具有非零 XOR 密鑰的 blocksdir。有關更多詳細資訊,請參閱 -blocksxor 說明。(#28052)

鏈狀態

  • 修剪區塊時發生的鏈狀態資料庫刷新將不再清空資料庫快取。快取將保持更長時間填充,這顯著縮短了初始區塊下載完成的時間。(#28280)

相依性

  • 對 Boost.Process 的相依性已被 cpp-subprocess 取代,後者包含在原始碼中。建置者將不再需要 Boost.Process 來建置外部簽署者支援。(#28981)

致謝

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

  • 0xb10c
  • Alfonso Roman Zubeldia
  • Andrew Toth
  • AngusP
  • Anthony Towns
  • Antoine Poinsot
  • Anton A
  • Ava Chow
  • Ayush Singh
  • Ben Westgate
  • Brandon Odiwuor
  • brunoerg
  • bstin
  • Charlie
  • Christopher Bergqvist
  • Cory Fields
  • crazeteam
  • Daniela Brozzoni
  • David Gumberg
  • dergoegge
  • Edil Medeiros
  • Epic Curious
  • Fabian Jahr
  • fanquake
  • furszy
  • glozow
  • Greg Sanders
  • hanmz
  • Hennadii Stepanov
  • Hernan Marino
  • Hodlinator
  • ishaanam
  • ismaelsadeeq
  • Jadi
  • Jon Atack
  • josibake
  • jrakibi
  • kevkevin
  • kevkevinpal
  • Konstantin Akimov
  • laanwj
  • Larry Ruane
  • Lőrinc
  • Luis Schwab
  • Luke Dashjr
  • MarcoFalke
  • marcofleon
  • Marnix
  • Martin Saposnic
  • Martin Zumsande
  • Matt Corallo
  • Matthew Zipkin
  • Matt Whitlock
  • Max Edwards
  • Michael Dietz
  • Murch
  • nanlour
  • pablomartin4btc
  • Peter Todd
  • Pieter Wuille
  • @RandyMcMillan
  • RoboSchmied
  • Roman Zeyde
  • Ryan Ofsky
  • Sebastian Falbesoner
  • Sergi Delgado Segura
  • Sjors Provoost
  • spicyzboss
  • StevenMia
  • stickies-v
  • stratospher
  • Suhas Daftuar
  • sunerok
  • tdb3
  • TheCharlatan
  • umiumi
  • Vasil Dimov
  • virtu
  • willcl-ark

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