Bitcoin Core 26.0

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

26.0 版本說明

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

https://bitcoincore.org/bin/bitcoin-core-26.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、macOS 11.0+ 和 Windows 7 及更新版本的作業系統上受到支援和廣泛測試。Bitcoin Core 也應該可以在大多數其他類 Unix 系統上運作,但在這些系統上的測試頻率較低。不建議在不受支援的系統上使用 Bitcoin Core。

重要變更

P2P 和網路變更

  • 新增了對 BIP324 中定義的 v2 傳輸協定的實驗性支援。預設為關閉,但使用 -v2transport 啟用時,將在每個連線的基礎上與同樣支援它的其他對等節點協商。現有的 v1 傳輸協定仍然完全支援。

  • 具有多個可達網路的節點現在將主動嘗試至少有一個到每個網路的出站連線。這改善了對 eclipse 攻擊的個別抵抗力和對分區攻擊的網路級抵抗力。使用者不再需要採取主動措施來確保連線到多個啟用的網路。(#27213)

修剪

  • 當使用 assumeutxo 與 -prune 時,如果修剪預算設定低於 1100MB(即 MIN_DISK_SPACE_FOR_BLOCK_FILES * 2),則可能會超過修剪預算。修剪預算通常在每個鏈狀態之間平均分配,除非每個鏈狀態的結果修剪預算低於 MIN_DISK_SPACE_FOR_BLOCK_FILES,在這種情況下將使用該值。(#27596)

更新的 RPC

  • 設定 -rpcserialversion=0 已被棄用,將在未來版本中移除。目前仍可透過同時新增 -deprecatedrpc=serialversion 選項來使用。(#28448)

  • hash_serialized_2 值已從 gettxoutsetinfo 中移除,因為它計算的值包含錯誤且未考慮所有資料。它被 hash_serialized_3 取代,後者提供相同的功能但提供正確計算的雜湊值。(#28685)

  • 新欄位 transport_protocol_typesession_id 已新增到 getpeerinfo RPC,以指示是否使用 v2 傳輸協定,如果是,session id 是什麼。

  • 新參數 v2transport 已新增到 addnode RPC,以指示是否嘗試與對等節點建立 v2 交易連線。

  • Miniscript 表達式現在可以在 Taproot 描述符中用於所有使用描述符的 RPC。(#27255)

  • finalizepsbt 現在能夠最終化 PSBT,其輸入花費 Miniscript 相容的 Taproot 葉。(#27255)

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

新的 RPC

  • 已新增 loadtxoutset,它允許載入由 dumptxoutset 產生的格式的 UTXO 快照。載入此快照後,其內容將被反序列化為第二個鏈狀態資料結構,然後用於同步到網路的 tip。

    同時,原始鏈狀態將在背景中完成初始區塊下載過程,最終驗證到快照所基於的區塊。

    結果是一個可用的 bitcoind 實例,可以在幾分鐘而不是幾小時內與網路 tip 保持同步。UTXO 快照通常透過第三方來源(HTTP、torrent 等)取得,這是合理的,因為它們的內容總是透過雜湊值進行檢查。

    您可以在 assumeutxo 設計文件中找到有關此過程的更多資訊 (https://github.com/bitcoin/bitcoin/blob/master/doc/design/assumeutxo.md)。

    已新增 getchainstates 以幫助監視 assumeutxo 同步過程。

  • 已新增新的 getprioritisedtransactions RPC。它返回使用者使用 prioritisetransaction 建立的所有費用增量的映射,由 txid 索引。該映射還指示每個交易是否存在於 mempool 中。(#27501)

  • 已新增新的 RPC submitpackage。它可用於提交原始十六進位交易列表到 mempool,以使用共識和 mempool 政策規則作為套件進行評估。這些政策包括 package CPFP,允許具有高費用的子交易將低於 mempool 最小費率(但不低於最小中繼費率)的父交易提升。(#27609)

    • 警告:成功提交並不意味著交易將在整個網路中傳播,因為不支援套件中繼。

    • 並非所有功能都可用。套件限制為一個子交易及其所有未確認的父交易,且沒有父交易可以花費另一個父交易的輸出。此外,不支援 package RBF。有關套件政策和限制的更多詳細資訊,請參閱 doc/policy/packages.md。

    • 此 RPC 是實驗性的。其介面可能會變更。

  • 已新增新的 RPC getaddrmaninfo,用於查看節點位址管理器中不同網路(ipv4、ipv6、onion、i2p、cjdns)的新表和已嘗試表中的位址分佈。RPC 返回所有網路的新表和已嘗試表中的位址計數以及它們的總和。(#27511)

  • 已新增新的 importmempool RPC。它載入有效的 mempool.dat 檔案並嘗試將其內容新增到 mempool。這可用於從另一個節點導入 mempool 資料,而無需修改 datadir 內容且無需重新啟動節點。(#27460)

    • 警告:導入不受信任的檔案很危險,特別是如果接管了檔案中的元資料。
    • 如果您想套用費用增量,建議使用 getprioritisedtransactionsprioritisetransaction RPC,而不是 apply_fee_delta_priority 選項,以避免對 mempool 中已優先處理的任何交易進行雙重優先處理。

更新的設定

  • bitcoindbitcoin-qt 現在將在啟動時引發錯誤,如果正在使用的 datadir 包含將被忽略的 bitcoin.conf 檔案,這可能發生在 bitcoin.conf 檔案中使用 datadir= 行時。錯誤訊息只是一個診斷,旨在防止意外錯誤設定,並且可以停用以恢復使用 datadir 的先前行為,同時忽略其中包含的 bitcoin.conf。(#27302)

  • 傳遞無效的 -debug-debugexclude-loglevel 日誌設定選項現在會引發錯誤,而不是記錄容易錯過的警告。(#27632)

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

新設定

工具和實用程式

  • libconsensus 中提供了新的 bitcoinconsensus_verify_script_with_spent_outputs 函式,可選擇接受正在驗證的交易的已花費輸出。
  • libconsensus 中提供了新的 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_TAPROOT 旗標,將使用 Taproot 花費規則驗證腳本。

錢包

  • 此版本中錢包載入已變更。先前可以載入(帶有警告)的某些包含損壞記錄的錢包可能不再載入。例如,包含損壞地址簿條目的錢包可能不再載入。如果發生這種情況,建議在先前版本的 Bitcoin Core 中載入錢包並將資料導入新錢包。也請報告問題以幫助改進軟體並使錢包載入在這些情況下更加健壯。(#24914)

  • 在不同時提供 -deprecatedrpc=create_bdb 選項的情況下,設定 descriptors=false 時,createwallet RPC 將不再建立舊版(BDB)錢包。這是因為舊版錢包將在未來版本中被棄用。(#28597)

  • gettransactionlisttransactionslistsinceblock RPC 現在為所有交易返回 abandoned 欄位。先前,「abandoned」欄位僅為已傳送的交易返回。(#25158)

  • listdescriptorsdecodepsbt 和類似的 RPC 方法現在顯示 h 而不是撇號(')來指示強化派生。當使用 private 參數時不適用,該參數與產生或導入描述符時使用的標記匹配。新建立的錢包使用 h。此變更使手動處理描述符字串更容易。例如,importdescriptors RPC 呼叫最容易使用 h 作為標記:'["desc": ".../0h/..."]'。透過此變更,listdescriptors 將使用 h,因此您可以複製貼上結果,而無需新增轉義字元或手動將 ' 切換為 ‘h’。請注意,這會變更描述符校驗和。對於舊版錢包,getaddressinfo 中的 hdkeypath 欄位不變,錢包轉儲的序列化格式也不變。(#26076)

  • getbalances RPC 現在返回 lastprocessedblock JSON 物件,其中包含錢包在計算餘額時處理的最後一個區塊雜湊值和高度。不應快取此結果,因為導入新密鑰可能會使其無效。(#26094)

  • gettransaction RPC 現在返回 lastprocessedblock JSON 物件,其中包含錢包在產生交易資訊時處理的最後一個區塊雜湊值和高度。(#26094)

  • getwalletinfo RPC 現在返回 lastprocessedblock JSON 物件,其中包含錢包在產生錢包資訊時處理的最後一個區塊雜湊值和高度。(#26094)

  • 幣選擇和交易建置現在考慮未確認的低費率祖先交易。當需要花費未確認的輸出時,錢包將新增費用,以確保新交易及其祖先將達到使用者請求的費率的挖礦分數。(#26152)

  • 對於接受 options 參數的 RPC 方法(importmultilistunspentfundrawtransactionbumpfeesendsendallwalletcreatefundedpsbtsimulaterawtransaction),現在可以將選項作為命名參數傳遞,而無需嵌套物件。(#26485)

這意味著可以進行如下呼叫:

src/bitcoin-cli -named bumpfee txid fee_rate=100

而不是

src/bitcoin-cli -named bumpfee txid options='{"fee_rate": 100}'
  • -deprecatedrpc=walletwarningfield 設定選項已移除。createwalletloadwalletrestorewalletunloadwallet RPC 不再返回「warning」字串欄位。相同的資訊透過在 v25.0 中新增的「warnings」欄位提供,該欄位返回字串的 JSON 陣列。「warning」字串欄位也在 v25.0 中被棄用。(#27757)

  • signrawtransactionwithkeysignrawtransactionwithwalletwalletprocesspsbtdescriptorprocesspsbt 呼叫現在如果其 sighashtype 參數格式錯誤,則返回更具體的 RPC_INVALID_PARAMETER 錯誤,而不是 RPC_MISC_ERROR。(#28113)

  • RPC walletprocesspsbtdescriptorprocesspsbt 返回物件現在包含欄位 hex(如果交易完整)包含適合 RPC sendrawtransaction 的序列化交易。(#28414)

  • 現在可以在描述符錢包的 Taproot 葉內使用 Miniscript。(#27255)

描述符

  • 已移除輸出描述符中混合公鑰的使用。混合公鑰是輸出描述符不支援的一種奇特的公鑰編碼(如 BIP380 中指定並記錄在 doc/descriptors.md 中)。Bitcoin Core 先前會錯誤地接受包含此類混合密鑰的描述符。(#28587)

GUI 變更

  • GUI 中的交易列表不再為「付款給自己」提供特殊類別。現在,同時具有影響錢包的輸入和輸出的交易在單獨的行上顯示為花費和接收。(gui#119)

  • 新的選單選項允許將基於儲存在 BerkeleyDB (BDB) 中的密鑰和隱含輸出腳本類型的舊版錢包遷移到使用儲存在 SQLite 中的描述符的現代錢包。(gui#738)

  • PSBT 操作對話框使用「own address」標記支付到您自己錢包的輸出。(gui#740)

  • 正在移除建立舊版錢包的能力。(gui#764)

Contrib

  • Bash 完成檔案已從 bitcoin*.bash-completion 重新命名為 bitcoin*.bash。這意味著當完成檔案放入完成目錄(使用 pkg-config --variable=completionsdir bash-completion 找到)時,可以根據調用的命令名稱自動按需載入完成檔案,而無需重新命名。(#28507)

低階變更

測試

  • 預設情況下,testnet 上現在停用非標準交易的中繼和 mempool 接受。可以透過設定 -acceptnonstdtxn=1 重新啟用先前的行為。(#28354)

致謝

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

  • 0xb10c
  • Amiti Uttarwar
  • Andrew Chow
  • Andrew Toth
  • Anthony Towns
  • Antoine Poinsot
  • Antoine Riard
  • Ari
  • Aurèle Oulès
  • Ayush Singh
  • Ben Woosley
  • Brandon Odiwuor
  • Brotcrunsher
  • brunoerg
  • Bufo
  • Carl Dong
  • Casey Carter
  • Cory Fields
  • David Álvarez Rosa
  • dergoegge
  • dhruv
  • dimitaracev
  • Erik Arvstedt
  • Erik McKelvey
  • Fabian Jahr
  • furszy
  • glozow
  • Greg Sanders
  • Harris
  • Hennadii Stepanov
  • Hernan Marino
  • ishaanam
  • ismaelsadeeq
  • Jake Rawsthorne
  • James O’Beirne
  • John Moffett
  • Jon Atack
  • josibake
  • kevkevin
  • Kiminuo
  • Larry Ruane
  • Luke Dashjr
  • MarcoFalke
  • Marnix
  • Martin Leitner-Ankerl
  • Martin Zumsande
  • Matthew Zipkin
  • Michael Ford
  • Michael Tidwell
  • mruddy
  • Murch
  • ns-xvrn
  • pablomartin4btc
  • Pieter Wuille
  • Reese Russell
  • Rhythm Garg
  • Ryan Ofsky
  • Sebastian Falbesoner
  • Sjors Provoost
  • stickies-v
  • stratospher
  • Suhas Daftuar
  • TheCharlatan
  • Tim Neubauer
  • Tim Ruffing
  • Vasil Dimov
  • virtu
  • vuittont60
  • willcl-ark
  • Yusuf Sahin HAMZA

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