Bitcoin Core 0.12.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.12.0 版本現已發布,可從以下位置下載:
https://bitcoincore.org/bin/bitcoin-core-0.12.0/
此主要版本帶來了新功能和其他改進。
請使用 GitHub 的問題追蹤器回報錯誤:
https://github.com/bitcoin/bitcoin/issues
升級和降級
降級警告
降級到版本 < 0.12.0
由於 0.12.0 及更高版本將在每次新同步或重新索引時混淆 chainstate,因此 chainstate 與 0.12 之前版本的 Bitcoin Core 或其他軟體不向後相容。
如果您想在使用 0.12.0 或更高版本進行重新索引後降級,當您首次啟動 Bitcoin Core 0.11 或更早版本時,您將需要重新索引。
重要變更
使用 libsecp256k1 進行簽名驗證
Bitcoin 交易中的 ECDSA 簽名現在使用 libsecp256k1 進行驗證,而不是 OpenSSL。
根據平台的不同,這意味著原始簽名驗證速度的顯著加速。在 x86_64 上優勢最大,驗證速度提高了五倍以上。在實際應用中,這轉化為原始重新索引和新區塊驗證時間不到以前的一半。
Libsecp256k1 經過了非常廣泛的測試和驗證。
此變更的副作用是 libconsensus 不再依賴 OpenSSL。
減少上傳流量
出站流量的主要部分是由於在初始區塊下載狀態下向其他節點提供歷史區塊。
現在可以透過 -maxuploadtarget 參數減少總上傳流量。這不是硬限制,而是最小化出站流量的閾值。當即將達到限制時,透過不提供歷史區塊(超過一週的區塊)來削減上傳的資料。此外,當請求過濾區塊時,任何 SPV 對等節點都會被斷開連線。
此選項可以以每天 MiB 為單位指定,預設關閉(-maxuploadtarget=0)。建議的最小值是每天 144 * MAX_BLOCK_SIZE(目前為 144MB)。
白名單對等節點永遠不會被斷開連線,儘管它們的流量會計入目標計算。
有關保持流量低的更詳細文件可以在 /doc/reduce-traffic.md 中找到。
直接標頭公告(BIP 130)
在相容對等節點之間,使用 BIP 130 直接標頭公告。這意味著透過直接公告標頭來廣告區塊,而不僅僅是公告雜湊。在重組中,發送所有新標頭,而不僅僅是新提示。這通常可以防止在下載實際區塊之前的額外往返。
隨著此變更,修剪節點現在能夠向相容對等節點中繼新區塊。
記憶體池限制
先前版本的 Bitcoin Core 透過檢查交易費用是否符合節點的最低中繼費用來限制其 mempool。mempool 的大小沒有上限,攻擊者可以發送大量支付略高於預設最低中繼費用的交易,以使相對低 RAM 的節點崩潰。先前版本的 Bitcoin Core 的臨時解決方法是提高預設最低中繼費用。
Bitcoin Core 0.12 將對 mempool 有嚴格的最大大小。預設值為 300 MB,可以使用 -maxmempool 參數配置。每當交易會導致 mempool 超過其最大大小時,具有最低總費率(作為套件)的交易(連同記憶體內後代)將被驅逐,節點的有效最低中繼費率將增加以匹配此費率加上初始最低中繼費率。初始最低中繼費率設定為每 kB 1000 satoshi。
Bitcoin Core 0.12 還引入了新的預設政策限制,限制 mempool 中允許的未確認交易鏈的長度和大小(通常將未確認鏈的長度限制為 25 個交易,總大小為 101 KB)。
選擇加入的 Replace-by-fee 交易
現在可以替換 Bitcoin Core 0.12 節點的交易記憶體池中的交易。Bitcoin Core 只允許替換其任何輸入的 nSequence 號設定為小於 0xffffffff - 1 的交易。此外,只有當替換交易支付足夠的費用時,才能接受替換交易,如 BIP 125 中所述。
可以使用新的命令列選項 -mempoolreplacement=0 停用交易替換。在 BIP125 下發送替換訊號的交易仍將在此配置中被允許進入 mempool,但替換將被拒絕。此選項適用於希望繼續先前版本的交易選擇行為的礦工。
請注意,Bitcoin Core 0.12 中的錢包尚不支援建立在 BIP 125 下可替換的交易。
RPC:Random-cookie RPC 認證
當未指定 -rpcpassword 時,守護程式現在使用特殊的「cookie」檔案進行認證。此檔案在守護程式啟動時使用隨機內容生成,並在退出時刪除。其內容用作認證令牌。對此檔案的讀取存取控制誰可以透過 RPC 存取。預設情況下,它儲存在資料目錄中,但可以使用 -rpccookiefile 選項覆蓋其位置。
這類似於 Tor 的 CookieAuthentication:請參閱 https://www.torproject.org/docs/tor-manual.html.en
這允許在不進行任何手動配置的情況下執行 bitcoind。
中繼:OP_RETURN 輸出中的任何 pushdata 序列現在允許
以前,只有當 OP_RETURN 輸出具有單個 pushdata 時,才會中繼和挖掘具有有效負載的 OP_RETURN 輸出。此限制已解除,以允許在 OP_RETURN 之後使用任何資料推送和數字常數操作碼(OP_1 到 OP_16)的組合。OP_RETURN 輸出大小的限制現在應用於整個序列化的 scriptPubKey,預設為 83 位元組。(先前的 80 位元組預設值加上三個位元組開銷)
中繼和挖礦:優先級交易
Bitcoin Core 有基於幣值和年齡的啟發式「優先級」。此計算用於中繼不支付最低中繼費用的交易,並可用作為挖掘區塊排序交易的替代方法。
在 Bitcoin Core 0.12 中,當達到 mempool 限制時,更高的最低中繼費用生效以限制記憶體使用。即使根據優先級啟發式排名很高,不符合此更高有效最低中繼費用的交易也不會被中繼或挖掘。
基於優先級的交易挖掘現在預設也已停用。要重新啟用它,只需設定 -blockprioritysize=<n>,其中 n 是為這些交易保留的區塊大小(以位元組為單位)。舊的預設值為 50k,因此要保留大致相同的政策,您需要設定 -blockprioritysize=50000。
自動使用 Tor 隱藏服務
從 Tor 版本 0.2.7.1 開始,透過 Tor 的控制套接字 API,可以程式化地建立和銷毀「臨時」隱藏服務。Bitcoin Core 已更新以使用此功能。
這意味著如果 Tor 正在執行(並且可用適當的授權),Bitcoin Core 會自動建立一個隱藏服務來監聽,無需手動配置。如果可以成功開啟控制套接字,Bitcoin Core 也將自動使用 Tor 連線到其他 .onion 節點。
如果 Bitcoin Core 正在監聽,並且可以與 Tor 建立連線,則此新功能預設啟用。可以使用 -listenonion、-torcontrol 和 -torpassword 設定進行配置。要顯示詳細除錯資訊,請傳遞 -debug=tor。
透過 ZMQ 的通知
Bitcoind 現在可以(可選)透過基於 ZMQ 的 PUB 套接字異步通知客戶端新交易和區塊的到達。此功能需要安裝 ZMQ C API 程式庫 4.x,並透過命令列或配置檔配置其使用。請參閱 docs/zmq.md 以獲取操作詳細資訊。
錢包:交易費用
對錢包如何計算交易費用進行了各種改進。
使用者可以透過設定 -paytxfee=<n>(或在執行時執行 settxfee <n> rpc)來決定支付預定義的費率。n=0 的值表示 Bitcoin Core 使用浮動費用。預設情況下,Bitcoin Core 將使用浮動費用。
基於過去的交易資料,浮動費用近似從現在起進入第 m 個區塊所需的費用。這可以使用 -txconfirmtarget=<m>(預設值:2)配置。
有時,無法給出良好的估算,或根本無法給出估算。因此,可以使用 -fallbackfee=<f>(預設值:0.0002 BTC/kB)設定回退值。
在任何時候,Bitcoin Core 都會將費用限制在 -maxtxfee=<x>(預設值:0.10)BTC。此外,Bitcoin Core 永遠不會建立支付少於當前最低中繼費用的交易。最後,使用者可以使用 -mintxfee=<i> 為所有交易設定最低費率,預設為每 kB 1000 satoshi。
錢包:負確認和衝突檢測
錢包現在將報告負確認數,指示衝突在區塊鏈中的深度。例如,如果交易 A 有 5 次確認並花費與錢包交易 B 相同的輸入,B 將被報告為具有 -5 次確認。如果另一個錢包交易 C 花費來自 B 的輸出,它也將被報告為具有 -5 次確認。
與早期版本不同,未確認但不衝突的交易永遠不會獲得負確認計數。除非它們來自我們自己(找零)並被接受到我們的本地 mempool 中,否則它們不會被視為可花費。listtransactions RPC 輸出中的新「trusted」欄位指示未確認交易的輸出是否被視為可花費。
錢包:移除 Merkle 分支
以前,每個錢包交易都儲存一個 Merkle 分支來證明其在區塊中的存在。這只是用於昂貴的健全性檢查。從 0.12 開始,不再儲存這些。當將 0.12 錢包載入到較舊版本時,它將自動重新掃描以避免檢查失敗。
錢包:修剪
從 0.12 開始,可以在修剪模式下使用錢包功能。這可以將磁碟使用量從目前的約 60 GB 減少到約 2 GB。
然而,重新掃描以及 RPC importwallet、importaddress、importprivkey 被停用。
要啟用區塊修剪,請在命令列或 bitcoin.conf 中設定 prune=<N>,其中 N 是為原始區塊和還原資料分配的 MiB 數。值 0 停用修剪。0 以上的最小值為 550。
NODE_BLOOM 服務位元
已將對 NODE_BLOOM 服務位元的支援新增到 P2P 協定程式碼中,如 BIP 111 中所述。
BIP 111 定義了一個服務位元,允許對等節點明確廣告它們支援 bloom 過濾器(如 SPV 客戶端使用的)。它還提升協定版本,以允許對等節點識別儘管缺少新服務位元但仍允許連線的 bloom 過濾的舊節點。
選項解析行為
命令列選項現在嚴格按照指定的順序解析。過去的情況是 -X -noX 最終不直觀地設定 X,因為 -X 優先於 -noX。這不再是這種情況。與其他軟體一樣,選項的最後指定值將保留。
RPC:低階 API 變更
-
可以以字串形式提供貨幣金額。這意味著例如 sendtoaddress 的參數可以是「0.0001」而不是 0.0001。如果 JSON 程式庫堅持對數字使用有損浮點類型,這可能是一個優勢,這對於貨幣金額來說是危險的。
-
每個 scriptSig 的
asm屬性現在包含每個提供有效定義雜湊類型的簽名的解碼簽名雜湊類型。 -
OP_NOP2 已被 BIP 65 重新命名為 OP_CHECKLOCKTIMEVERIFY
RPC:SSL 支援移除
先前透過選項 rpcssl 啟用的 RPC 的 SSL 支援已從客戶端和伺服器中移除。這是為了準備完全移除守護程式對 OpenSSL 的依賴。
嘗試使用 rpcssl 將導致錯誤:
Error: SSL mode for RPC (-rpcssl) is no longer supported.
如果您是少數依賴此功能的人之一,靈活的遷移路徑是使用 stunnel。這是一個可以在 SSL 內隧道任意 TCP 連線的實用程式。
挖礦程式碼變更
0.12 中的挖礦程式碼已最佳化,速度明顯更快且使用更少的記憶體。作為這些變更的一部分,共識關鍵計算在交易被接受到 mempool 時快取,挖礦程式碼現在依賴 mempool 的一致性來組裝區塊。然而,所有區塊在組裝後仍然進行有效性測試。
其他 P2P 變更
被禁止對等節點的清單現在儲存在磁碟上而不是記憶體中。重新啟動 bitcoind 將不再清除被禁止對等節點的清單;相反,可以使用新的 RPC 呼叫(clearbanned)手動清除清單。新的 setban RPC 呼叫也可用於手動禁止或解禁對等節點。
0.12.0 變更日誌
完整的變更日誌包含數百個 PR,涵蓋 RPC 和 REST、配置和命令列選項、區塊和交易處理、P2P 協定和網路程式碼、驗證、建置系統、錢包、GUI、測試和 QA 等方面。由於篇幅限制,請參閱原始版本說明以獲取完整清單。
致謝
感謝所有直接為此版本做出貢獻的超過 100 位貢獻者。完整清單請參閱原始版本說明。
以及所有在 Transifex 上協助翻譯的人。
