概述
我们很高兴地宣布发布比特币核心 0.16.0,这是第一个包含默认钱包支持隔离见证(segwit)的比特币核心版本。该版本还包含以下描述的几个其他改进和错误修复。
最新版本可从 下载页面 下载。
以下部分描述了此版本中最重要的更改。有关完整详细信息,请参阅 发行说明。
隔离见证钱包
比特币核心 0.16.0 在钱包和用户界面中引入了对隔离见证的完全支持。已添加新的 -addresstype 参数,该参数支持 legacy、p2sh-segwit(默认)和 bech32 地址。它控制 getnewaddress、getaccountaddress 和 createmultisigaddress 生成的地址类型。还添加了 -changetype 参数,具有相同的选项,默认情况下等于 -addresstype,用于控制使用哪种类型的变更。
已向 getnewaddress 和 addmultisigaddress RPC 添加了新的 address_type 参数,以指定要生成的地址类型。已向 fundrawtransaction RPC 添加了 change_type 参数,用于覆盖特定交易的 -changetype 参数。
- 通过
getnewaddress或*multisigRPC 创建的所有隔离见证地址都会将其赎回脚本明确添加到钱包文件中。这意味着在创建隔离见证地址后降级将起作用,只要钱包文件是最新的。 - 钱包中的所有隔离见证密钥都会添加一个隐式赎回脚本,而无需将其写入文件。这意味着恢复旧备份将起作用,只要您使用新的软件。
- 所有在交易中看到使用的密钥池密钥都会将其赎回脚本明确添加到钱包文件中。这意味着在从包含隔离见证地址的备份中恢复后降级将起作用。
请注意,某些 RPC 尚未支持隔离见证地址。值得注意的是,signmessage/verifymessage 不支持隔离见证地址,当前的 importmulti 也不支持。未来版本将继续添加对这些 RPC 中隔离见证的支持。
如果交易中的任何目标是 P2WPKH 或 P2WSH 输出,现在默认情况下会使用 P2WPKH 更改输出。这样做是为了确保在任何情况下,更改输出与其他输出尽可能难以区分。
BIP173 (Bech32) 地址支持(“bc1…” 地址)
现在已添加对原生隔离见证地址 (BIP173 / Bech32) 的完全支持。这包括能够发送到 BIP173 地址(包括非 v0 地址),以及生成这些地址(包括作为默认新地址,见上文)。
GUI 中添加了一个复选框,用于选择在使用隔离见证地址时生成 Bech32 地址还是 P2SH 封装地址。当使用 -addresstype=bech32 启动时,它默认情况下处于选中状态。当使用 -addresstype=legacy 启动时,它处于未选中状态且处于禁用状态。
默认情况下启用 HD 钱包
由于钱包数据库中存在向后不兼容的更改,因此使用版本 0.16.0 创建的钱包将被以前版本拒绝。此外,版本 0.16.0 将只创建分层确定性 (HD) 钱包。请注意,这仅适用于新钱包;使用以前版本创建的钱包不会升级为 HD 钱包。
GUI 中默认启用替换交易费用
发送屏幕现在默认使用 BIP125 RBF,无论 -walletrbf 如何。有一个复选框可以将交易标记为最终交易。
RPC 默认值保持不变:要使用 RBF,请使用 -walletrbf=1 启动,或对单个交易使用 replaceable 参数。
钱包目录配置
比特币核心现在对钱包目录的位置更加灵活。以前,钱包数据库文件存储在比特币数据目录的顶层。现在行为是
- 对于新安装(数据目录尚不存在),钱包现在默认情况下将存储在数据目录内的
wallets/子目录中。 - 对于现有节点(数据目录已存在),钱包默认情况下将存储在数据目录根目录中。如果数据目录根目录中已存在
wallets/子目录,则钱包默认情况下将存储在wallets/子目录中。 - 可以通过指定
-walletdir=<path>选项来覆盖钱包目录的位置,其中<path>可以是目录或目录符号链接的绝对路径。
在选择钱包目录位置时要格外小心,因为如果它在操作过程中变得不可用,资金可能会丢失。
支持向修剪节点发出信号(BIP159)
修剪节点现在可以使用服务位发出 BIP159 的 NODE_NETWORK_LIMITED 信号,为以后版本中对 BIP159 的完全支持做准备。这将允许修剪节点提供最新的区块。但是,当前更改尚不包括对连接到这些修剪对等体的支持。
性能:默认情况下启用 SHA256 汇编
现在默认情况下已启用支持 SSE4 的架构的 SHA256 哈希优化,这些优化在支持的硬件上会导致 SHA256 加速约 50%(同步和区块验证速度提高约 5%)。在以前的版本中,它们是在构建时使用 --enable-experimental-asm 标志启用的,但现在是默认值,不再被认为是实验性的。
GUI 更改
- GUI 中使用的“µBTC”现在还显示了 BIP176 中指定的更口语化的术语“比特”。
- 现在已删除了重用以前地址的选项。这在需要“重新发送”发票时是合理的,但现在我们有了请求历史,这个需求应该消失了。
- 已添加了按 TXID 搜索的支持,而不仅仅是地址和标签。
- 在发送代币对话框中添加了“使用可用余额”选项,以便将剩余的可用钱包余额添加到交易输出中。
- 在密码对话框中添加了一个切换按钮,用于在密码字段上启用/禁用蒙蔽。
新的 rescanblockchain RPC
添加了新的 RPC rescanblockchain,用于手动调用区块链重新扫描。RPC 支持重新扫描的开始和结束高度参数,可用于在多钱包环境中在运行时重新扫描区块链。
新的 savemempool RPC
添加了新的 savemempool RPC,允许随时将当前内存池保存到磁盘,以避免由于崩溃/断电而导致其丢失。
默认情况下禁用安全模式
安全模式现在默认情况下处于禁用状态,必须手动启用(使用 -disablesafemode=0),如果您希望使用它。安全模式是一项功能,如果检测到网络存在某些问题,它会自动禁用 RPC 调用的子集 - 主要与钱包和发送相关。但是,开发人员认为这些检查不够可靠,不能自动执行。即使安全模式被禁用,它们仍然会在 getneworkinfo RPC 的 warnings 字段中导致警告,并启动 -alertnotify 命令。
重命名用于创建 JSON-RPC 凭据的脚本
将 share/rpcuser/rpcuser.py 脚本重命名为 share/rpcauth/rpcauth.py。此脚本可用于为 JSON-RPC 用户创建 rpcauth 凭据。
validateaddress 改进
已扩展 validateaddress RPC 输出,添加了一些新字段,并支持隔离见证地址(P2SH 和 Bech32)。具体来说
- 对于 P2WPKH 和 P2WSH 地址(“bc1…” 地址),新的字段
iswitness为 True,但对于 P2SH 封装的隔离见证地址(见下文)则不为 True。 - 现有的字段
isscript现在也将为 P2WSH 地址报告 True。 - 对于所有脚本地址,如果脚本已知并与可解释为已知地址的内容匹配,则存在新的字段
embedded。这对 P2SH-P2WPKH 和 P2SH-P2WSH 地址尤其如此。embedded的值包含validateaddress直接在嵌入式地址上调用时会报告的许多信息。 - 对于多重签名脚本,添加了新的
pubkeys字段,该字段报告脚本中涉及的完整公钥(如果已知)。这是对现有addresses字段的替代(它报告相同的信息,但编码为 P2PKH 地址),以更实用且不易混淆的方式表示。为了向后兼容,addresses字段仍然存在于非隔离见证地址中。 - 对于所有具有已知密钥的单密钥地址(即使封装在 P2SH 或 P2WSH 中),
pubkey字段都将存在。特别地,这意味着在getnewaddress的输出上调用validateaddress将始终报告pubkey,即使地址类型为 P2SH-P2WPKH。
底层更改
- 已删除已弃用的 RPC
getinfo。建议使用更具体的 RPCgetblockchaininfogetnetworkinfogetwalletinfogetmininginfo
- 如果使用不在钱包中的地址调用钱包 RPC
getreceivedbyaddress,它将返回错误。 - 钱包 RPC
addwitnessaddress已弃用,将在版本 0.17 中删除,请设置getnewaddress的address_type参数,或选项-addresstype=[bech32|p2sh-segwit]。 dumpwallet现在会在转储文件中包含钱包中十六进制编码的脚本,而importwallet现在会导入这些脚本,但相应的地址可能无法正确添加,或者可能需要手动重新扫描才能找到相关交易。- RPC
getblockchaininfo现在包含一个errors字段。 - 新的
blockhash参数已添加到getrawtransactionRPC 中,它允许从已知特定块中提取原始交易,即使没有启用-txindex。 decoderawtransaction和fundrawtransactionRPC 现在具有可选的iswitness参数,以便在必要时覆盖启发式见证检查。walletpassphrase超时时间现在限制为 2^30 秒。- 使用
createmultisigRPC 中的地址现在已弃用,将在以后的版本中删除。应改为使用公钥。 - 区块链重新扫描现在不再锁定钱包以进行整个重新扫描过程,因此现在可以同时使用其他 RPC(尽管余额/交易的结果可能不正确或不完整,直到重新扫描完成)。
loggingRPC 现在已公开,而不是隐藏。- 已将
initialblockdownload布尔值添加到getblockchaininfoRPC 中,以指示节点当前是否处于 IBD 中。 minrelaytxfee现在包含在getmempoolinfo的输出中。
其他更改的命令行选项
-debuglogfile=<file>可用于指定备用调试日志文件。- bitcoin-cli 现在有一个
-stdinrpcpass选项,允许从标准输入读取 RPC 密码。 - 已删除
-usehd选项。 - bitcoin-cli 现在支持新的
-getinfo标志,它返回与现在已删除的getinfoRPC 类似的输出。
测试更改
- regtest JSON-RPC 的默认端口已更改为 18443,以避免与 testnet 的默认端口 18332 冲突。
- Segwit 现在默认情况下在 regtest 模式下始终处于活动状态。因此,如果您升级 regtest 节点,您需要 -reindex 或通过将
vbparams=segwit:0:999999999999添加到您的 regtest bitcoin.conf 中来使用旧规则。否则将导致 CheckBlockIndex() 断言失败,看起来像:Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)’ failed.
用于验证的哈希值
f51392e0cbf7940627944602a64890ed65cf44838fc4795d493cf12aafe37012 bitcoin-0.16.0-aarch64-linux-gnu.tar.gz
59f95da96f40b3a9acfeda9085e6389f2075ee40ef1fe7f023031f86c946c3ea bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz
d7c173e2921e39df3631b7cd652ae7330c2735b0b221f9dc8f7c899887b4fb59 bitcoin-0.16.0-i686-pc-linux-gnu.tar.gz
ade85a8e39de8c36a134721c3da9853a80f29a8625048e0c2a5295ca8b23a88c bitcoin-0.16.0-osx64.tar.gz
df0036bae9f40536095908c9944ed66c0946f178ae8ef07639caf25a390b2ee7 bitcoin-0.16.0-osx.dmg
8cbec0397d932cab7297a8c23c918392f6eebd410646b4b954787de9f4a3ee40 bitcoin-0.16.0.tar.gz
7558249b04527d7d0bf2663f9cfe76d6c5f83ae90e513241f94fda6151396a29 bitcoin-0.16.0-win32-setup.exe
60d65d6e57f42164e1c04bb5bb65156d87f0433825a1c1f1f5f6aebf5c8df424 bitcoin-0.16.0-win32.zip
6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d bitcoin-0.16.0-win64-setup.exe
42706da1a95b2db8c5808529f73c2063a0dd770f71e0c8506bfa86dc0f3403ef bitcoin-0.16.0-win64.zip
e6322c69bcc974a29e6a715e0ecb8799d2d21691d683eeb8fef65fc5f6a66477 bitcoin-0.16.0-x86_64-linux-gnu.tar.gz