Bitcoin Core 0.17.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.17.0 版本現已發布,可從以下位置下載:

https://bitcoincore.org/bin/bitcoin-core-0.17.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 上)。

如果您的節點有 txindex,第一次執行 0.17.0 或更新版本時,txindex 資料庫將被遷移,這可能需要幾個小時。在此遷移完成之前,您的節點將無法運作。

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

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

降級警告

此版本的 chainstate 資料庫與先前版本不相容,因此如果您執行 0.15 然後決定切換回任何較舊版本,您將需要使用 -reindex-chainstate 選項執行舊版本,以舊格式重建 chainstate 資料結構。

如果您的節點已啟用修剪,這將需要重新下載和處理整個區塊鏈。

相容性

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

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

從 0.17.0 開始,不再支援 macOS 10.10 之前的版本。0.17.0 使用 Qt 5.9.x 建置,該版本不支援 macOS 10.10 之前的版本。

已知錯誤

  • 從 0.13.0 或更早版本升級目前會導致在回滾區塊到 SegWit 啟動點時記憶體耗盡。在這些情況下,需要完整的 -reindex

  • GUI 在新的 MacOS 深色模式中存在視覺故障。這與我們的 Qt 主題處理有關,不是 0.17.0 中的新問題,但預計將在 0.17.1 中解決。

重要變更

變更的設定選項

-includeconf=<file> 可用於包含額外的設定檔。僅在 bitcoin.conf 檔案內有效,在包含的檔案內或從命令列無效。可以包含多個檔案。可以透過 -noincludeconf 從命令列停用。

GUI 變更

在偏好設定的主標籤中可以限制區塊儲存。撤消此設定需要再次下載完整的區塊鏈。此模式與 -txindex-rescan 不相容。

外部錢包檔案

-wallet=<path> 選項現在接受完整路徑,而不是要求錢包位於 -walletdir 目錄中。

新建立的錢包格式

如果使用不存在的路徑指定 -wallet=<path>,它現在將在指定位置建立錢包目錄(包含 wallet.dat 資料檔案、db.log 檔案和 database/log.?????????? 檔案),而不是僅在該路徑建立資料檔案並將日誌檔案儲存在父目錄中。這應該使備份錢包比以前更直接,因為可以直接歸檔指定的錢包路徑,而無需在父目錄中尋找交易日誌檔案。

為了向後相容,作為 -walletdir 目錄中現有資料檔案名稱的錢包路徑將繼續被接受並以與以前相同的方式解釋。

動態載入和建立錢包

以前,錢包只能在啟動時載入或建立,透過在命令列或 bitcoin.conf 檔案中指定 -wallet 參數。現在可以在執行時動態載入、建立和卸載錢包:

  • 現有錢包可以透過呼叫 loadwallet RPC 載入。錢包可以指定為檔案/目錄基本名稱(必須位於 walletdir 目錄中),或作為檔案/目錄的絕對路徑。
  • 新錢包可以透過呼叫 createwallet RPC 建立(並載入)。提供的名稱不得與 walletdir 目錄中的錢包檔案匹配或當前載入的錢包名稱。
  • 已載入的錢包可以透過呼叫 unloadwallet RPC 卸載。

此功能目前僅透過 RPC 介面提供。

幣選擇

部分支出避免

當一個地址被多次付款時,來自這些單獨付款的幣可以分別花費,這會由於連結原本分開的地址而損害隱私。已添加新的 -avoidpartialspends 標誌(預設=false)。如果啟用,即使導致更高的費用,錢包也會始終一起花費發送到同一地址的現有 UTXO。如果有人在使用後向地址發送幣,這些幣仍將包含在未來的幣選擇中。

testnet 和 regtest 的設定區段

現在可以為單個設定檔設定不同網路的不同選項。這是透過使用區段或透過在選項前加上網路來完成的。

錢包的 ‘label’ 和 ‘account’ API

已為錢包引入新的 ‘label’ API。這旨在取代已棄用的 ‘account’ API。可以在 V0.17 中透過使用 ‘-deprecatedrpc=accounts’ 參數啟動 bitcoind 繼續使用 ‘account’,並將在 V0.18 中完全移除。

標籤 RPC 方法反映了帳戶功能,具有以下功能差異:

  • 標籤可以設定在任何地址上,而不僅僅是接收地址。此功能以前僅透過 GUI 可用。
  • 標籤可以透過使用 setlabel RPC 方法重新分配所有地址來刪除。
  • 不支援_從_標籤發送交易,或確定交易是從哪個標籤發送的。
  • 標籤沒有餘額。

BIP 174 部分簽名比特幣交易支援

BIP 174 PSBT 是比特幣交易的交換格式,這些交易尚未完全簽名,連同相關的中繼資料,以幫助實體合作簽署它。它旨在簡化多方需要合作生成交易的工作流程。範例包括硬體錢包、multisig 設定和 CoinJoin 交易。

RPC

  • converttopsbt (Creator) 是一個實用程式 RPC,將未簽名的原始交易轉換為 PSBT 格式。它會忽略現有簽名。
  • createpsbt (Creator) 是一個實用程式 RPC,接受輸入和輸出列表並將它們轉換為沒有額外資訊的 PSBT。
  • walletcreatefundedpsbt (Creator, Updater) 是一個錢包 RPC,使用指定的輸入和輸出建立 PSBT,向其添加額外的輸入和找零以平衡它,並添加相關的中繼資料。
  • walletprocesspsbt (Updater, Signer, Finalizer) 是一個錢包 RPC,接受 PSBT 作為輸入,向缺少的輸入和輸出添加 UTXO、金鑰和腳本資料,並選擇性地簽署輸入。在可能的情況下,它還會最終確定部分簽名。
  • finalizepsbt (Finalizer, Extractor) 是一個實用程式 RPC,最終確定任何部分簽名,如果所有輸入都已最終確定,則將結果轉換為可以使用 sendrawtransaction 廣播的完全簽名交易。
  • combinepsbt (Combiner) 是一個實用程式 RPC,實作組合器。它可以在工作流程的任何時間點使用,以合併添加到同一 PSBT 的不同版本的資訊。
  • decodepsbt 是一個診斷實用程式 RPC,它將以人類可讀的形式顯示 PSBT 中的所有資訊,以及如果已知,則計算其最終費用。

將非 HD 錢包升級到 HD 錢包

自 Bitcoin Core 0.13.0 以來,Bitcoin Core 已支援建立新的 BIP 32 分層確定性錢包,但舊的非 HD 錢包無法升級到 HD。現在可以使用 -upgradewallet 命令列選項將非 HD 錢包升級到 HD。此升級將導致金鑰池中的所有金鑰被標記為已使用並生成新的金鑰池。執行此升級時必須建立新備份。

HD 主金鑰輪換

已引入新的 RPC sethdseed,允許使用者設定新的 HD 種子或設定自己的 HD 種子。這允許使用新的 HD 種子。設定新 HD 種子時必須建立新備份。

低階 RPC 變更

  • 新的 RPC scantxoutset 可用於掃描 UTXO 集以查找與某些輸出描述符匹配的條目。此呼叫類似於 listunspent,但不使用錢包,這意味著可以在編譯或執行時停用錢包。此呼叫是實驗性的,可能會在未來版本中更改或移除。

  • createrawtransaction RPC 現在將接受 outputs 參數的陣列或字典。這意味著客戶端可以指定交易輸出的順序。

  • 新的 RPC testmempoolaccept 可用於測試交易對 mempool 的接受而不添加它。

  • JSON 交易分解現在包括 weight 欄位,該欄位提供交易的精確權重。

  • 當 bitcoin 未使用任何 -wallet=<path> 選項啟動時,getwalletinfolistwallets RPC 返回的預設錢包名稱現在是空字串 "",而不是 "wallet.dat"

其他 API 變更

  • dumpwallet 輸出中的 inactivehdmaster 屬性已更正為 inactivehdseed

日誌

  • 日誌時間戳格式現在是 ISO 8601(例如 “2018-02-28T12:34:56Z”)。

  • 使用 -debug 但沒有 -daemon 執行 bitcoind 時,現在預設為記錄到 stdout。設定 -printtoconsole=1 不再隱式停用記錄到 debug.log。相反,可以透過設定 -debuglogfile=0 明確停用記錄到檔案。

交易索引變更

交易索引現在與主節點程式分開建置,這意味著可以在不需要完整重新索引的情況下切換 -txindex 標誌。如果在已部分或完全同步但沒有交易索引的節點上使用 -txindex 執行 bitcoind,交易索引將在背景建置並在趕上後可用。當從執行 -txindex 切換到不使用該標誌執行時,交易索引資料庫將不會自動刪除,這意味著可以在以後不需要完全重新同步的情況下重新開啟它。

礦工區塊大小已移除

礦工限制其區塊大小的 -blockmaxsize 選項在 V0.15.1 中已被棄用,現在已被移除。礦工如果想要限制其區塊的權重,應使用 -blockmaxweight 選項。

Python 支援

已停止對所有測試檔案和工具的 Python 2 支援。

0.17.0 變更日誌

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

致謝

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

以及那些回報安全問題的人:

  • awemany(對於 CVE-2018-17144,先前被列為「匿名回報者」)

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