比特币0.19.0版本Core客户端正式发布,默认启用bech32地址格式并禁用BIP70
据比特币Core协议首席维护者Wladimir J. van der Laan在github透露,Bitcoin Core最新版本客户端0.19.0日前已正式发布,这一版本客户端不仅提供了一些新的功能(例如BIP158区块过滤器),其还部分提升了比特币的隐私功能,值得注意的是,新版本客户端默认启用了兼容隔离见证的 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
-
getbalances
返回一个包含所有余额的对象(mine
,untrusted_pending
以及immature
)。有关详细信息,请参阅getbalances的RPC帮助部分。新的RPC旨在替换getbalance
,getunconfirmedbalance
以及getwalletinfo
中的balance字段。这些旧的调用和字段可能在将来的版本中会被删除。(#15930,#16239) -
setwalletflag
设置和消除钱包flag,启用或禁用特定于现有钱包的特性,如在这些发布说明中其它地方记录的新avoid_reuse
功能。 (#13756) -
getblockfilter
获取指定区块的BIP158过滤器。仅当已使用-blockfilterindex
配置选项创建区块过滤器时,才启用此RPC。(#14121)
3、3 新的设置
-
-blockfilterindex
允许为整个区块链创建BIP158区块过滤器。过滤器将在后台创建,目前其使用会大约占用4GB的空间。注意:虽然本地用户可使用getblockfilter
RPC获得区块过滤器,但此版本的Bitcoin Core不在P2P网络上提供区块过滤器。(#14121)
3、4 更新的设置
-
whitebind
和whitelist
现在接受一个权限列表,以提供使用指定接口或IP地址进行连接的对等方。如果没有使用地址或CIDR网络指定权限,则隐式默认权限与早期版本相同。有关可用权限的详细信息,请参见这两个选项的bitcoind -help
输出(#16248) -
设置自定义
dbcache
值的用户,可以在不使用任何实际内存的情况下稍微增加设置。最近的变化减少了大约9%的内存使用,并使链式状态计算更加准确(以前它低估了内存的使用)。例如,如果之前设置的值为“450”,使用大约相同的实际内存量,你现在可设置的值为"500"。 (#16957)
3、5 更新的RPC
注:一些主要用于测试的低level RPC更改,放到了下面的低level更改部分内容中。-
sendmany
不再有minconf
参数。这个参数没有很好地指定,即使钱包的币选择成功,也会导致RPC错误。想要影响币选择的用户,可使用现在的-spendzeroconfchange
,-limitancestorcount
,-limitdescendantcount
以及-walletrejectlongchains
配置参数。 (#15596) -
getbalance
和sendtoaddress
,加上新的RPCgetbalances
和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
时,此字段等效于RPCdecoderawtransaction
或RPCgetrawtransaction
。 (#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更改日志(略)
有兴趣的读者可以查看原文:https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.19.0.md
六、参与贡献的开发者名单
感谢所有直接参与此次软件发布的开发者,他们是: (译者注:排名不分先后)
- 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