Bitcoin Core 0.19.0.1

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

0.19.0.1 版本說明

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

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

Download torrent

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

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

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

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

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

如何升級

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

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

相容性

Bitcoin Core 在使用 Linux kernel、macOS 10.10+ 和 Windows 7 及更新版本的作業系統上受到支援和廣泛測試。不建議在不受支援的系統上使用 Bitcoin Core。

Bitcoin Core 也應該可以在大多數其他類 Unix 系統上運作,但在這些系統上的測試頻率較低。

從 0.17.0 開始,macOS <10.10 不再受支援。0.17.0 使用 Qt 5.9.x 建置,該版本不支援 macOS 10.10 之前的版本。此外,當 macOS「深色模式」啟動時,Bitcoin Core 尚未變更外觀。

執行 macOS Catalina 的使用者可能需要「右鍵點擊」然後選擇「打開」來打開 Bitcoin Core .dmg。這是由於 Apple 實施的新簽名要求,Bitcoin Core 專案尚未遵守。

重要變更

新的使用者文件

新的 RPC

  • getbalances 返回一個包含所有餘額(mineuntrusted_pendingimmature)的物件。請參閱 getbalances 的 RPC 說明以獲取詳細資訊。新的 RPC 旨在替換 getbalancegetunconfirmedbalancegetwalletinfo 中的餘額欄位。這些舊呼叫和欄位可能會在未來版本中移除。(#15930, #16239)

  • setwalletflag 設定和取消設定錢包標誌,這些標誌啟用或停用特定於該現有錢包的功能,例如這些版本說明中其他地方記錄的新 avoid_reuse 功能。(#13756)

  • getblockfilter 獲取指定區塊的 BIP158 過濾器。只有在使用 -blockfilterindex 設定選項建立區塊過濾器時,此 RPC 才啟用。(#14121)

新設定

  • -blockfilterindex 啟用為整個區塊鏈建立 BIP158 區塊過濾器。過濾器將在背景建立,目前使用約 4 GiB 的空間。請注意:此版本的 Bitcoin Core 不透過 P2P 網路提供區塊過濾器,儘管本地使用者可以使用 getblockfilter RPC 獲取區塊過濾器。(#14121)

更新的設定

  • whitebindwhitelist 現在接受權限清單,以提供使用指示介面或 IP 地址連線的對等節點。如果未使用地址或 CIDR 網路指定權限,則隱含的預設權限與先前版本相同。請參閱這兩個選項的 bitcoind -help 輸出以獲取有關可用權限的詳細資訊。(#16248)

  • 設定自訂 dbcache 值的使用者可以稍微增加其設定而不使用更多實際記憶體。最近的變更將記憶體使用減少了約 9%,並使鏈狀態計算更準確(以前低估了記憶體使用)。例如,如果您之前設定了「450」的值,您現在可以設定「500」的值以使用大約相同的實際記憶體量。(#16957)

更新的 RPC

注意:一些主要用於測試的低階 RPC 變更在下面的低階變更部分中描述。

  • sendmany 不再有 minconf 參數。此參數沒有很好地指定,即使錢包的幣選擇成功,也會導致 RPC 錯誤。想要影響幣選擇的使用者可以使用現有的 -spendzeroconfchange-limitancestorcount-limitdescendantcount-walletrejectlongchains 設定參數。(#15596)

  • getbalancesendtoaddress,以及新的 RPC getbalancescreatewallet,現在接受一個「avoid_reuse」參數,該參數控制操作中是否應包含已使用的地址。此外,當啟用 avoid_reuse 時,即使尚未透過 -avoidpartialspends 命令列標誌啟用此功能,sendtoaddress 也將避免部分花費,因為不這樣做會冒著為地址重用情況使用「錯誤」UTXO 的風險。(#13756)

  • 具有 include_watchonly 參數或 includeWatching 選項的 RPC 現在對僅觀察錢包預設為 true。受影響的 RPC 包括:getbalancelistreceivedbyaddresslistreceivedbylabellisttransactionslistsinceblockgettransactionwalletcreatefundedpsbtfundrawtransaction。(#16383)

  • listunspent 現在為每個輸出返回一個「reused」布林值,如果啟用了錢包標誌「avoid_reuse」。(#13756)

  • getblockstats 現在使用 BlockUndo 資料而不是交易索引,使其速度更快,不再依賴於 -txindex 設定選項,並且對所有未修剪的區塊都有效。(#14802)

  • utxoupdatepsbt 現在接受一個 descriptors 參數,該參數將在已知時填充輸入和輸出腳本和金鑰。當提供描述符顯示它們正在花費 segwit 輸出時,P2SH-witness 輸入將從 UTXO 集中填充。請參閱 RPC 說明文字以獲取完整詳細資訊。(#15427)

  • sendrawtransactiontestmempoolaccept 不再接受 allowhighfees 參數來在交易費用超過設定選項 -maxtxfee 的值時失敗 mempool 接受。現在有一個硬編碼的預設最大費率,可以在使用 maxfeerate 參數呼叫任一 RPC 時變更。(#15620)

  • getmempoolancestorsgetmempooldescendantsgetmempoolentrygetrawmempool 不再返回 size 欄位,除非使用設定選項 -deprecatedrpc=size。相反,將返回一個新的 vsize 欄位,其中包含交易的虛擬大小(與其他 RPC(如 getrawtransaction)一致)。(#15637)

  • getwalletinfo 現在包括一個 scanning 欄位,該欄位為 false(無掃描)或一個物件,其中包含有關錢包掃描影響其餘額的歷史區塊的持續時間和進度的資訊。(#15730)

  • gettransaction 現在接受第三個(布林)參數 verbose。如果設定為 true,將在回應中新增一個新的 decoded 欄位,其中包含解碼的交易。此欄位相當於 RPC decoderawtransaction,或當傳遞 verbose 時的 RPC getrawtransaction。(#16185, #16866, #16873)

  • createwallet 接受一個新的 passphrase 參數。如果設定,這將建立使用給定密碼加密的新錢包。如果未設定(預設)或設定為空字串,將不使用加密。(#16394)

  • getchaintxstats RPC 現在返回 window_final_block_height 的額外金鑰。(#16695)

  • getmempoolentry 現在提供一個 weight 欄位,包含 BIP141 中定義的交易權重。(#16647)

  • getnetworkinfogetpeerinfo 命令現在包含一個新欄位,其中包含解碼的網路服務標誌。(#16786)

  • getdescriptorinfo 現在返回一個額外的 checksum 欄位,其中包含使用者提供的未修改描述符的校驗和(即,在 descriptor 欄位的描述符規範化之前)。(#15986)

  • joinpsbts 現在打亂結果合併 PSBT 的輸入和輸出順序。以前,輸入和輸出按照提供 PSBT 的順序新增。這使得將輸入與輸出關聯變得容易,代表隱私洩漏。(#16512)

  • walletcreatefundedpsbt 現在在 -walletrbf 設定選項設定為 true 時發出 BIP125 Replace-by-Fee 訊號。(#15911)

GUI 變更

  • GUI 錢包現在預設提供 bech32 地址。使用者可以在發票生成期間使用 GUI 切換變更地址類型,或可以使用 -addresstype 設定選項變更預設地址類型。(#15711, #16497)

  • 在 0.18.0 中,引入了一個 ./configure 標誌以允許在 GUI 中停用 BIP70 支援(預設啟用支援)。在 0.19.0 中,此標誌現在預設__停用__。如果您想使用 GUI 中的 BIP70 支援編譯 Bitcoin Core,您可以將 --enable-bip70 傳遞給 ./configure。(#15584)

已棄用或移除的設定選項

  • -mempoolreplacement 已移除,儘管預設節點行為保持不變。此選項以前允許使用者阻止節點接受或中繼 BIP125 交易替換。這與剩餘的設定選項 -walletrbf 不同。(#16171)

已棄用或移除的 RPC

  • bumpfee 不再接受 totalFee 選項,除非指定設定參數 deprecatedrpc=totalFee。此參數將在後續版本中完全移除。(#15996)

  • bumpfee 有一個新的 fee_rate 選項,作為已棄用的 totalFee 的替代。(#16727)

  • generate 在 Bitcoin Core 0.18 中被棄用後現已移除。請改用 generatetoaddress RPC。(#15492)

P2P 變更

  • BIP 61 拒絕訊息在 v0.18 中已棄用。它們現在預設停用,但可以透過設定 -enablebip61 命令列選項來啟用。BIP 61 拒絕訊息將在未來版本的 Bitcoin Core 中完全移除。(#14054)

  • 為了消除 Bitcoin Core 中眾所周知的拒絕服務向量,特別是對於具有旋轉磁碟的節點,-peerbloomfilters 設定選項的預設值已變更為 false。這阻止 Bitcoin Core 發送 BIP111 NODE_BLOOM 服務標誌,接受 BIP37 bloom 過濾器,或提供與 bloom 過濾器匹配的 merkle 區塊或交易。仍然想要提供 bloom 過濾器支援的使用者可以將設定選項設定為 true 以重新啟用 BIP111 和 BIP37 支援,或使用這些版本說明中其他地方描述的更新的 -whitelist-whitebind 設定選項僅為特定對等節點啟用 BIP37 支援。在不久的將來,使用公共 BIP111/BIP37 節點的輕量級客戶端應該仍然能夠連線到舊版本的 Bitcoin Core 和手動啟用 BIP37 支援的節點,但此類軟體的開發人員應考慮遷移到使用特定的 BIP37 節點或替代交易過濾系統。(#16152)

  • 預設情況下,Bitcoin Core 現在將進行兩個額外的僅用於區塊中繼的出站連線。這些連線上不會處理交易或 addr 訊息。這些連線旨在新增很少的額外記憶體或頻寬資源需求,但應該使某些分區攻擊更難以執行。(#15759)

其他 CLI 變更

  • bitcoin-cli -getinfo 中的 testnet 欄位已重新命名為 chain,現在返回 BIP70 中定義的當前網路名稱(main、test、regtest)。(#15566)

低階變更

RPC

  • getblockchaininfo 不再返回 bip9_softforks 物件。相反,資訊已移至 softforks 物件,並新增了一個 type 欄位,描述 Bitcoin Core 如何確定該軟分叉是否處於活動狀態(例如 BIP9 或 BIP90)。請參閱 RPC 說明以獲取詳細資訊。(#16060)

  • getblocktemplate 不再返回包含 CSVsegwit(目前處於活動狀態的 BIP9 部署)的 rules 陣列。(#16060)

  • getrpcinfo 現在返回一個 logpath 欄位,其中包含 debug.log 的路徑。(#15483)

測試

  • 透過 -regtest 命令列標誌啟用的回歸測試鏈現在要求交易預設不違反標準政策。這與主網使用的預設設定相同,並且使在 regtest 上測試主網行為變得更容易。請注意,測試網仍然預設允許非標準交易,並且可以使用 -acceptnonstdtxn 命令列標誌為兩個測試鏈本地調整政策。(#15891)

設定

  • 在預設部分中指定但也未在網路特定部分(例如 testnet)中指定的設定現在將產生錯誤,阻止啟動而不僅僅是警告,除非網路是主網。這阻止了針對主網的設定被應用於測試網或 regtest。(#15629)

  • 在支援 thread_local 的平台上,日誌行可以以導致日誌的執行緒名稱為前綴。要啟用此行為,請使用 -logthreadnames=1。(#15849)

網路

  • 當獲取由多個對等節點公告的交易時,以前版本的 Bitcoin Core 會按照收到這些對等節點公告的順序依次嘗試從每個公告對等節點下載交易,直到收到交易。在此版本中,下載邏輯已變更為在對等節點之間隨機化獲取順序,並優先向出站對等節點而不是入站對等節點發送下載請求。這修復了入站對等節點可以阻止節點獲取交易的問題。(#14897, #15834)

  • 如果正在使用 Tor 隱藏服務,即使為 clearnet 連線設定了不同的連接埠,Bitcoin Core 也將綁定到標準連接埠 8333。這防止了透過使用相同的非預設連接埠號碼洩漏節點身份。(#15651)

Mempool 和交易中繼

  • 每個套件允許一個額外的單一祖先交易。以前,如果 mempool 中的交易有 25 個後代,或者它和它的所有後代超過 101,000 vbytes,則任何新收到的也是後代的交易都會被忽略。現在,如果它是直接後代(子代)並且子代的大小為 10,000 vbytes 或更少,則將允許一個額外的後代。這使得雙方合約協定(如 Lightning Network)可以為每個參與者提供一個他們可以立即花費以進行 Child-Pays-For-Parent (CPFP) 費用提升的輸出,而不允許一個惡意參與者填滿整個套件,從而阻止另一個參與者花費他們的輸出。(#15681)

  • 支付 v1 到 v16 見證版本(未來 segwit 版本)輸出的交易現在被接受到 mempool 中,中繼並挖礦。嘗試花費這些輸出仍然被政策禁止(「非標準」)。當此變更被廣泛部署時,錢包和服務可以接受任何有效的 bech32 Bitcoin 地址,而不必擔心支付未來 segwit 版本的交易會卡在未確認狀態。(#15846)

  • 舊式交易(沒有 segwit 輸入的交易)現在必須使用舊式編碼格式發送,強制執行 BIP144 中指定的規則。(#14039)

錢包

  • 在修剪模式下,由 importwalletimportpubkeyimportaddressimportprivkey RPC 觸發的重新掃描只有在區塊已被修剪時才會失敗。以前,當設定了 -prune 時它會失敗。此變更允許將 -prune 設定為高值(例如磁碟大小),而不會導致對任何匯入 RPC 的呼叫失敗,直到第一個區塊被修剪。(#15870)

  • 當建立費用高於 -maxtxfee(預設 0.1 BTC)的交易時,RPC 命令 walletcreatefundedpsbtfundrawtransaction 現在將失敗而不是向下舍入費用。請注意,feeRate 參數以 BTC per 1,000 vbytes 指定,而不是 satoshi per vbyte。(#16257)

  • 已新增一個新的錢包標誌 avoid_reuse(預設關閉)。啟用時,錢包將區分已使用和未使用的地址,並預設在幣選擇中不使用前者。在現有錢包上設定此標誌時,需要重新掃描區塊鏈以正確標記以前使用的目標。與「避免部分花費」(在 Bitcoin Core v0.17.0 中新增)一起,這可以消除嚴重的隱私問題,即惡意使用者可以透過向先前支付的地址發送小額支付來追蹤花費,然後這些小額支付將包含在未來支付中的不相關輸入中。(#13756)

建置系統變更

  • Python >=3.5 現在是專案所有方面所必需的。這包括建置系統、測試框架和 linter。先前支援的最低版本 (3.4) 在 2019 年 3 月達到 EOL。(#14954)

  • 支援的最低 miniUPnPc API 版本設定為 10。這保持了與 Ubuntu 16.04 LTS 和 Debian 8 libminiupnpc-dev 套件的相容性。請注意,在 Debian 上,此套件仍然容易受到 CVE-2017-8798(僅在 jessie 中)和 CVE-2017-1000494(在 jessie 和 stretch 中)的影響。(#15993)

致謝

感謝所有直接為此版本做出貢獻的人,總計超過 100 位貢獻者。完整清單請參閱原始版本說明。

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