Bitcoin Core 0.16.0

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

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

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

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

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

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

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

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

如何升級

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

第一次執行版本 0.15.0 或更新版本時,您的 chainstate 資料庫將被轉換為新格式,這將花費幾分鐘到半小時不等的時間,取決於您機器的速度。

請注意,區塊資料庫格式在版本 0.8.0 中也有變更,並且從 0.8 之前的版本升級到 0.15.0 或更高版本沒有自動升級程式碼。不支援從 0.7.x 及更早版本直接升級而不重新下載區塊鏈。然而,如往常一樣,仍然支援舊版本的錢包。

降級警告

在 0.16 及更高版本中建立的錢包與 0.16 之前的版本不相容,如果您嘗試在舊版本中使用新建立的錢包,它們將無法運作。使用舊版本建立的現有錢包不受此影響。

相容性

Bitcoin Core 在使用 Linux kernel、macOS 10.8+ 和 Windows Vista 及更新版本的作業系統上經過廣泛測試。不支援 Windows XP。

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

重要變更

錢包變更

SegWit 錢包

Bitcoin Core 0.16.0 引入了錢包和使用者介面對 segwit 的完整支援。已添加新的 -addresstype 參數,支援 legacyp2sh-segwit(預設)和 bech32 地址。它控制 getnewaddressgetaccountaddresscreatemultisigaddress 產生的地址類型。還添加了 -changetype 參數,具有相同選項,預設等於 -addresstype,以控制使用哪種找零類型。

已為 getnewaddressaddmultisigaddress RPC 添加新的 address_type 參數,以指定要生成哪種類型的地址。已為 fundrawtransaction RPC 添加 change_type 參數,以覆蓋特定交易的 -changetype 參數。

  • 透過 getnewaddress*multisig RPC 建立的所有 segwit 地址都會明確將其 redeemscript 添加到錢包檔案。這意味著在建立 segwit 地址後降級將可以運作,只要錢包檔案是最新的。
  • 錢包中的所有 segwit 金鑰都會添加隱式 redeemscript,而不會將其寫入檔案。這意味著只要您使用新軟體,舊備份的恢復將可以運作。
  • 在交易中看到已使用的所有 keypool 金鑰都會明確將其 redeemscript 添加到錢包檔案。這意味著在從包含 segwit 地址的備份恢復後降級將可以運作。

請注意,某些 RPC 尚不支援 segwit 地址。特別是,signmessage/verifymessage 不支援 segwit 地址,此時 importmulti 也不支援。將在未來版本中繼續添加對這些 RPC 中 segwit 的支援。

如果交易中的任何目的地是 P2WPKH 或 P2WSH 輸出,現在預設使用 P2WPKH 找零輸出。這樣做是為了確保在任何一種情況下找零輸出都盡可能與其他輸出無法區分。

BIP173 (Bech32) 地址支援(”bc1…” 地址)

現已添加對原生 segwit 地址(BIP173 / Bech32)的完整支援。這包括發送到 BIP173 地址(包括非 v0 地址)的能力,以及生成這些地址(包括作為預設新地址,見上文)。

已在 GUI 中添加複選框,以選擇在使用 segwit 地址時應生成 Bech32 地址還是 P2SH 包裝的地址。當使用 -addresstype=bech32 啟動時,預設會勾選。當使用 -addresstype=legacy 啟動時,它會取消勾選並停用。

預設 HD 錢包

由於錢包資料庫中的向後不相容變更,使用版本 0.16.0 建立的錢包將被先前版本拒絕。此外,版本 0.16.0 將僅建立分層確定性 (HD) 錢包。請注意,這僅適用於新錢包;使用先前版本製作的錢包不會升級為 HD。

GUI 中預設 Replace-By-Fee

發送螢幕現在預設使用 BIP125 RBF,無論 -walletrbf 如何。有一個複選框可將交易標記為最終。

RPC 預設值保持不變:要使用 RBF,請使用 -walletrbf=1 啟動或為個別交易使用 replaceable 參數。

錢包目錄設定(-walletdir

Bitcoin Core 現在在錢包目錄的位置上具有更大的靈活性。以前,錢包資料庫檔案儲存在比特幣資料目錄的頂層。現在的行為是:

  • 對於新安裝(資料目錄尚不存在),錢包現在將預設儲存在資料目錄內的新 wallets/ 子目錄中。
  • 對於現有節點(資料目錄已存在),錢包將預設儲存在資料目錄根目錄中。如果資料目錄根目錄中已存在 wallets/ 子目錄,則錢包將預設儲存在 wallets/ 子目錄中。
  • 可以透過指定 -walletdir=<path> 選項來覆蓋錢包目錄的位置,其中 <path> 可以是目錄或目錄符號連結的絕對路徑。

在選擇錢包目錄位置時應小心,因為如果在操作期間變得不可用,資金可能會丟失。

建置:最低 GCC 提升到 4.8.x

編譯 Bitcoin Core 所需的 GCC 編譯器的最低版本現在是 4.8。不會努力支援較舊版本的 GCC。Clang 編譯器的最低版本仍然是 3.3。其他最低依賴版本可以在儲存庫中的 doc/dependencies.md 中找到。

支援訊號修剪節點(BIP159)

修剪節點現在可以使用服務位訊號 BIP159 的 NODE_NETWORK_LIMITED,為以後版本中的完整 BIP159 支援做準備。這將允許修剪節點提供最新的區塊。但是,當前變更尚未包括連線到這些修剪對等節點的支援。

效能:預設啟用 SHA256 組合語言

支援 SSE4 的架構的 SHA256 雜湊最佳化(在支援的硬體上導致約 50% 的 SHA256 加速,約 5% 的更快同步和區塊驗證)現在預設啟用。在以前的版本中,它們在建置時使用 --enable-experimental-asm 標誌啟用,但現在是預設的,不再被視為實驗性。

GUI 變更

  • GUI 中使用的「µBTC」現在也顯示更通俗的術語「bits」,在 BIP176 中指定。
  • 重複使用先前地址的選項現已被移除。這曾被「重新發送」發票的需求所證明,但現在我們有了請求歷史記錄,該需求應該消失了。
  • 已添加按 TXID 搜尋的支援,而不僅僅是地址和標籤。
  • 已在發送幣對話方塊中添加「使用可用餘額」選項,以將剩餘的可用錢包餘額添加到交易輸出。
  • 已在密碼對話方塊上添加用於取消隱藏密碼欄位的切換。

RPC 變更

新的 rescanblockchain RPC

已添加新的 RPC rescanblockchain 以手動呼叫區塊鏈重新掃描。該 RPC 支援重新掃描的開始和結束高度參數,並且可以在多錢包環境中使用以在執行時重新掃描區塊鏈。

新的 savemempool RPC

已添加新的 savemempool RPC,允許隨時將當前 mempool 儲存到磁碟,以避免由於崩潰/斷電而丟失。

預設停用安全模式

安全模式現在預設停用,如果您希望使用它,必須手動啟用(使用 -disablesafemode=0)。安全模式是一項功能,如果偵測到網路的某些問題條件,會自動停用 RPC 呼叫的子集(主要與錢包和發送相關)。然而,開發人員已經認為這些檢查不夠可靠,無法自動採取行動。即使停用了安全模式,它們仍會在 getneworkinfo RPC 的 warnings 欄位中引起警告並啟動 -alertnotify 命令。

重新命名用於建立 JSON-RPC 憑證的腳本

share/rpcuser/rpcuser.py 腳本已重新命名為 share/rpcauth/rpcauth.py。此腳本可用於為 JSON-RPC 使用者建立 rpcauth 憑證。

Validateaddress 改進

validateaddress RPC 輸出已擴展了一些新欄位,並支援 segwit 地址(P2SH 和 Bech32)。具體來說:

  • 新欄位 iswitness 對於 P2WPKH 和 P2WSH 地址(”bc1…” 地址)為 True,但對於 P2SH 包裝的 segwit 地址不為 True(見下文)。
  • 現有欄位 isscript 現在也會對 P2WSH 地址報告 True。
  • 新欄位 embedded 存在於所有已知腳本且匹配可以解釋為已知地址的腳本的腳本地址中。對於 P2SH-P2WPKH 和 P2SH-P2WSH 地址尤其如此。embedded 的值包括如果直接在嵌入地址上呼叫 validateaddress 將報告的大部分資訊。
  • 對於 multisig 腳本,已添加新的 pubkeys 欄位,報告腳本中涉及的完整公鑰(如果已知)。這是現有 addresses 欄位(報告相同資訊但編碼為 P2PKH 地址)的替代品,以更有用和更少混淆的方式表示。對於非 segwit 地址,addresses 欄位仍然存在以實現向後相容性。
  • 對於所有具有已知金鑰的單金鑰地址(即使包裝在 P2SH 或 P2WSH 中),pubkey 欄位將存在。特別是,這意味著在 getnewaddress 的輸出上呼叫 validateaddress 將始終報告 pubkey,即使地址類型是 P2SH-P2WPKH。

低階變更

  • 已移除已棄用的 RPC getinfo。建議使用更具體的 RPC:getblockchaininfogetnetworkinfogetwalletinfogetmininginfo
  • 如果使用錢包中不存在的地址呼叫,錢包 RPC getreceivedbyaddress 將返回錯誤。
  • 錢包 RPC addwitnessaddress 已棄用,將在版本 0.17 中移除,請改為設定 getnewaddressaddress_type 參數,或選項 -addresstype=[bech32|p2sh-segwit]
  • dumpwallet 現在在轉儲檔案中包含錢包中的十六進位編碼腳本,importwallet 現在導入這些腳本,但可能無法正確添加對應的地址,或者可能需要手動重新掃描以查找相關交易。
  • RPC getblockchaininfo 現在包含 errors 欄位。
  • 已為 getrawtransaction RPC 添加新的 blockhash 參數,允許從特定區塊(如果已知)獲取原始交易,即使未啟用 -txindex
  • decoderawtransactionfundrawtransaction RPC 現在具有可選的 iswitness 參數,以在必要時覆蓋啟發式見證檢查。
  • walletpassphrase 逾時現在被限制為 2^30 秒。
  • 現在不推薦使用 createmultisig RPC 使用地址,並將在以後的版本中移除。應改用公鑰。
  • 區塊鏈重新掃描現在不再在整個重新掃描過程中鎖定錢包,因此現在可以同時使用其他 RPC(儘管在重新掃描完成之前,餘額/交易的結果可能不正確或不完整)。
  • logging RPC 現在已公開而不是隱藏。
  • 已為 getblockchaininfo RPC 添加 initialblockdownload 布林值,以指示節點當前是否處於 IBD 中。
  • minrelaytxfee 現在包含在 getmempoolinfo 的輸出中。

其他變更的命令列選項

  • -debuglogfile=<file> 可用於指定替代除錯日誌檔案。
  • bitcoin-cli 現在有一個 -stdinrpcpass 選項,允許從標準輸入讀取 RPC 密碼。
  • -usehd 選項已被移除。
  • bitcoin-cli 現在支援新的 -getinfo 標誌,該標誌返回類似於現已移除的 getinfo RPC 的輸出。

測試變更

  • 預設 regtest JSON-RPC 連接埠已從 18443 更改為 18443,以避免與 testnet 的預設值 18332 衝突。
  • Segwit 現在在 regtest 模式下預設始終處於活動狀態。因此,如果您升級 regtest 節點,您將需要 -reindex 或透過將 vbparams=segwit:0:999999999999 添加到您的 regtest bitcoin.conf 來使用舊規則。如果不這樣做,將導致 CheckBlockIndex() 斷言失敗,看起來像:Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)’ failed。

0.16.0 變更日誌

完整的變更日誌包含超過 400 個 PR,涵蓋區塊和交易處理、P2P 協定和網路程式碼、錢包、RPC 和其他 API、GUI、建置系統、測試和 QA、平台支援、文件、重構等方面。由於篇幅限制,請參閱原始版本說明以獲取完整清單。

致謝

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

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