【摘要】 据比特币Core协议首席维护者Wladimir J van der Laan在github透露,Bitcoin Core最新版本客户端0 19 0日前已正式完成,这一版
据比特币Core协议首席维护者Wladimir J. van der Laan在github透露,Bitcoin Core最新版本客户端0.19.0日前已正式完成,这一版本客户端不仅提供了一些新的功能(例如BIP158区块过滤器,用于替代BIP 37的Bloom过滤器),其还部分提升了比特币的隐私特性,值得注意的是,新版本客户端默认启用了兼容隔离见证的bech32地址格式,并默认禁用了BIP70支付请求协议。
据悉,比特币下一个重要版本客户端 v 0.20.0,预计将于2020年5月份发布。
以下是0.19.0版本core客户端的具体更新说明:
比特币0.19.0版本Core客户端现可通过以下网址获得:
https://bitcoin core.org/bin/bitcoin-core-0.19.0/
此版本更新,包括了新的功能、各种bug修复、性能提升以及翻译更新。
开发者可使用GitHub的问题跟踪器上报错误:
https://github.com/bitcoin/bitcoin/issues
若要接受安全及更新通知,请订阅:
https://bitcoincore.org/en/list/announcements/join/
一、如何更新
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(Windows)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
直接从旧版本的Bitcoin Core客户端进行升级是可能的,但如果需要迁移datadir,则可能需要一些时间。旧版本的Bitcoin Core客户端通常是支持的。
二、兼容性
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统。不建议在不支持的系统上使用Bitcoin Core客户端。
Bitcoin Core在其他类似Unix系统的OS上也是可工作的, 但测试相对较少。
需要注意的是,macOS操作系统低于10.10版本,就无法运行高于0.17.0版本的Bitcoin Core客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
此外,当macOS“dark模式”被激活时,Bitcoin Core不会改变外观。
运行macOS Catalina系统的用户可能需要“右键单击”,然后选择“Open”以打开Bitcoin Core.dmg。这是因为苹果公司提出了新的签名要求,而Bitcoin Core项目目前还没有遵守这一要求。
三、显著的更改
3、1 新用户文档
降低内存(Reduce memory)建议对在内存有限系统上运行Bitcoin Core客户端进行了配置调整。 (#16339)
3、2 新的RPC
1. getbalances返回一个包含所有余额的对象(mine, untrusted_pending以及immature)。有关详细信息,请参阅getbalances的RPC帮助部分。新的RPC旨在替换getbalance, getunconfirmedbalance以及getwalletinfo中的balance字段。这些旧的调用和字段可能在将来的版本中会被删除。(#15930,#16239)
2. setwalletflag 设置和消除钱包flag,启用或禁用特定于现有钱包的特性,如在这些发布说明中其它地方记录的新avoid_reuse功能。 (#13756)
3. getblockfilter 获取指定区块的BIP158过滤器。仅当已使用 -blockfilterindex配置选项创建区块过滤器时,才启用此RPC。(#14121)
3、3 新的设置
-blockfilterindex允许为整个区块链创建BIP158区块过滤器。过滤器将在后台创建,目前其使用会大约占用4GB的空间。注意:虽然本地用户可使用getblockfilter RPC获得区块过滤器,但此版本的Bitcoin Core不在P2P网络上提供区块过滤器。(#14121)
3、4 更新的设置
1. whitebind和whitelist现在接受一个权限列表,以提供使用指定接口或IP地址进行连接的对等方。如果没有使用地址或CIDR网络指定权限,则隐式默认权限与早期版本相同。有关可用权限的详细信息,请参见这两个选项的bitcoind -help 输出(#16248)
2. 设置自定义dbcache值的用户,可以在不使用任何实际内存的情况下稍微增加设置。最近的变化减少了大约9%的内存使用,并使链式状态计算更加准确(以前它低估了内存的使用)。例如,如果之前设置的值为“450”,使用大约相同的实际内存量,你现在可设置的值为"500"。 (#16957)
3、5 更新的RPC
注:一些主要用于测试的低level RPC更改,放到了下面的低level更改部分内容中。
sendmany不再有minconf参数。这个参数没有很好地指定,即使钱包的币选择成功,也会导致RPC错误。想要影响币选择的用户,可使用现在的-spendzeroconfchange,-limitancestorcount, -limitdescendantcount以及-walletrejectlongchains配置参数。 (#15596)
getbalance和sendtoaddress,加上新的RPC getbalances和createwallet,现在接受一个“avoid_reuse”参数,该参数控制是否应在操作中包含已经使用的地址。此外,即使尚未通过 -avoidpartialspends命令行标志启用此功能,当启用avoid_reuse时,sendtoaddress也将避免部分开销,因为不这样做可能会在地址重用的情况下使用“错误”的UTXO。(#13756)
带有include_watch only参数或includeWatching选项的RPC,现在对于只读钱包默认为true。受影响的RPC有:getbalance, listreceivedbyaddress, listreceivedbylabel, listtransactions, listsinceblock, gettransaction, walletcreatefundedpsbt以及fundrawtransaction。 (#16383)
如果钱包标志"avoid_reuse" 被启用了,listunspent现在为每个输出返回一个“reused”bool。(#13756)
getblockstats现在使用BlockUndo数据代替交易索引,使其更快,而不再依赖于 -txindex配置选项,并且所有未修剪的区块都有此功能。(#14802)
utxoupdatepsbt现在接受一个descriptors参数,该参数将在已知时填写输入和输出脚本和Key。当提供一个描述符来显示它们正在使用隔离见证(segwit )输出时,P2SH-witness输入将从UTXO集中填充。有关详细信息,请参阅RPC帮助文本。(#15427)
如果交易费超过配置选项-maxtxfee的值,sendrawtransaction和 testmempoolaccept将不再接受allowhighfees参数以使mempool接受失败。当使用maxfeerate参数调用任何一个RPC时,现在有一个硬编码的预设最大费率可被更改。(#15620)
除非使用配置选项-deprecatedrpc=size,否则getmempoolancestors、getmempooldescendants、getmempoolentry以及getrawmempool不再返回范围字段。相反,将返回新的vsize字段和交易的虚拟大小(与其它RPC如getrawtransaction一致)。(#15637)
getwalletinfo现在包含一个scanning字段,该字段可为false(不扫描),也可包含钱包扫描历史记录区块的持续时间和进度信息的对象,以查看影响其余额的交易。(#15730)
gettransaction现在接受第三个 (布尔)参数verbose。如果设置为true,则将向包含解码交易的响应中添加新的解码字段。传递verbose时,此字段等效于RPC decoderawtransaction或RPC getrawtransaction。 (#16185, #16866, #16873)
createwallet接受一个新的passphrase参数。如果设置,这将创建用给定密码短语加密的新钱包。如果未设置(默认设置)或设置为空字符串,则不会使用加密。(#16394)
getchaintxstats RPC 现在返回window_final_block_height的附加 key。(#16695)
getmempoolentry现在提供了一个weight字段,其中包含BIP141中定义的交易权重。(#16647)
getnetworkinfo和getpeerinfo命令现在包含一个带有解码网络服务标志的新字段。(#16786)
getdescriptorinfo现在返回一个额外的checksum字段,该字段包含用户提供的未修改描述符的校验和。(#15986)
joinpsbts现在对结果连接的PSBT输入和输出顺序进行无序处理。而在以前,输入和输出是按提供PSBT的顺序添加的,这使得输入与输出的关联是容易的,从而对隐私不利(译者注:即新的joinpsbts增强了隐私保护)。
如果-walletrbf配置选项设置为true,walletcreatefundedpsbt现在会发出BIP125 费用替代法(Replace-by-Fee)信号。(#15911)
3、6 GUI(图形用户界面)更改
GUI钱包现在默认提供bech32地址,用户可以在invoice生成期间使用GUI切换更改地址类型,或者使用-addresstype配置选项更改默认地址类型。(#15711, #16497)
在0.18.0版本钱包中,./configure标志被引入了,以允许在GUI中禁用BIP70支持(默认情况下已启用支持)。而在0.19.0版本钱包中,此标志现在默认为禁用。如果要在GUI中编译支持BIP70,你可以将--enable-bip70传递给./configure。 (#15584)
3、7 废弃或删除的配置选项
-mempoolreplacement已被移除,尽管默认节点行为保持不变。此选项以前允许用户阻止节点接受或中继BIP125交易替换。它与继续存在的配置选项-walletrbf不同。(#16171)
3、8 废弃或删除的RPC
bumpfee不再接受totalFee选项,除非指定了配置参数deprecatedrpc=totalFee,此参数将在后续版本中被完全删除。 (#15996)
bumpfee有一个新的fee_rate选项来替代已弃用的totalFee。(#16727)
generate在Bitcoin Core 0.18版本中被弃用后,现在已被正式移除。请改用generatetoaddress RPC。 (#15492)
3、9 P2P更改
BIP 61拒绝消息在0.18版本中被弃用,它们现在为默认禁用,但你可通过设置-enablebip61 命令行选项来启用它。BIP61拒绝消息将在未来版本的客户端中被完全删除。 (#14054)
为了消除Bitcoin Core中众所周知的拒绝服务向量,特别是对于具有spinning disk的节点,新版本客户端已将-peerbloomfilters配置选项的默认值更改为false。这可防止比特币Core客户端发送BIP111 NODE_BLOOM服务标志、接受BIP37 BLOOM过滤器或服务merkle区块或与BLOOM过滤器匹配的交易。
而仍希望提供BLOOM过滤器支持的用户,可以将配置选项设置为true,以重新启用对BIP111和BIP37的支持,或者使用本发布说明中其他地方描述的更新的-whitebind和-whitelist配置选项仅对特定对等方启用BIP37支持。在不久的将来,使用公共BIP111/BIP37节点的轻客户端,应该仍能够连接到较早版本的Bitcoin Core和手动启用BIP37支持的节点,但此类软件的开发人员,应考虑迁移到使用特定BIP37节点或替代的交易过滤系统。(#16152)
默认情况下,Bitcoin Core客户端现在将建立两个专门用于区块中继的额外出站连接。不会在这些连接上处理任何交易或地址信息。这些连接旨在增加很少的额外内存或带宽资源需求,但会使某些分区攻击(partitioning attack)更难执行。 (#15759)
3、10 杂项CLI更改
bitcoin-cli -getinfo中的testnet字段已重命名为chain,现在返回BIP70(main、test、regtest)中定义的当前网络名。 (#15566)
四、低level更改
4、1 RPC
getblockchaininfo不再返回bip9_softforks对象。相反,信息被移动到softforks对象中,另外一个type字段描述了Bitcoin Core客户端如何确定该软分叉是否处于活动状态(例如BIP9或BIP90)。有关详细信息,请参阅RPC帮助。(#16060)
getblocktemplate不再返回包含CSV和segwit(当前处于活动状态的BIP9部署)的rules数组。(#16060)
getrpcinfo现在返回一个logpath字段,路径为debug.log。(#15483)
4、2 测试
由-regtest命令行标志启用的退化测试链,现在要求交易在默认情况下不违反标准策略。这与主网使用的默认值相同,使在regtest测试网上测试主网行为变得更容易。请注意,默认情况下,测试网仍然允许非标准交易,并且可使用-acceptnonstdtxn命令行标志为两个测试链本地调整策略。(#15891)
4、3 配置
在默认部分中指定,但未在网络特定部分(例如测试网)中指定的设置,现在将产生一个阻止启动的错误,而不仅仅是一个警告,除非网络是主网。这将防止针对主网的设置,应用于测试网或regtest测试网。 (#15629)
在支持thread_local的平台上,可以在日志行前面加上导致日志线程的名称。要启用此行为,请使用 -logthreadnames=1 。(#15849)
4、4 网络
当获取由多个对等节点宣布的交易时,Bitcoin Core早期版本的客户端将按接收到这些对等方的通知顺序,然后依次下载交易,直到接收到该交易为止。而在新版本客户端中,下载逻辑已更改为随机获取方式,并倾向于将下载请求发送到出站对等端而不是入站对等端。这修复了入站对等方可能阻止节点获取交易的问题。 (#14897, #15834)
如果用户正在使用Tor隐藏服务,Bitcoin Core客户端也将绑定到标准端口8333(即使为透明网连接配置了不同的端口),这可防止通过使用相同的非默认端口号泄漏节点身份。(#15651)
4、5 Mempool 和交易中继
允许每个包(package)有一笔额外的单一祖先交易。以前,如果mempool中的一笔交易有25笔子代交易,或者它和它的所有子代交易都超过 101,000 vbyte,那么作为子代交易,新接受的交易都将被忽略。现在,新客户端将允许一笔额外的子代交易,前提是它是直接子代,并且子代交易的大小不超过10,000 vbyte。
这使得像闪电网络这样的两方合约协议,可以为每个参与者提供一个子付(Child-Pays-For-Parent)费用的输出,而不允许一个恶意参与者填满整个包(package),从而防止另一个参与者花费他们的输出。 (#15681)
输出为v1到v16 witness版本(未来的隔离见证版本)的交易,现在被接受到mempool中,进行中继和挖矿操作。试图使用这些输出仍然被政策所禁止。当这一变化被广泛应用时,钱包和服务可以接受任何有效的bech32比特币地址,而无需担心未来版本的隔离见证交易支付将陷入未经确认的状态。 (#15846)
传统交易(没有隔离见证输入的交易)现在必须使用传统编码格式发送,强制执行BIP144中指定的规则。(#14039)
4、5 钱包
在修剪模式下,由importwallet、importpubkey、importaddress或importprivkey RPC触发的重新扫描(rescan)只有在区块被修剪时才会失败。以前当-prune被设置时,它才会失败,此更改允许将-prune设置为高值(例如磁盘大小),而在第一个区块被修剪之前,对任何导入RPC的调用都不会失败。(#15870)
创建费用高于-maxtxfee (默认为0.1btc)的交易时,RPC命令 walletcreatefundedpsbt和fundrawtransaction现在将失败,而不是降低费用。请注意,feeRate参数是以每1,000 vbyte的BTC指定的,而不是以每vbyte的satoshi指定的。(#16257)
添加了一个新的钱包标志avoid_reuse(默认为关闭),启用它后,钱包将区分已使用和未使用的地址,并默认在币选择中不使用前者。当在现有钱包上设置此标志时,需要重新扫描区块链以正确标记先前使用的目的地。再加上 "避免部分支出" (在Bitcoin Core v0.17.0中添加的功能),这可以消除一个严重的隐私问题,即恶意用户可通过将小额支付发送到先前支付的地址(该地址随后将包含在未来支付的无关输入中)来跟踪支出。(#13756)
4、6 开发系统更改
目前项目的开发,Python需要>=3.5版本。这包括构建系统、测试框架和linter。之前支持的最低值 (3.4版本)已经在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更改日志(略)
六、参与贡献的开发者名单
感谢所有直接参与此次软件发布的开发者,他们是: (译者注:排名不分先后)
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