Bitcoin Core 24.0.1

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

24.0.1 版本說明

由於最後關頭的問題 (#26616),24.0 版本雖然已標記,但從未完全公告或發布。

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

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

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

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

交易替換政策新選項公告

此版本的 Bitcoin Core 新增了一個新的 mempoolfullrbf 設定選項,允許使用者變更其個別節點用於中繼和挖礦未確認交易的政策。該選項預設為先前版本中使用的相同政策,如果每個人都使用預設值,則節點政策不會發生變更。

目前某些 Bitcoin 服務期望它們看到的未確認交易的第一個版本將是最終被確認的版本 ─ 這種交易接受政策有時被稱為「first-seen」。

Bitcoin 協定不會且無法保證特定節點看到的未確認交易的第一個版本將是被確認的版本。如果同一未確認交易有多個版本可用,只有在區塊中包含這些交易之一的礦工才能決定哪個版本的交易被確認。

儘管缺乏這種保證,今天仍有多個商家和服務做出這種假設。

移除這種 first-seen 簡化對使用者有幾個好處。一個關鍵好處是,交易的發送者能夠用支付更高費用的替代版本替換它,這在 Bitcoin Core 0.12.0(2016 年 2 月)中透過引入 BIP125 選擇加入的手續費替換 (RBF) 實現了。

從那時起,一直有關於完全移除 first-seen 簡化並允許使用者用較新的交易替換任何較舊的未確認交易的討論,這一功能被稱為 full-RBF。此版本包含一個 mempoolfullrbf 設定選項,允許啟用 full-RBF,但預設為關閉(僅允許選擇加入的 RBF)。

多個替代節點實作已經預設啟用 full-RBF 多年,並且有幾位 Bitcoin Core 貢獻者正在倡導在未來版本的 Bitcoin Core 中預設啟用 full-RBF。

隨著越來越多參與中繼和挖礦的節點開始啟用 full-RBF,用提供更高費用的交易替換未確認交易可能會迅速變得更加可靠。

該專案的貢獻者強烈建議商家和服務不要接受未確認的交易作為最終交易,如果他們堅持這樣做,則應採取適當步驟以確保在他們的假設不成立時有一些追索權或計畫。

重要變更

P2P 和網路變更

  • 為了解決潛在的阻斷服務攻擊,從對等節點下載區塊標頭的邏輯已經重新設計。這對於首次啟動的節點(或長時間離線後啟動的節點)特別相關。

    每當從對等節點收到的區塊標頭的總鏈上工作量小於節點的 -minimumchainwork 值,或明顯低於節點頂端的工作量時,將開始「presync」階段,在此階段中,節點將下載對等節點的區塊標頭並驗證對等節點鏈上的累積工作量,然後才永久儲存這些區塊標頭。一旦該累積工作量被驗證為足夠高,將從該對等節點重新下載區塊標頭並完全驗證和儲存。

    這可能導致新節點首次啟動時的初始區塊標頭同步時間更長,這是因為區塊標頭將被下載兩次,而且對等節點在 presync 階段(或當節點的最佳區塊標頭鏈的工作量少於 -minimumchainwork 時)斷開連線的影響將導致節點也需要對下一個對等節點使用區塊標頭 presync 機制(再次下載區塊標頭兩次)。(#25717)

  • 對於 I2P 連線,如果 -i2pacceptincoming=0,則每個對外連線都會使用一個新的臨時地址。(#25355)

更新的 RPC

  • 已移除 -deprecatedrpc=softforks 設定選項。RPC getblockchaininfo 不再返回 softforks 欄位,該欄位先前在 23.0 中已被棄用。(#23508) 現在只能透過 getdeploymentinfo RPC 獲取軟分叉狀態資訊。

  • 已移除 deprecatedrpc=exclude_coinbase 設定選項。receivedby RPC(listreceivedbyaddresslistreceivedbylabelgetreceivedbyaddressgetreceivedbylabel)現在始終返回考慮從 coinbase 輸出收到的幣的結果,沒有改變該行為的選項。排除 coinbase 先前在 23.0 中已被棄用。(#25171)

  • 已移除 deprecatedrpc=fees 設定選項。頂層費用欄位 feemodifiedfeeancestorfeesdescendantfees 不再由 RPC getmempoolentrygetrawmempool(verbose=true)getmempoolancestors(verbose=true)getmempooldescendants(verbose=true) 返回。相同的費用欄位可以透過結果中的 fees 物件存取。頂層費用欄位先前在 23.0 中已被棄用。(#25204)

  • getpeerinfo RPC 已更新,新增了一個 presynced_headers 欄位,指示上面「P2P 和網路變更」部分中提到的 presync 階段的進度。

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

新的 RPC

  • sendall RPC 將特定的 UTXO 花費給一個或多個接收者,而不建立找零。預設情況下,sendall RPC 將花費錢包中的每個 UTXO。sendall 可用於清空錢包或從選定的 UTXO 建立無找零的支付。當從特定金額建立支付且接收者承擔交易費用時,請繼續透過 sendsendtoaddresssendmany RPC 使用 subtractfeefromamount 選項。(#24118)

  • 已新增一個新的 gettxspendingprevout RPC,它會掃描 mempool 以尋找花費任何給定 outpoint 的交易。(#24408)

  • simulaterawtransaction RPC 會迭代給定交易的輸入和輸出,並統計給定錢包的餘額變化。例如,這可用於在驗證類似 coin join 的交易不包含錢包隨後會無意中簽署的意外輸入時。(#22751)

更新的 REST API

  • /headers//blockfilterheaders/ 端點已更新為使用查詢參數而不是路徑參數來指定結果計數。計數參數現在是可選的,兩個端點的預設值均為 5。舊端點仍然可用,並且沒有記錄的行為變更。

    對於 /headers,使用 GET /rest/headers/<BLOCK-HASH>.<bin|hex|json>?count=<COUNT=5> 而不是 GET /rest/headers/<COUNT>/<BLOCK-HASH>.<bin|hex|json> (已棄用)

    對於 /blockfilterheaders/,使用 GET /rest/blockfilterheaders/<FILTERTYPE>/<BLOCK-HASH>.<bin|hex|json>?count=<COUNT=5> 而不是 GET /rest/blockfilterheaders/<FILTERTYPE>/<COUNT>/<BLOCK-HASH>.<bin|hex|json> (已棄用)

    (#24098)

建置系統

  • Guix 建置現在可以跨架構(x86_64 和 aarch64)重現。(#21194)

新設定

  • 已新增一個新的 mempoolfullrbf 選項,它允許 mempool 接受交易替換而不強制執行 BIP125 可替換性訊號。(#25353)

錢包

  • -walletrbf 啟動選項現在預設為 true。錢包現在預設在它建立的交易上選擇加入 RBF。(#25610)

  • createrawtransactioncreatepsbt RPC 的 replaceable 選項現在預設為 true。使用這些 RPC 建立的交易將預設啟用選擇加入的 RBF。(#25610)

  • wsh() 輸出描述符已擴充支援 Miniscript。您可以在僅觀察錢包中匯入 P2WSH 的 Miniscript 描述符以追蹤幣,但您還不能使用 Bitcoin Core 錢包從它們花費。 您可以在參考網站上找到更多關於 Miniscript 的資訊。(#24148)

  • tr() 輸出描述符現在透過 multi_a()sortedmulti_a() 函數支援多重簽名腳本。(#24043)

  • 為了幫助防止對 Bitcoin Core 錢包建立的交易進行指紋識別,找零輸出金額現在已隨機化。(#24494)

  • listtransactionsgettransactionlistsinceblock RPC 方法現在為每個交易包含一個 wtxid 欄位(序列化交易的雜湊,包括見證資料)。(#24198)

  • listsinceblocklisttransactionsgettransaction 輸出現在為每個「receive」條目包含一個新的 parent_descs 欄位。(#25504)

  • 已為 listsinceblock 命令新增一個新的可選 include_change 參數。

  • RPC getreceivedbylabel 現在如果標籤不在地址簿中,則返回錯誤「Label not found in wallet」(-4)。(#25122)

將傳統錢包遷移到描述符錢包

已新增一個實驗性的 RPC migratewallet,用於將傳統(非描述符)錢包遷移到描述符錢包。有關遷移流程的更多資訊可以在文件中找到。

GUI 變更

  • 已新增一個新的選單項目,用於從備份檔案復原錢包 (gui#471)。

  • 在 bitcoin GUI 中進行的設定變更(例如修剪設定、代理設定、UPNP 偏好設定)現在儲存到 <datadir>/settings.json 檔案,而不是 Qt 設定後端(Windows 登錄檔或 Unix 桌面設定檔),因此這些設定現在將應用於 bitcoind,而不是被忽略。(#15936, gui#602)

  • 此外,GUI 設定和 bitcoin.conf 設定之間的互動已簡化。來自 bitcoin.conf 的設定現在在 GUI 設定對話框中正常顯示,而不是在單獨的警告訊息中(「在此對話框中設定的選項被設定檔覆蓋:-setting=value」)。並且這些設定現在可以編輯,因為 settings.json 值優先於 bitcoin.conf 值。(#15936)

低階變更

RPC

  • deriveaddressesgetdescriptorinfoimportdescriptorsscantxoutset 命令現在接受 wsh() 描述符中的 Miniscript 表達式。(#24148)

  • getaddressinfodecodescriptlistdescriptorslistunspent 命令現在可能會在 wsh() 中輸出 Miniscript 描述符,而先前返回的是 wsh(raw()) 描述符。(#24148)

致謝

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

  • /dev/fd0
  • 0xb10c
  • Adam Jonas
  • akankshakashyap
  • Ali Sherief
  • amadeuszpawlik
  • Andreas Kouloumos
  • Andrew Chow
  • Anthony Towns
  • Antoine Poinsot
  • Antoine Riard
  • Aurèle Oulès
  • avirgovi
  • Ayush Sharma
  • Baas
  • Ben Woosley
  • BrokenProgrammer
  • brunoerg
  • brydinh
  • Bushstar
  • Calvin Kim
  • CAnon
  • Carl Dong
  • chinggg
  • Cory Fields
  • Daniel Kraft
  • Daniela Brozzoni
  • darosior
  • Dave Scotese
  • David Bakin
  • dergoegge
  • dhruv
  • Dimitri
  • dontbyte
  • Duncan Dean
  • eugene
  • Eunoia
  • Fabian Jahr
  • furszy
  • Gleb Naumenko
  • glozow
  • Greg Weber
  • Gregory Sanders
  • gruve-p
  • Hennadii Stepanov
  • hiago
  • Igor Bubelov
  • ishaanam
  • Jacob P.
  • Jadi
  • James O’Beirne
  • Janna
  • Jarol Rodriguez
  • Jeremy Rand
  • Jeremy Rubin
  • jessebarton
  • João Barbosa
  • John Newbery
  • Jon Atack
  • Josiah Baker
  • Karl-Johan Alm
  • KevinMusgrave
  • Kiminuo
  • klementtan
  • Kolby Moroz
  • kouloumos
  • Kristaps Kaupe
  • Larry Ruane
  • Luke Dashjr
  • MarcoFalke
  • Marnix
  • Martin Leitner-Ankerl
  • Martin Zumsande
  • Michael Dietz
  • Michael Folkson
  • Michael Ford
  • Murch
  • mutatrum
  • muxator
  • Oskar Mendel
  • Pablo Greco
  • pasta
  • Patrick Strateman
  • Pavol Rusnak
  • Peter Bushnell
  • phyBrackets
  • Pieter Wuille
  • practicalswift
  • randymcmillan
  • Robert Spigler
  • Russell Yanofsky
  • S3RK
  • Samer Afach
  • Sebastian Falbesoner
  • Seibart Nedor
  • Shashwat
  • Sjors Provoost
  • Smlep
  • sogoagain
  • Stacie
  • Stéphan Vuylsteke
  • Suhail Saqan
  • Suhas Daftuar
  • t-bast
  • TakeshiMusgrave
  • Vasil Dimov
  • W. J. van der Laan
  • w0xlt
  • whiteh0rse
  • willcl-ark
  • William Casarin
  • Yancy Ribbens

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