據(jù)比特幣Core協(xié)議首席維護者Wladimir J van der Laan在github透露,Bitcoin Core最新版本客戶端0 19 0日前已正式完成,這一版本客戶端不僅
據(jù)比特幣Core協(xié)議首席維護者Wladimir J. van der Laan在github透露,Bitcoin Core最新版本客戶端0.19.0日前已正式完成,這一版本客戶端不僅提供了一些新的功能(例如BIP158區(qū)塊過濾器,用于替代BIP 37的Bloom過濾器),其還部分提升了比特幣的隱私特性,值得注意的是,新版本客戶端默認啟用了兼容隔離見證的bech32地址格式,并默認禁用了BIP70支付請求協(xié)議。
據(jù)悉,比特幣下一個重要版本客戶端 v 0.20.0,預(yù)計將于2020年5月份發(fā)布。
以下是0.19.0版本core客戶端的具體更新說明:
比特幣0.19.0版本Core客戶端現(xiàn)可通過以下網(wǎng)址獲得:
https://bitcoin core.org/bin/bitcoin-core-0.19.0/
此版本更新,包括了新的功能、各種bug修復、性能提升以及翻譯更新。
開發(fā)者可使用GitHub的問題跟蹤器上報錯誤:
https://github.com/bitcoin/bitcoin/issues
若要接受安全及更新通知,請訂閱:
https://bitcoincore.org/en/list/announcements/join/
一、如何更新
如果你運行的是舊版本客戶端,請關(guān)閉它,直至其完全關(guān)閉(舊版本可能需要幾分鐘的時間),然后再運行安裝程序(Windows)或拷貝覆蓋至/Applications/Bitcoin-Qt(Mac系統(tǒng))或bitcoind/bitcoin-qt(Linux系統(tǒng))。
直接從舊版本的Bitcoin Core客戶端進行升級是可能的,但如果需要遷移datadir,則可能需要一些時間。舊版本的Bitcoin Core客戶端通常是支持的。
二、兼容性
Bitcoin Core客戶端已在多個操作系統(tǒng)上進行了廣泛測試,其中包括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版本,就無法運行高于0.17.0版本的Bitcoin Core客戶端,這是因為0.17.0是使用Qt 5.9.x構(gòu)建的,它并不支持低于10.10版本的macOS操作系統(tǒng)。
此外,當macOS“dark模式”被激活時,Bitcoin Core不會改變外觀。
運行macOS Catalina系統(tǒng)的用戶可能需要“右鍵單擊”,然后選擇“Open”以打開Bitcoin Core.dmg。這是因為蘋果公司提出了新的簽名要求,而Bitcoin Core項目目前還沒有遵守這一要求。
三、顯著的更改
3、1 新用戶文檔
降低內(nèi)存(Reduce memory)建議對在內(nèi)存有限系統(tǒng)上運行Bitcoin Core客戶端進行了配置調(diào)整。 (#16339)
3、2 新的RPC
1. getbalances返回一個包含所有余額的對象(mine, untrusted_pending以及immature)。有關(guān)詳細信息,請參閱getbalances的RPC幫助部分。新的RPC旨在替換getbalance, getunconfirmedbalance以及getwalletinfo中的balance字段。這些舊的調(diào)用和字段可能在將來的版本中會被刪除。(#15930,#16239)
2. setwalletflag 設(shè)置和消除錢包flag,啟用或禁用特定于現(xiàn)有錢包的特性,如在這些發(fā)布說明中其它地方記錄的新avoid_reuse功能。 (#13756)
3. getblockfilter 獲取指定區(qū)塊的BIP158過濾器。僅當已使用 -blockfilterindex配置選項創(chuàng)建區(qū)塊過濾器時,才啟用此RPC。(#14121)
3、3 新的設(shè)置
-blockfilterindex允許為整個區(qū)塊鏈創(chuàng)建BIP158區(qū)塊過濾器。過濾器將在后臺創(chuàng)建,目前其使用會大約占用4GB的空間。注意:雖然本地用戶可使用getblockfilter RPC獲得區(qū)塊過濾器,但此版本的Bitcoin Core不在P2P網(wǎng)絡(luò)上提供區(qū)塊過濾器。(#14121)
3、4 更新的設(shè)置
1. whitebind和whitelist現(xiàn)在接受一個權(quán)限列表,以提供使用指定接口或IP地址進行連接的對等方。如果沒有使用地址或CIDR網(wǎng)絡(luò)指定權(quán)限,則隱式默認權(quán)限與早期版本相同。有關(guān)可用權(quán)限的詳細信息,請參見這兩個選項的bitcoind -help 輸出(#16248)
2. 設(shè)置自定義dbcache值的用戶,可以在不使用任何實際內(nèi)存的情況下稍微增加設(shè)置。最近的變化減少了大約9%的內(nèi)存使用,并使鏈式狀態(tài)計算更加準確(以前它低估了內(nèi)存的使用)。例如,如果之前設(shè)置的值為“450”,使用大約相同的實際內(nèi)存量,你現(xiàn)在可設(shè)置的值為"500"。 (#16957)
3、5 更新的RPC
注:一些主要用于測試的低level RPC更改,放到了下面的低level更改部分內(nèi)容中。
sendmany不再有minconf參數(shù)。這個參數(shù)沒有很好地指定,即使錢包的幣選擇成功,也會導致RPC錯誤。想要影響幣選擇的用戶,可使用現(xiàn)在的-spendzeroconfchange,-limitancestorcount, -limitdescendantcount以及-walletrejectlongchains配置參數(shù)。 (#15596)
getbalance和sendtoaddress,加上新的RPC getbalances和createwallet,現(xiàn)在接受一個“avoid_reuse”參數(shù),該參數(shù)控制是否應(yīng)在操作中包含已經(jīng)使用的地址。此外,即使尚未通過 -avoidpartialspends命令行標志啟用此功能,當啟用avoid_reuse時,sendtoaddress也將避免部分開銷,因為不這樣做可能會在地址重用的情況下使用“錯誤”的UTXO。(#13756)
帶有include_watch only參數(shù)或includeWatching選項的RPC,現(xiàn)在對于只讀錢包默認為true。受影響的RPC有:getbalance, listreceivedbyaddress, listreceivedbylabel, listtransactions, listsinceblock, gettransaction, walletcreatefundedpsbt以及fundrawtransaction。 (#16383)
如果錢包標志"avoid_reuse" 被啟用了,listunspent現(xiàn)在為每個輸出返回一個“reused”bool。(#13756)
getblockstats現(xiàn)在使用BlockUndo數(shù)據(jù)代替交易索引,使其更快,而不再依賴于 -txindex配置選項,并且所有未修剪的區(qū)塊都有此功能。(#14802)
utxoupdatepsbt現(xiàn)在接受一個descriptors參數(shù),該參數(shù)將在已知時填寫輸入和輸出腳本和Key。當提供一個描述符來顯示它們正在使用隔離見證(segwit )輸出時,P2SH-witness輸入將從UTXO集中填充。有關(guān)詳細信息,請參閱RPC幫助文本。(#15427)
如果交易費超過配置選項-maxtxfee的值,sendrawtransaction和 testmempoolaccept將不再接受allowhighfees參數(shù)以使mempool接受失敗。當使用maxfeerate參數(shù)調(diào)用任何一個RPC時,現(xiàn)在有一個硬編碼的預(yù)設(shè)最大費率可被更改。(#15620)
除非使用配置選項-deprecatedrpc=size,否則getmempoolancestors、getmempooldescendants、getmempoolentry以及getrawmempool不再返回范圍字段。相反,將返回新的vsize字段和交易的虛擬大小(與其它RPC如getrawtransaction一致)。(#15637)
getwalletinfo現(xiàn)在包含一個scanning字段,該字段可為false(不掃描),也可包含錢包掃描歷史記錄區(qū)塊的持續(xù)時間和進度信息的對象,以查看影響其余額的交易。(#15730)
gettransaction現(xiàn)在接受第三個 (布爾)參數(shù)verbose。如果設(shè)置為true,則將向包含解碼交易的響應(yīng)中添加新的解碼字段。傳遞verbose時,此字段等效于RPC decoderawtransaction或RPC getrawtransaction。 (#16185, #16866, #16873)
createwallet接受一個新的passphrase參數(shù)。如果設(shè)置,這將創(chuàng)建用給定密碼短語加密的新錢包。如果未設(shè)置(默認設(shè)置)或設(shè)置為空字符串,則不會使用加密。(#16394)
getchaintxstats RPC 現(xiàn)在返回window_final_block_height的附加 key。(#16695)
getmempoolentry現(xiàn)在提供了一個weight字段,其中包含BIP141中定義的交易權(quán)重。(#16647)
getnetworkinfo和getpeerinfo命令現(xiàn)在包含一個帶有解碼網(wǎng)絡(luò)服務(wù)標志的新字段。(#16786)
getdescriptorinfo現(xiàn)在返回一個額外的checksum字段,該字段包含用戶提供的未修改描述符的校驗和。(#15986)
joinpsbts現(xiàn)在對結(jié)果連接的PSBT輸入和輸出順序進行無序處理。而在以前,輸入和輸出是按提供PSBT的順序添加的,這使得輸入與輸出的關(guān)聯(lián)是容易的,從而對隱私不利(譯者注:即新的joinpsbts增強了隱私保護)。
如果-walletrbf配置選項設(shè)置為true,walletcreatefundedpsbt現(xiàn)在會發(fā)出BIP125 費用替代法(Replace-by-Fee)信號。(#15911)
3、6 GUI(圖形用戶界面)更改
GUI錢包現(xiàn)在默認提供bech32地址,用戶可以在invoice生成期間使用GUI切換更改地址類型,或者使用-addresstype配置選項更改默認地址類型。(#15711, #16497)
在0.18.0版本錢包中,./configure標志被引入了,以允許在GUI中禁用BIP70支持(默認情況下已啟用支持)。而在0.19.0版本錢包中,此標志現(xiàn)在默認為禁用。如果要在GUI中編譯支持BIP70,你可以將--enable-bip70傳遞給./configure。 (#15584)
3、7 廢棄或刪除的配置選項
-mempoolreplacement已被移除,盡管默認節(jié)點行為保持不變。此選項以前允許用戶阻止節(jié)點接受或中繼BIP125交易替換。它與繼續(xù)存在的配置選項-walletrbf不同。(#16171)
3、8 廢棄或刪除的RPC
bumpfee不再接受totalFee選項,除非指定了配置參數(shù)deprecatedrpc=totalFee,此參數(shù)將在后續(xù)版本中被完全刪除。 (#15996)
bumpfee有一個新的fee_rate選項來替代已棄用的totalFee。(#16727)
generate在Bitcoin Core 0.18版本中被棄用后,現(xiàn)在已被正式移除。請改用generatetoaddress RPC。 (#15492)
3、9 P2P更改
BIP 61拒絕消息在0.18版本中被棄用,它們現(xiàn)在為默認禁用,但你可通過設(shè)置-enablebip61 命令行選項來啟用它。BIP61拒絕消息將在未來版本的客戶端中被完全刪除。 (#14054)
為了消除Bitcoin Core中眾所周知的拒絕服務(wù)向量,特別是對于具有spinning disk的節(jié)點,新版本客戶端已將-peerbloomfilters配置選項的默認值更改為false。這可防止比特幣Core客戶端發(fā)送BIP111 NODE_BLOOM服務(wù)標志、接受BIP37 BLOOM過濾器或服務(wù)merkle區(qū)塊或與BLOOM過濾器匹配的交易。
而仍希望提供BLOOM過濾器支持的用戶,可以將配置選項設(shè)置為true,以重新啟用對BIP111和BIP37的支持,或者使用本發(fā)布說明中其他地方描述的更新的-whitebind和-whitelist配置選項僅對特定對等方啟用BIP37支持。在不久的將來,使用公共BIP111/BIP37節(jié)點的輕客戶端,應(yīng)該仍能夠連接到較早版本的Bitcoin Core和手動啟用BIP37支持的節(jié)點,但此類軟件的開發(fā)人員,應(yīng)考慮遷移到使用特定BIP37節(jié)點或替代的交易過濾系統(tǒng)。(#16152)
默認情況下,Bitcoin Core客戶端現(xiàn)在將建立兩個專門用于區(qū)塊中繼的額外出站連接。不會在這些連接上處理任何交易或地址信息。這些連接旨在增加很少的額外內(nèi)存或帶寬資源需求,但會使某些分區(qū)攻擊(partitioning attack)更難執(zhí)行。 (#15759)
3、10 雜項CLI更改
bitcoin-cli -getinfo中的testnet字段已重命名為chain,現(xiàn)在返回BIP70(main、test、regtest)中定義的當前網(wǎng)絡(luò)名。 (#15566)
四、低level更改
4、1 RPC
getblockchaininfo不再返回bip9_softforks對象。相反,信息被移動到softforks對象中,另外一個type字段描述了Bitcoin Core客戶端如何確定該軟分叉是否處于活動狀態(tài)(例如BIP9或BIP90)。有關(guān)詳細信息,請參閱RPC幫助。(#16060)
getblocktemplate不再返回包含CSV和segwit(當前處于活動狀態(tài)的BIP9部署)的rules數(shù)組。(#16060)
getrpcinfo現(xiàn)在返回一個logpath字段,路徑為debug.log。(#15483)
4、2 測試
由-regtest命令行標志啟用的退化測試鏈,現(xiàn)在要求交易在默認情況下不違反標準策略。這與主網(wǎng)使用的默認值相同,使在regtest測試網(wǎng)上測試主網(wǎng)行為變得更容易。請注意,默認情況下,測試網(wǎng)仍然允許非標準交易,并且可使用-acceptnonstdtxn命令行標志為兩個測試鏈本地調(diào)整策略。(#15891)
4、3 配置
在默認部分中指定,但未在網(wǎng)絡(luò)特定部分(例如測試網(wǎng))中指定的設(shè)置,現(xiàn)在將產(chǎn)生一個阻止啟動的錯誤,而不僅僅是一個警告,除非網(wǎng)絡(luò)是主網(wǎng)。這將防止針對主網(wǎng)的設(shè)置,應(yīng)用于測試網(wǎng)或regtest測試網(wǎng)。 (#15629)
在支持thread_local的平臺上,可以在日志行前面加上導致日志線程的名稱。要啟用此行為,請使用 -logthreadnames=1 。(#15849)
4、4 網(wǎng)絡(luò)
當獲取由多個對等節(jié)點宣布的交易時,Bitcoin Core早期版本的客戶端將按接收到這些對等方的通知順序,然后依次下載交易,直到接收到該交易為止。而在新版本客戶端中,下載邏輯已更改為隨機獲取方式,并傾向于將下載請求發(fā)送到出站對等端而不是入站對等端。這修復了入站對等方可能阻止節(jié)點獲取交易的問題。 (#14897, #15834)
如果用戶正在使用Tor隱藏服務(wù),Bitcoin Core客戶端也將綁定到標準端口8333(即使為透明網(wǎng)連接配置了不同的端口),這可防止通過使用相同的非默認端口號泄漏節(jié)點身份。(#15651)
4、5 Mempool 和交易中繼
允許每個包(package)有一筆額外的單一祖先交易。以前,如果mempool中的一筆交易有25筆子代交易,或者它和它的所有子代交易都超過 101,000 vbyte,那么作為子代交易,新接受的交易都將被忽略?,F(xiàn)在,新客戶端將允許一筆額外的子代交易,前提是它是直接子代,并且子代交易的大小不超過10,000 vbyte。
這使得像閃電網(wǎng)絡(luò)這樣的兩方合約協(xié)議,可以為每個參與者提供一個子付(Child-Pays-For-Parent)費用的輸出,而不允許一個惡意參與者填滿整個包(package),從而防止另一個參與者花費他們的輸出。 (#15681)
輸出為v1到v16 witness版本(未來的隔離見證版本)的交易,現(xiàn)在被接受到mempool中,進行中繼和挖礦操作。試圖使用這些輸出仍然被政策所禁止。當這一變化被廣泛應(yīng)用時,錢包和服務(wù)可以接受任何有效的bech32比特幣地址,而無需擔心未來版本的隔離見證交易支付將陷入未經(jīng)確認的狀態(tài)。 (#15846)
傳統(tǒng)交易(沒有隔離見證輸入的交易)現(xiàn)在必須使用傳統(tǒng)編碼格式發(fā)送,強制執(zhí)行BIP144中指定的規(guī)則。(#14039)
4、5 錢包
在修剪模式下,由importwallet、importpubkey、importaddress或importprivkey RPC觸發(fā)的重新掃描(rescan)只有在區(qū)塊被修剪時才會失敗。以前當-prune被設(shè)置時,它才會失敗,此更改允許將-prune設(shè)置為高值(例如磁盤大小),而在第一個區(qū)塊被修剪之前,對任何導入RPC的調(diào)用都不會失敗。(#15870)
創(chuàng)建費用高于-maxtxfee (默認為0.1btc)的交易時,RPC命令 walletcreatefundedpsbt和fundrawtransaction現(xiàn)在將失敗,而不是降低費用。請注意,feeRate參數(shù)是以每1,000 vbyte的BTC指定的,而不是以每vbyte的satoshi指定的。(#16257)
添加了一個新的錢包標志avoid_reuse(默認為關(guān)閉),啟用它后,錢包將區(qū)分已使用和未使用的地址,并默認在幣選擇中不使用前者。當在現(xiàn)有錢包上設(shè)置此標志時,需要重新掃描區(qū)塊鏈以正確標記先前使用的目的地。再加上 "避免部分支出" (在Bitcoin Core v0.17.0中添加的功能),這可以消除一個嚴重的隱私問題,即惡意用戶可通過將小額支付發(fā)送到先前支付的地址(該地址隨后將包含在未來支付的無關(guān)輸入中)來跟蹤支出。(#13756)
4、6 開發(fā)系統(tǒng)更改
目前項目的開發(fā),Python需要>=3.5版本。這包括構(gòu)建系統(tǒng)、測試框架和linter。之前支持的最低值 (3.4版本)已經(jīng)在2019年3月被棄用。(#14954)
支持的miniUPnPc API 版本,最低為10。這與Ubuntu 16.04 LTS和Debian 8 libminiupnpc-dev包保持兼容。請注意,在Debian上,此軟件包仍然易受CVE-2017-8798(僅限于jessie)和CVE-2017-1000494(包括jessie和stretch版)的攻擊。(#15993)(灑脫喜)
五、0.19.0更改日志(略)
六、參與貢獻的開發(fā)者名單
感謝所有直接參與此次軟件發(fā)布的開發(fā)者,他們是: (譯者注:排名不分先后)
251
Aaron Clauson
Akio Nakamura
Alistair Mann
Amiti Uttarwar
Andrew Chow
andrewtoth
Anthony Towns
Antoine Riard
Aseem Sood
Ben Carman
Ben Woosley
bpay
Carl Dong
Carnhof Daki
Chris Capobianco
Chris Moore
Chuf
clashic
clashicly
Cory Fields
Daki Carnhof
Dan Gershony
Daniel Edgecumbe
Daniel Kraft
Daniel McNally
darosior
David A. Harding
David Reikher
Douglas Roark
Elichai Turkel
Emil
Emil Engler
ezegom
Fabian Jahr
fanquake
Felix Weis
Ferdinando M. Ametrano
fridokus
gapeman
GChuf
Gert-Jaap Glasbergen
Giulio Lombardo
Glenn Willen
Graham Krizek
Gregory Sanders
grim-trigger
gwillen
Hennadii Stepanov
Jack Mallers
James Hilliard
James O'Beirne
Jan Beich
Jeremy Rubin
JeremyRand
Jim Posen
John Bampton
John Newbery
Jon Atack
Jon Layton
Jonas Schnelli
Jonathan "Duke" Leto
João Barbosa
Joonmo Yang
Jordan Baczuk
Jorge Timón
Josu Goñi
Julian Fleischer
Karl-Johan Alm
Kaz Wesley
keepkeyjon
Kirill Fomichev
Kristaps Kaupe
Kristian Kramer
Larry Ruane
Lenny Maiorani
LongShao007
Luca Venturini
lucash-dev
Luke Dashjr
marcoagner
MarcoFalke
marcuswin
Martin Ankerl
Martin Zumsande
Matt Corallo
MeshCollider
Michael Folkson
Miguel Herranz
Nathan Marley
Neha Narula
nicolas.dorier
Nils Loewen
nkostoulas
orient
Patrick Strateman
Peter Bushnell
Peter Wagner
Pieter Wuille
practicalswift
qmma
r8921039
RJ Rybarczyk
Russell Yanofsky
Samuel Dobson
Sebastian Falbesoner
setpill
shannon1916
Sjors Provoost
soroosh-sdi
Steven Roose
Suhas Daftuar
tecnovert
THETCR
Tim Ruffing
Tobias Kaderle
Torkel Rogstad
Ulrich Kempken
whythat
William Casarin
Wladimir J. van der Laan
zenosage