根據(jù)Bitcoin Core開發(fā)團(tuán)隊(duì)的計(jì)劃,0.18.0版本的比特幣core軟件將于4月3日左右正式發(fā)布,截至發(fā)稿時(shí),其代碼庫的完成度已達(dá)到了96%。
以下為0.18.0版本發(fā)布草稿,讀者可提前了解到該版本軟件的更新內(nèi)容。
(注:這只是一個(gè)臨時(shí)版的說明,正式發(fā)布時(shí)可能會(huì)稍有不同)
讀者可訪問Bitcoin Core 0.18.0 版本客戶端代碼庫:
https://bitcoincore.org/bin/bitcoin-core-0.18.0/
這是比特幣的重大更新版本,更新內(nèi)容包括新功能、各種bug修復(fù)、性能提升以及交易更新。
開發(fā)者可使用GitHub的問題跟蹤器上報(bào)錯(cuò)誤:
https://github.com/bitcoin/bitcoin/issues
若要接受安全及更新通知,請訂閱:
https://bitcoincore.org/en/list/announcements/join/
如何更新
如果你運(yùn)行的是舊版本客戶端,請關(guān)閉它,直至其完全關(guān)閉(舊版本可能需要幾分鐘的時(shí)間),然后再運(yùn)行安裝程序(Windows)或拷貝覆蓋至/Applications/Bitcoin-Qt(Mac系統(tǒng))或bitcoind/bitcoin-qt(Linux系統(tǒng))。
當(dāng)你第一次運(yùn)行0.15.0或更新版本的客戶端時(shí),你的鏈態(tài)數(shù)據(jù)庫將轉(zhuǎn)換成一種新的格式,這取決于你機(jī)器的速度,所花費(fèi)的時(shí)間從幾分鐘到半小時(shí)不等。
注意,區(qū)塊數(shù)據(jù)庫格式在0.8.0版本中也發(fā)生了變化,并且在0.8版本之前的客戶端到 0.15.0版本的客戶端并沒有自動(dòng)升級代碼。在0.7.x版本或更早版本的客戶端,無法實(shí)現(xiàn)直接升級(需重新下載區(qū)塊鏈)。不過,和往常一樣的是,舊版本的錢包仍然是支持的。
兼容性
Bitcoin Core客戶端已在多個(gè)操作系統(tǒng)上進(jìn)行了廣泛測試,其中包括Linux 內(nèi)核操作系統(tǒng)、macOS 10.10+、Windows 7以及更新的操作系統(tǒng)。不建議在不支持的系統(tǒng)上使用Bitcoin Core客戶端。
Bitcoin Core在其他類似Unix系統(tǒng)的OS上也是可工作的, 但測試相對較少。
需要注意的是,macOS操作系統(tǒng)低于10.10版本,就無法運(yùn)行高于0.17.0版本的Bitcoin Core客戶端,這是因?yàn)?.17.0是使用Qt 5.9.x構(gòu)建的,它并不支持低于10.10版本的macOS操作系統(tǒng)。
除了以前支持的CPU平臺之外,這個(gè)版本的預(yù)編譯發(fā)行版還為RISC-V平臺提供了二進(jìn)制文件。
如果你使用位于contrib/init/bitcoind.service的systemd單元配置文件,則已將其更改為使用/var/lib/bitcoind作為數(shù)據(jù)目錄,而不是使用~bitcoin/.bitcoin。切換到新的配置文件時(shí),請確保/var/lib/bitcoind所在的文件系統(tǒng)有足夠的空間(使用df-h/var/lib/bitcoind進(jìn)行檢查),并可以選擇復(fù)制現(xiàn)有的數(shù)據(jù)目錄。有關(guān)詳細(xì)信息,請參閱系統(tǒng)初始化文件部分。
顯著的更改
挖礦
如果未指定隔離見證(segwit)規(guī)則,則對getblocktemplate的調(diào)用將失敗。沒有隔離見證(segwit)指定而調(diào)用getblocktemplate,幾乎肯定是一種錯(cuò)誤配置,因?yàn)檫@樣做會(huì)降低礦工的回報(bào)。失敗的調(diào)用將生成一條說明如何啟用隔離見證(segwit)規(guī)則的錯(cuò)誤信息。
配置選項(xiàng)更改
1. 如果在配置文件中使用了無法識別的section名稱,則會(huì)提示警告??勺R別的section有[test]、 [main]以及[regtest]。
2. 有四個(gè)新選項(xiàng)可用于配置ZMQ在刪除附加消息之前將在memory中排隊(duì)的最大消息數(shù)。默認(rèn)值為1000,這與以前的版本相同。有關(guān)詳細(xì)信息,請參閱ZMQ文檔。
3. enablebip61選項(xiàng)(Bitcoin Core 0.17.0中引入)用于切換BIP61拒絕消息的發(fā)送。拒絕消息在P2P網(wǎng)絡(luò)上沒有應(yīng)用,并且只被記錄以供大多數(shù)網(wǎng)絡(luò)節(jié)點(diǎn)調(diào)試。默認(rèn)情況下,該選項(xiàng)現(xiàn)在將關(guān)閉,以提高隱私和安全性,并減少上傳使用。出于本地網(wǎng)絡(luò)調(diào)試目的,用戶可顯式打開該選項(xiàng)。
4. rpcallowip選項(xiàng)不能再用于自動(dòng)監(jiān)聽所有網(wǎng)絡(luò)接口。相反,rpcbind參數(shù)還必須用于指定要偵聽的IP地址。由于通過公共網(wǎng)絡(luò)連接偵聽RPC命令是不安全的,應(yīng)該禁用該命令,因此,如果用戶選擇了這樣的配置,現(xiàn)在將提示警告。如果需要公開RPC以便使用Docker之類的工具,請確保只將RPC綁定到本地主機(jī),例如Docker run[…]-p 127.0.0.1:8332:8332。
5. 如果配置文件中設(shè)置的密碼包含哈希字符 (#),rpcpassword選項(xiàng)現(xiàn)在會(huì)導(dǎo)致啟動(dòng)錯(cuò)誤,因?yàn)楣W址怯糜诿艽a還是用作注釋,這是不明確的。
6. WhiteListforceRelay選項(xiàng)用于中繼來自白名單對等節(jié)點(diǎn)的交易,即使在未被mempool接受時(shí)也是如此。此選項(xiàng)現(xiàn)在默認(rèn)為關(guān)閉,因此策略和斷開/禁止行為的更改,不會(huì)導(dǎo)致白名單中的另一個(gè)節(jié)點(diǎn)被對等方刪除。用戶仍然可以使用命令行選項(xiàng)顯式地啟用此行為(將來可能會(huì)棄用此功能)。
系統(tǒng)初始化文件
系統(tǒng)初始化文件 (contrib/init/bitcoind.service) 已更改為使用/var/lib/bitcoind作為數(shù)據(jù)目錄,而不是~bitcoin/.bitcoin。這一變化使Bitcoin Core 變得與其他服務(wù)更加一致,并使得系統(tǒng)初始化文件與現(xiàn)有的Upstart和OpenRC configs更加一致。
配置、PID和數(shù)據(jù)目錄現(xiàn)在完全由SystemD管理,它將負(fù)責(zé)它們的創(chuàng)建、權(quán)限等。有關(guān)詳細(xì)信息,請參閱systemd.exec (5) ;
在contrib/init下使用提供的初始化文件時(shí),覆蓋/etc/bitcoin/bitcoin.conf中的datadir選項(xiàng)將無效。這是因?yàn)槌跏蓟募兄付ǖ拿钚袇?shù)優(yōu)先于/etc/bitcoin/bitcoin.conf中指定的選項(xiàng)。
文檔
1. 關(guān)于JSON-RPC接口的一個(gè)新的簡短文檔描述了一些情況,其中一個(gè)RPC的結(jié)果,可能包含來自不同子系統(tǒng)的數(shù)據(jù)之間的不一致,例如錢包狀態(tài)和mempool狀態(tài)。在REST接口文檔中添加了一個(gè)說明,說明應(yīng)用了相同的規(guī)則。
2. 有關(guān)如何保護(hù)該接口的更多信息,將添加到JSON-RPC文檔中。
3. 關(guān)于bitcoin.conf文件的一個(gè)新文檔,描述了如何使用它來配置 Bitcoin Core。
4. 新的文檔介紹了Bitcoin Core的BIP174 部分簽名比特幣交易(PSBT)接口,該接口用于允許多個(gè)程序協(xié)作創(chuàng)建、簽名和廣播新的交易。這對于離線(冷)錢包、多重簽名錢包、coinjoin實(shí)現(xiàn)以及很多其他需要兩個(gè)或多個(gè)程序交互以生成完整交易的情況非常有用。
5. 輸出腳本描述符文檔已更新,其中包含有關(guān)此仍在開發(fā)中語言的新功能信息。該語言目前在scantxstart RPC中使用,預(yù)計(jì)將適應(yīng)其他rpc和底層錢包結(jié)構(gòu)。
構(gòu)建系統(tǒng)更改
1. 可以將一個(gè)新的--disable-bip70選項(xiàng)傳遞給。/configure,以防止Bitcoin-Qt在支持BIP70支付協(xié)議的情況下構(gòu)建或鏈接libssl。由于支付協(xié)議在過去將Bitcoin Core暴露于libssl漏洞,鼓勵(lì)不需要bip70支持的構(gòu)建者,使用此選項(xiàng)來減少未來漏洞暴露所帶來的傷害。
2. Qt的最低要求版本(構(gòu)建GUI時(shí))已從5.2增加到5.5.1。
新的RPC
1. getnodeaddresses RPC返回此節(jié)點(diǎn)已知的對等地址。它可以用來查找不使用DNS種子器連接到的節(jié)點(diǎn)。
2. listwalletdir RPC返回錢包目錄中的錢包列表(默認(rèn)wallet目錄或由-walletdir參數(shù)配置的目錄)。
3. getrpcinfo返回RPC服務(wù)器的運(yùn)行時(shí)間詳細(xì)信息。目前,它返回一個(gè)當(dāng)前活動(dòng)命令的數(shù)組,以及它們已經(jīng)運(yùn)行了多長時(shí)間。
4. deriveaddresses返回與輸出描述符對應(yīng)的一個(gè)或多個(gè)地址。
更新的RPC
注意:下面的低level RPC更改部分,描述了一些主要用于測試的低level RPC更改。
1. getpeerinfo RPC現(xiàn)在返回一個(gè)額外的minfeefilter字段,該字段設(shè)置為對等節(jié)點(diǎn)的bip133費(fèi)用過濾器。你可以使用它來檢測你的對等節(jié)點(diǎn)是否愿意接受低于默認(rèn)最低中繼費(fèi)的交易。
2. mempool RPC,例如getrawmempool ,在verbose=true的情況下,現(xiàn)在返回一個(gè)額外的“bip125可替換”值,指示交易是否選擇請求節(jié)點(diǎn)和礦工將其替換為使用相同輸入的更高費(fèi)率交易。
3. SettXFee RPC以前會(huì)靜默地忽略將費(fèi)用設(shè)置為低于允許最小值的嘗試?,F(xiàn)在它會(huì)發(fā)出警告,特殊值“0”仍可用于請求最小值。
4. getaddressinfo RPC現(xiàn)在提供一個(gè)ischange字段,指示錢包是否使用了找零輸出中的地址。
5. importmulti RPC已更新為支持P2WSH、 P2WPKH、 P2SH-P2WPKH以及P2SH-P2WSH。對P2WSH 和P2SH-P2WSH 的請求,接受一個(gè)附加的witnessscript參數(shù)。
6. importmulti RPC現(xiàn)在為每個(gè)請求返回一個(gè)額外的warnings字段,其中包含一組字符串,用于解釋字段被忽略或不一致的時(shí)間(如果有的話)。
7. 當(dāng)Bitcoin Core足夠了解地址的scriptPubKey、可選redeemScript以及可選witnessScript,以便錢包能夠生成發(fā)送到該地址的未簽名輸入支出資金時(shí),getaddressinfo RPC現(xiàn)在返回一個(gè)額外的solvable布爾字段。
8. getaddressinfo、listunspent以及scantxoutset RPC現(xiàn)在返回一個(gè)附加的desc字段,該字段包含一個(gè)輸出描述符,其中包含地址的所有密鑰路徑和簽名信息(私鑰除外)。只有當(dāng)?shù)刂房山鈺r(shí),getAddressInfo和listunPent才會(huì)返回desc字段。
9. importprivkey RPC 將為要導(dǎo)入的私鑰對應(yīng)的地址或公鑰保留以前設(shè)置的標(biāo)簽。例如,如果你在早期版本的Bitcoin Core中導(dǎo)入了標(biāo)簽為“冷錢包”的只讀地址,隨后導(dǎo)入私鑰將默認(rèn)為將地址標(biāo)簽重置為默認(rèn)的空字符串標(biāo)簽(“”)。在此版本中,將保留以前的“Cold Wallet”標(biāo)簽。如果在調(diào)用importprivkey時(shí)可選擇指定除默認(rèn)值之外的任何標(biāo)簽,則新標(biāo)簽將應(yīng)用于該地址。
10. 有關(guān)對GetBlockTemplate的更改,請參閱挖礦部分。
11. 當(dāng)區(qū)塊從未通過此節(jié)點(diǎn)上的RPC進(jìn)行裝配時(shí),getmininginfo RPC現(xiàn)在會(huì)省略currentblockweight和currentblocktx。
12. getrawtransaction RPC和REST端點(diǎn)不再檢查交易的未使用UTXO集。其余行為如下:1.如果提供了區(qū)塊哈希,請檢查相應(yīng)的塊。2。如果沒有提供區(qū)塊哈希,請檢查mempool。3. 如果沒有提供區(qū)塊哈希,但啟用了 txindex,則還應(yīng)檢查txindex。
13. unloadwallet RPC 現(xiàn)在是同步的,這意味著在完全卸載錢包之前,它不會(huì)返回。
14. importmulti RPC 現(xiàn)在支持從描述符導(dǎo)入地址。可以提供“desc”參數(shù),而不是請求中的“scriptpubkey”,以及范圍描述符的可選范圍,以指定要導(dǎo)入范圍的開始和結(jié)束。關(guān)于描述符的更多信息,可以在這里找到。
15. listunspent RPC 現(xiàn)在已經(jīng)被修改,以便它返回witnessScript,即P2WSH或P2SH-P2WSH輸出時(shí)的見證腳本。
16. createwallet RPC 現(xiàn)在有一個(gè)可選的空白參數(shù),它可用于創(chuàng)建空白錢包??瞻族X包沒有任何密鑰或HD種子。如果bitcoin core客戶端低于0.18版本,則無法打開它們。一旦一個(gè)空白錢包有一個(gè)HD種子集(通過使用sethdseed)或私鑰、腳本地址和其他已被導(dǎo)入的只讀東西,錢包就不再是空白的,其可以在0.17.x中打開。加密一個(gè)空白錢包也會(huì)為它設(shè)置一個(gè)HD種子。
已棄用或刪除的RPC
1. signrawtransaction RPC 在0.17.0版本中被否決,并隱藏在特殊配置選項(xiàng)之后,現(xiàn)在已經(jīng)被刪除了。
2. “account”API在v0.17中被否決后,現(xiàn)在已被刪除?!甽abel’ API 在v0.17中被引入作為賬戶的替換。有關(guān)從“帳戶”API到“標(biāo)簽”API更改的完整說明,請參閱v0.17的發(fā)布說明。
3. addwitnessaddress RPC在0.16.0版中被否決后,現(xiàn)在已被刪除。
4. 錢包的generate RPC方法已被棄用,并將在隨后的主要版本中被完全刪除。此RPC僅用于測試,但其實(shí)現(xiàn)跨越多個(gè)子系統(tǒng)(錢包和挖礦),因此不推薦簡化 wallet-node接口。使用generate進(jìn)行測試目的的項(xiàng)目,應(yīng)轉(zhuǎn)換為使用generatetoaddress RPC,后者不需要或使用錢包組件。使用getnewaddress RPC返回的地址調(diào)用generatetoaddress,提供與舊generate RPC相同的功能。要繼續(xù)在此版本中使用generate,請使用-deprecatedrpc=generate配置選項(xiàng)重新啟動(dòng)bitcoind。
剩余的變化
添加了一個(gè)新的 /rest/blockhashbyheight/ 端點(diǎn),用于根據(jù)區(qū)塊的高度,獲取當(dāng)前最佳區(qū)塊鏈中區(qū)塊的哈希。
圖形用戶界面(GUI)
1. 在現(xiàn)有文件、設(shè)置和幫助菜單旁邊,會(huì)添加一個(gè)新的窗口菜單。其他打開新窗口菜單中的幾個(gè)項(xiàng),已被移動(dòng)到此新窗口菜單。
2. 在“發(fā)送”選項(xiàng)卡中,“僅支付所需費(fèi)用”復(fù)選框已被刪除。相反,用戶可簡單地將自定義費(fèi)率字段中的值降低到節(jié)點(diǎn)配置的最小中繼費(fèi)用。
3. 在Overview選項(xiàng)卡中,如果錢包是使用CreateWallet RPC創(chuàng)建的,并且disable_private_keys參數(shù)設(shè)置為true,則只讀的余額將是顯示的唯一余額。
4. 如果使用大于10.11的Macosx Min版本編譯,則 launch-on-startup選項(xiàng)在MacOS上將不再可用(使用CXXFLAGS=“-mmacosx-version-min=10.11” CFLAGS=“-mmacosx-version-min=10.11”設(shè)置部署SDK版本)
工具
一個(gè)新的bitcoin-wallet工具現(xiàn)在與Bitcoin Core的其他可執(zhí)行文件一起分發(fā)。不需要使用任何RPC,此工具當(dāng)前可以創(chuàng)建新的錢包文件或顯示有關(guān)現(xiàn)有錢包的一些基本信息,例如錢包是否加密、是否使用HD種子、包含多少交易以及有多少地址簿條目。
低level更改
RPC
(TODO pieter: 感覺此部分可與早期的RPC更改部分合并)
1. submitblock RPC 現(xiàn)在總是返回拒絕一個(gè)無效塊的基本原因,并且只返回它已接受的有效塊的“重復(fù)品”。
2. 新的submitheader RPC允許獨(dú)立于區(qū)塊提交區(qū)塊頭。這可能只對測試有用。
3. signrawtransactionwithkey和signrawtransactionwithwallet RPC已被修改,以便它們也可以選擇接受witnessScript,即P2WSH或P2SH-P2WSH輸出情況下的見證腳本。這與對 listunspent的更改兼容。
4. 通過importmulti導(dǎo)入的具有密鑰來源信息的描述符,將其密鑰來源信息存儲(chǔ)在錢包中,以用于創(chuàng)建PSBTs
5. 如果walletprocesspsbt和walletcreatefundedpsbt的bip32derivs都設(shè)置為true,但公鑰的密鑰元數(shù)據(jù)尚未更新,則該密鑰將具有一個(gè)派生路徑,如同它只是一個(gè)獨(dú)立的密鑰一樣(即,沒有派生路徑,其主指紋是其自身)。
配置
在0.16版本客戶端中, -usehd 配置選項(xiàng)被刪除了,從那個(gè)版本開始,所有新創(chuàng)建的錢包都是層次確定性(HD)錢包。此版本使指定-usehd 成為無效的配置選項(xiàng)。
網(wǎng)絡(luò)
此版本允許節(jié)點(diǎn)因行為錯(cuò)誤(例如發(fā)送無效數(shù)據(jù))而自動(dòng)斷開連接的對等端,重新連接到你的節(jié)點(diǎn)(如果你有未使用的傳入連接插槽)。如果你的插槽已滿,則會(huì)斷開行為不正常節(jié)點(diǎn)的連接,以便為沒有問題歷史的節(jié)點(diǎn)騰出空間(除非行為不正常的節(jié)點(diǎn)以其他方式幫助你的節(jié)點(diǎn)。此前,Bitcoin Core在一段時(shí)間內(nèi)(默認(rèn)為1天)禁止了行為不端對等節(jié)點(diǎn)的IP地址,這很容易被擁有多個(gè)IP地址的攻擊者規(guī)避。如果手動(dòng)禁止某個(gè)對等節(jié)點(diǎn),例如使用 setban RPC,則來自該對等節(jié)點(diǎn)的所有連接仍將被拒絕。
錢包
第一次使用HD種子時(shí),需要升級密鑰元數(shù)據(jù)。對于未加密的錢包,這將在錢包加載時(shí)發(fā)生。對于加密錢包,這將在錢包首次解鎖時(shí)發(fā)生。
安全性
這個(gè)版本將OpenSSL中使用的隨機(jī)數(shù)生成器(RNG)更改為Bitcoin Core自己的實(shí)現(xiàn)(盡管Bitcoin Core收集的熵,被輸出到OpenSSL,然后在程序需要強(qiáng)隨機(jī)性時(shí)重新讀?。?。這使得Bitcoin Core更接近于不再依賴于OpenSSL,這是一種過去引起安全問題的依賴關(guān)系。
評論