比特幣核心版本0.18.0現在可從以下位置獲得:https://bitcoincore.org/bin/bitcoin-core-0.18.0/

這是一個新的主要版本,包括新功能,各種錯誤修復和性能改進,以及更新的翻譯。

請使用GitHub上的問題跟踪器報告錯誤:https://github.com/bitcoin/bitcoin/issues

要獲得安全和更新通知,請訂閱:https://bitcoincore.org/en/list/announcements/join/

如何升級

如果您運行的是舊版本,請將其關閉。等到它完全關閉(舊版本可能需要幾分鐘),然後運行安裝程序(在Windows上)或只複製/ Applications / Bitcoin-Qt(在Mac上)或bitcoind /比特幣-qt(在Linux上)。

第一次運行0.15.0或更新版本時,您的鏈狀態數據庫將轉換為新格式,這將需要幾分鐘到半小時,具體取決於您的機器速度。

請注意,區塊數據庫格式在版本0.8.0中也發生了更改,並且在版本0.8到版本0.15.0之前沒有自動升級代碼。不支持直接從0.7.x及更早版本升級而不重新加載區塊鏈。但是,像往常一樣,仍然支持舊錢包版本。

兼容性

比特幣核心在使用Linux內核,macOS 10.10+和Windows 7及更新版本的操作系統上得到支持和廣泛測試。不建議在不支持的系統上使用比特幣核心。

比特幣核心也應該適用於大多數其他類Unix系統,但不經常對它們進行測試。

從0.17.0開始,不再支持macOS< 10.10。 0.17.0是使用Qt 5.9.x構建的,它不支持早於10.10的macOS版本。此外,當macOS“暗模式”被激活時,比特幣核心還沒有改變外觀。

除了以前支持的CPU平台之外,此版本的預編譯版本還為RISC-V平台提供了二進製文件。

如果你使用位於contrib / init / bitcoind.servicesystemd單元配置文件,它已被改為使用/ var / lib / bitcoind作為數據目錄而不是~bitcoin / .bitcoin 。切換到新配置文件時,請確保/ var / lib / bitcoind所在的文件系統有足夠的空間(使用df -h / var / lib / bitcoind檢查),並可選擇複製您現有的數據目錄。有關詳細信息,請參閱systemd init文件部分

值得注意的變化

挖礦

  • 如果未指定segwit規則,則調用getblocktemplate將失敗。在沒有指定segwit的情況下調用getblocktemplate幾乎肯定是一個錯誤的配置,因為這樣做會導致礦工的回報更低。失敗的調用將產生一條錯誤消息,描述如何啟用segwit規則。

配置選項更改

  • 如果配置文件中使用了無法識別的部分名稱,則會打印警告。公認的部分是[test][main][regtest]
  • 有四個新選項可用於配置ZMQ在丟棄其他消息之前在內存中排隊的最大消息數(“高水位線”)。默認值為1,000,與先前版本使用的值相同。有關詳細信息,請參閱ZMQ文檔
  • rpcallowip選項不能再用於自動偵聽所有網絡接口。相反,rpcbind參數也必須用於指定要監聽的IP地址。通過公共網絡連接偵聽RPC命令是不安全的,應該禁用,因此如果用戶選擇此類配置,則會立即打印警告。如果您需要公開RPC以使用像Docker這樣的工具,請確保只將RPC綁定到本地主機,例如docker run [...] -p 127.0.0.1:8332:8332(這是普通Docker端口規範的額外:8332)。
  • 如果配置文件中設置的密碼包含哈希字符(#),則rpcpassword選項現在會導致啟動錯誤,因為哈希字符是用於密碼還是用作註釋是不明確的。
  • whitelistforcerelay選項用於中繼來自白名單對等體的交易,即使未被接受到mempool。此選項現在默認為關閉,因此策略和斷開連接/禁止行為的更改不會導致同級刪除另一個白名單的節點。用戶仍然可以使用命令行選項明確啟用此行為(並且可能需要考慮聯繫比特幣核心項目,以便讓我們了解他們的用例,此功能將來可能會被棄用)。

systemd init文件

systemd init文件(contrib / init / bitcoind.service)已更改為使用/ var / lib / bitcoind作為數據目錄而不是~bitcoin / .bitcoin。此更改使比特幣核心與其他服務更加一致,並使systemd init配置與現有的Upstart和OpenRC配置更加一致。

配置,PID和數據目錄現在由systemd完全管理,它將負責它們的創建,權限等。參見[systemd.exec(5)](https://www.freedesktop.org/software /systemd/man/systemd.exec.html#RuntimeDirectory=)了解更多詳情。

當使用contrib / init下提供的init文件時,覆蓋/ etc / bitcoin / bitcoin.conf中的datadir選項將不起作用。這是因為init文件中指定的命令行參數優先於/ etc / bitcoin / bitcoin.conf中指定的選項。

文檔

  • 關於JSON-RPC接口的新的簡短文檔描述了RPC的結果可能包含的情況來自不同子系統的數據之間的不一致,例如錢包狀態和mempool狀態。在REST接口文檔中添加了一條註釋,表明適用相同的規則。
  • 有關如何保護此接口的更多信息將添加到JSON-RPC文檔中。
  • 關於bitcoin.conf文件的新文檔描述瞭如何使用它來配置比特幣核心。
  • 一份新文件介紹比特幣核心的BIP174 部分簽名比特幣交易(PSBT)界面,用於允許多個程序協同工作來創建,簽署和廣播新的交易。這對於離線(冷存儲)錢包,multisig錢包,coinjoin實現以及兩個或更多程序需要交互以生成完整事務的許多其他情況非常有用。
  • 輸出腳本描述符文檔已更新,其中包含有關此靜止開發語言中的新功能的信息,用於描述輸出腳本錢包或其他程序想要接收通知,例如它想要知道收到的付款的地址。該語言目前在scantxoutset RPC中使用,預計將適用於其他RPC和底層錢包結構。 (TODO pieter:在importmulti中提及新的描述符RPCs deriveaddresses / getdescriptorinfo和描述符支持)

構建系統更改

  • 一個新的--disable-bip70選項可以傳遞給./configure,以防止Bitcoin-Qt被構建為支持BIP70支付協議或鏈接libssl。由於支付協議過去曾將比特幣核心暴露給libssl漏洞,因此鼓勵不需要BIP70支持的構建者使用此選項來減少他們未來漏洞的風險。
  • Qt(構建GUI時)所需的最低版本已從5.2增加到5.5.1(取決於系統提供5.9.7)

棄用的P2P消息

  • BIP 61拒絕消息現已棄用。拒絕消息在P2P網絡上沒有用例,並且僅被大多數網絡節點記錄以供調試。此外,它們會增加帶寬並可能對隱私和安全造成損害。從v0.17開始,可以使用-enablebip61 = 0選項禁用BIP 61消息。在完全刪除之前,BIP 61消息將在未來版本中默認禁用。

新的RPC

  • getnodeaddresses RPC返回此節點已知的對等地址。它可用於在不使用DNS播種器的情況下查找要連接的節點。
  • listwalletdir RPC返回錢包目錄中的錢包列表(默認錢包目錄或-walletdir參數配置的目錄)。
  • getrpcinfo返回RPC服務器的運行時詳細信息。目前,它返回當前活動命令的數組以及它們運行了多長時間。
  • deriveaddresses返回與[輸出描述符]對應的一個或多個地址(https://github.com/doc/descriptors.md)。

更新了RPC

注意:下面的“低級別更改”部分介紹了一些主要用於測試的低級RPC更改。

  • getpeerinfo RPC現在返回另一個’minfeefilter`字段設置到對等方的BIP133費用過濾器。您可以使用它來檢測您是否有願意接受低於默認最低接力費的交易的同行。
  • mempool RPC,例如帶有verbose = truegetrawmempool,現在返回一個額外的“bip125可替換”值,指示事務(或其未經證實的祖先)是否選擇要求節點和礦工用一個替換它更高費用的交易支出任何相同的投入。
  • settxfee RPC先前默默地忽略了將費用設置為低於允許的最小值的嘗試。它現在打印一個警告。特殊值“0”仍可用於請求最小值。
  • getaddressinfo RPC現在提供一個ischange字段,指示錢包是否在更改輸出中使用了地址。
  • importmulti RPC已更新為支持P2WSH,P2WPKH,P2SH-P2WPKH和P2SH-P2WSH。對P2WSH和P2SH-P2WSH的請求接受額外的witnessscript參數。
  • importmulti RPC現在為每個請求返回一個額外的warnings字段,其中包含一個字符串數組,用於解釋字段被忽略或不一致的情況(如果有的話)。
  • 當getcoin Core足夠了解地址的scriptPubKey,可選的redeemScript和可選的witnessScript時,getaddressinfo RPC現在返回一個額外的solvable布爾字段,以便錢包能夠生成發送到該地址的未簽名輸入支出資金。
  • getaddressinfolistunspentscantxoutset RPC現在返回一個額外的desc字段,其中包含一個輸出描述符,其中包含所有關鍵路徑和地址的簽名信息(私鑰除外)。只有當地址可解時,才會為getaddressinfolistunspent返回desc字段。
  • importprivkey RPC將為與導入的私鑰相對應的地址或公鑰保留先前設置的標籤。例如,如果您在比特幣核心的早期版本中導入了標籤為“冷錢包”的僅限監視地址,則隨後導入私鑰將默認將地址的標籤重置為默認的空字符串標籤(“”)。在此版本中,將保留以前的“冷錢包”標籤。如果在調用importprivkey時可選地指定除默認值之外的任何標籤,則新標籤將應用於該地址。
  • 有關getblocktemplate的更改,請參閱Mining部分。
  • 當一個區塊從未在此節點上通過RPC組裝時,getmininginfo RPC現在省略了currentblockweightcurrentblocktx
  • getrawtransaction RPC& REST端點不再檢查事務的未使用的UTXO集。其餘行為如下:1。如果提供了blockhash,請檢查相應的區塊。 2.如果未提供阻塞,請檢查mempool。 3.如果未提供阻塞但啟用了txindex,請檢查txindex。
  • unloadwallet RPC現在是同步的,這意味著在錢包完全卸載之前它不會返回。
  • importmulti RPC現在支持從描述符導入地址。可以在請求中提供“desc”參數而不是“scriptPubKey”,以及範圍描述符的可選範圍,以指定要導入的範圍的開始和結束。有關描述符的更多信息可以在這裡找到。
  • listunspent RPC已被修改,因此它也返回witnessScript,在P2WSH或P2SH-P2WSH輸出的情況下見證腳本。
  • RPCcreatewallet現在有一個可選的blank參數,可用於創建空白錢包。空白錢包沒有任何鑰匙或HD種子。它們無法在超過0.18的軟件中打開。一旦空白錢包有HD種子集(通過使用sethdseed)或私鑰,腳本,地址和其他只有手錶導入的東西,錢包不再是空白的,可以在0.17.x中打開。加密空白錢包也會為其設置HD種子。

已棄用或已刪除RPC

  • 不推薦使用signrawtransaction RPC並將其隱藏在版本0.17.0中的特殊配置選項後面。
  • 在v0.17中棄用後,“帳戶”API將被刪除。 ‘label’API在v0.17中作為帳戶的替代品引入。參見[v0.17發行說明](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.17.0.md#label-and-account-apis -for-wallet)有關從“帳戶”API到“標籤”API的更改的完整說明。
  • 在版本0.16.0中棄用了addwitnessaddress RPC。
  • 錢包的generate RPC方法已棄用,將在後續主要版本中完全刪除。此RPC僅用於測試,但其實現跨多個子系統(錢包和挖礦)實現,因此不推薦使用它來簡化錢包節點接口。使用generate進行測試的項目應該轉換為使用generatetoaddress RPC,它不需要或使用wallet組件。使用getnewaddress RPC返回的地址調用generatetoaddress可以提供與舊generate RPC相同的功能。要在此版本中繼續使用generate,請使用-deprecatedrpc = generate配置選項重新啟動bitcoind。

REST更改

  • 添加了一個新的/ rest / blockhashbyheight /端點,用於根據當前最佳區塊鏈的高度(Genesis Block之後的區塊數)獲取當前最佳區塊鏈中的區塊的哈希值。

圖形用戶界面(GUI)

  • 在現有的“文件”,“設置”和“幫助”菜單旁邊添加了一個新的“窗口”菜單。打開新窗口的其他菜單中的幾個項目已移至此新窗口菜單。
  • 在“發送”選項卡中,“僅支付所需費用”複選框已被刪除。相反,用戶可以簡單地將自定義費用字段中的值一直減少到節點配置的最小中繼費用。
  • 在Overview選項卡中,如果錢包是使用createwallet RPC創建的,並且disable_private_keys參數設置為true,則僅監視餘額將是顯示的唯一餘額。
  • 如果使用大於10.11的macosx min版本編譯,則macOS上將不再提供啟動時啟動選項(使用CXXFLAGS =“ – mmacosx-version-min = 10.11”CFLAGS =“ – mmacosx-version-min = 10.11”for設置部署sdk版本)

工具

  • 一個新的“比特幣錢包”工具現在與比特幣核心的其他可執行文件一起分發。無需使用任何RPC,此工具當前可以創建新的錢包文件或顯示有關現有錢包的一些基本信息,例如錢包是否加密,是否使用HD種子,它包含多少交易,以及有多少它擁有的地址簿條目。

低級別更改

RPC

(TODO pieter:感覺這個部分可以與之前的RPC更改部分合併)

  • submitblock RPC先前在第一次處理該區塊時返回了被拒絕區塊無效的原因,但在後續處理相同區塊的情況下返回了通用的“重複”拒絕消息。它現在總是返回拒絕無效區塊的根本原因,並且只返回已經接受的有效區塊的“重複”。
  • 一個新的submitheader RPC允許獨立於其區塊提交區塊頭。這可能僅對測試有用。
  • 已經修改了signrawtransactionwithkeysignrawtransactionwithwallet RPC,以便他們也可以選擇接受witnessScript,即P2WSH或P2SH-P2WSH輸出的見證腳本。這與listunspent的更改兼容。
  • 具有通過importmulti導入的密鑰源信息的描述符將其密鑰源信息存儲在錢包中以用於創建PSBT。 (TODO pieter:這應該與importmulti獲取描述符支持的文本合併)
  • 如果walletprocesspsbtwalletcreatefundedpsbtbip32derivs設置為true但公鑰的密鑰元數據尚未更新,那麼該密鑰將具有派生路徑,就好像它只是一個獨立的密鑰(即沒有派生路徑,其主指紋本身)

配置

  • 版本0.16中刪除了-usehd配置選項。從該版本開始,所有創建的新錢包都是分層確定性錢包。此版本使-usehd指定為無效配置選項。

網絡

  • 如果您有未使用的傳入連接插槽,則此版本允許您的節點自動斷開連接的異常(例如,發送無效數據)以重新連接到您的節點。如果你的插槽填滿,一個行為不當的節點將被斷開連接,為沒有問題歷史的節點騰出空間(除非行為不當的節點以某種其他方式幫助你的節點,例如通過連接到你不喜歡的互聯網的一部分)有許多其他同行)。此前,比特幣核心在一段時間內(默認為1天)禁止行為不端的同行的IP地址;多個IP地址的攻擊者很容易繞過這個問題。如果您手動禁止對等方,例如使用setban RPC,則仍會拒絕來自該對等方的所有連接。

(TODO pieter:提到來自#14897的getdata隨機化以及可能從#14626開始處理orphan tx)

錢包

  • 第一次有HD種子可用時,需要升級關鍵元數據。對於未加密的錢包,這將在錢包加載時發生。對於加密錢包,這將在錢包第一次解鎖時發生。

(TODO pieter:提到HWI項目?)

安全

  • 此版本將從OpenSSL使用的隨機數生成器(RNG)更改為比特幣核心自己的實現,儘管比特幣核心收集的熵被送到OpenSSL,然後在程序需要強隨機性時讀回。這使得比特幣核心更接近於不再需要依賴OpenSSL,這種依賴性在過去已經引發了安全問題。 (TODO pieter:提到rdseed指令在可用的地方使用)

特定平台的更改

  • 在macOS上,比特幣核心現在在初始區塊鏈下載期間選擇退出應用程序CPU限制(“app nap”),當時從當前鏈末端后面的100多個區塊中追趕,或者重新索引鏈數據。這有助於防止這些操作花費過長的時間,因為操作系統正試圖節省電力。