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

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

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

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

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

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

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

相容性

從 0.13.0 開始,不再支援 Windows XP。建議使用者升級到較新版本的 Windows,或安裝支援的替代作業系統。我們沒有嘗試阻止在 Windows XP 上安裝或執行軟體,您仍然可以自行承擔風險執行,但不要期望它能正常工作:請不要向問題追蹤器回報關於 Windows XP 的問題。

重要變更

資料庫快取記憶體增加

由於 UTXO 集合的增長,使用先前預設的 100 MiB 資料庫快取的效能已經下降。因此,此版本中的預設值已更改為 300 MiB。

對於低記憶體系統上的節點,可以透過以下方式將資料庫快取更改回 100 MiB(或其他值):

  • 在 bitcoin.conf 中新增 dbcache=100
  • 在 GUI 中的 選項 → 資料庫快取大小 下更改

請注意,資料庫快取設定在節點的初始同步期間和停機後追趕時對效能影響最大。

bitcoin-cli:參數隱私

RPC 命令列客戶端獲得了一個新參數 -stdin,用於從標準輸入讀取額外參數,每行一個,直到 EOF/Ctrl-D。例如:

$ src/bitcoin-cli -stdin walletpassphrase
mysecretcode
120
..... 在此處按 Ctrl-D 結束輸入
$

建議將此用於敏感資訊(如錢包密碼),因為命令列參數通常可以被系統上的任何使用者從處理程序表中讀取。

C++11 和 Python 3

已進行各種程式碼現代化。Bitcoin Core 程式碼庫已開始使用 C++11。這意味著現在建置需要支援 C++11 的編譯器。實際上這意味著 GCC 4.7 或更高版本,或 Clang 3.3 或更高版本。

對於在 qa/rpc-tests 中執行功能測試,現在需要 Python3.4 或更高版本。

Linux ARM 建置

由於普遍的要求,Linux ARM 建置已新增到上傳的可執行檔中。

下載目錄或 torrent 中可以找到以下額外檔案:

  • bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz:針對最常見的 32 位元 ARM 架構的 Linux 二進位檔。
  • bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz:針對最常見的 64 位元 ARM 架構的 Linux 二進位檔。

ARM 建置仍然是實驗性的。請注意,Android 在此上下文中不被視為 ARM Linux。

緊湊區塊支援(BIP 152)

已在 PR 8068 中實作使用緊湊區塊協定進行區塊中繼的支援。

主要目標是減少中繼時的頻寬尖峰,儘管在許多情況下它也減少了傳播延遲。它在相容對等節點之間自動啟用。 BIP 152

階層式確定性金鑰生成

新建立的錢包將根據 BIP32 使用階層式確定性金鑰生成(keypath m/0’/0’/k’)。現有錢包仍將使用傳統金鑰生成。

無論何時建立,HD 錢包的備份都可用於重新生成所有可能的私鑰,即使是在備份時尚未生成的私鑰。 注意:加密錢包將建立新的 seed,這需要新的備份!

使用 dumpwallet RPC 建立的錢包轉儲將包含確定性 seed。這預計將允許未來版本匯入 seed 和所有相關資金,但這尚未實作。

可以透過 -usehd=0 為新錢包停用 HD 金鑰生成。請記住,此標記只對新建立的錢包有效。一旦建立了 HD 錢包,就無法停用 HD 金鑰生成。

內部和外部金鑰之間沒有區別。

HD 錢包與舊版本的 Bitcoin Core 不相容。

Pull requestBIP 32

Segregated Witness

Segregated Witness (「segwit」) 的程式碼準備工作(如 BIP 141BIP 143BIP 144BIP 145 中所述)已完成並包含在此版本中。然而,BIP 141 尚未指定 mainnet 上的啟動參數,因此此版本不支援在 mainnet 上使用 segwit。支援在 testnet 上使用。

在 BIP 141 更新為建議參數後,預計將發布實作這些 mainnet 參數的 Bitcoin Core 未來版本。

挖礦交易選擇(「Child Pays For Parent」)

挖礦交易選擇演算法已被替換為基於未確認祖先交易的費率選擇交易的演算法。這意味著,如果中繼支出其輸出的高費用交易,低費用交易可能更有可能被選中。

隨著此變更,-blockminsize 命令列選項已被移除。

命令列選項 -blockmaxsize 仍然是指定生成區塊中最大序列化位元組數的選項。此外,已新增新的命令列選項 -blockmaxweight,它指定生成區塊的最大「區塊權重」,如 BIP 141 (Segregated Witness) 所定義。

重新索引變更

在早期版本中,重新索引在讀取磁碟上的區塊檔案時進行驗證。這兩者現在已被分開,因此在驗證開始之前所有區塊都是已知的。這對於使正常同步期間可用的某些最佳化在重新索引期間也可用是必要的。

在 Bitcoin-Qt GUI 中,這兩個階段是不同的。在第一階段期間,顯示「在磁碟上重新索引區塊」。在第二階段(較慢)期間,顯示「在磁碟上處理區塊」。

現在可以只重做驗證,而不重建區塊索引,使用命令列選項 -reindex-chainstate(除了執行兩者的 -reindex)。當假設磁碟上的區塊正常,但 chainstate 仍然損壞時,此新選項很有用。它對基準測試也很有用。

移除內部礦工

由於 CPU 挖礦已經無用很長時間,內部礦工已在此版本中移除,並替換為測試框架的更簡單實作。

這的整體結果是 setgenerate RPC 呼叫已被移除,以及 -gen-genproclimit 命令列選項。

對於測試,generate 呼叫仍可用於挖掘區塊,並已新增新的 RPC 呼叫 generatetoaddress 以挖掘到特定位址。這在停用錢包的情況下有效。

低階 P2P 變更

  • 實作了可選的新 p2p 訊息「feefilter」,協定版本提升到 70013。在從對等節點接收到 feefilter 訊息後,節點不會為不符合過濾器費率的任何交易發送 inv。BIP 133

  • P2P 警報系統已在 PR #7692 中移除,不再支援 alert P2P 訊息。

  • 交易中繼機制曾經立即中繼四分之一的所有交易,同時將其餘交易排隊並分批發送出去。由於這導致依賴交易鏈被重新排序,它系統性地損害了交易中繼。中繼程式碼在 PR #7840#8082 中被重新設計,現在總是批次處理交易公告,同時也根據依賴順序對它們進行排序。這顯著減少了孤立交易。

  • 自 PR #7840 以來,BIP35 mempool 命令也受批次處理的影響。當透過 -peerbloomfilters=0 停用 NODE_BLOOM 時,非白名單對等節點的 mempool 訊息不再被處理。

  • 保留在記憶體中直到其祖先到達的孤立交易的最大大小在 PR #8179 中從 5000 提高到 99999 位元組。當它們被包含在區塊中、與區塊衝突以及在 20 分鐘後超時時,它們現在也會從記憶體中移除。

低階 RPC 變更

  • 已新增 RPC 呼叫以輸出單個 mempool 條目的詳細統計資訊,以及計算交易的記憶體內祖先或後代:請參閱 getmempoolentrygetmempoolancestorsgetmempooldescendants

  • gettxoutsetinfo UTXO 雜湊(hash_serialized)已變更。32 位元和 64 位元平台之間存在差異,雜湊資料中缺少 txid。這已被修復,但這意味著輸出將與先前版本不同。

  • RPC API 中的完整 UTF-8 支援。例如,錢包標籤中的非 ASCII 字元總是格式錯誤的,因為在 JSON RPC 處理中沒有正確考慮它們。這不再是問題。這也影響 GUI 除錯控制台。

  • Asm 腳本輸出替換 OP_NOP2 和 OP_NOP3
    • OP_NOP2 已被 BIP 65 重新命名為 OP_CHECKLOCKTIMEVERIFY
    • OP_NOP3 已被 BIP 112 重新命名為 OP_CHECKSEQUENCEVERIFY
  • 新的 RPC 命令:generatetoaddressimportprunedfundsremoveprunedfundssignmessagewithprivkeygetmempoolancestorsgetmempooldescendantsgetmempoolentrycreatewitnessaddressaddwitnessaddress

  • 移除的 RPC 命令:setgenerategetgenerate

  • 已為 fundrawtransaction 新增選項:includeWatchingchangeAddresschangePositionfeeRate

低階 ZMQ 變更

  • 每個 ZMQ 通知現在都包含一個遞增序號,允許監聽器檢測丟失的通知。序號始終是多部分 ZMQ 通知中的最後一個元素,因此向後相容。每種訊息類型都有自己的計數器。PR #7762

0.13.0 變更日誌

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

致謝

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

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