区块链
根据Bitcoin Core开发团队的计划,0.18.0版本的比特币core软件将于4月3日左右正式发布,截至发稿时,其代码库的完成度已达到了96%。
以下为0.18.0版本发布草稿,读者可提前了解到该版本软件的更新内容。
(注:这只是一个临时版的说明,正式发布时可能会稍有不同)
读者可访问Bitcoin Core 0.18.0 版本客户端代码库:
https://bitcoincore.org/bin/bitcoin-core-0.18.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系统)。
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
兼容性
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操作系统。
除了以前支持的CPU平台之外,这个版本的预编译发行版还为RISC-V平台提供了二进制文件。
如果你使用位于contrib/init/bitcoind.service的systemd单元配置文件,则已将其更改为使用/var/lib/bitcoind作为数据目录,而不是使用~bitcoin/.bitcoin。切换到新的配置文件时,请确保/var/lib/bitcoind所在的文件系统有足够的空间(使用df-h/var/lib/bitcoind进行检查),并可以选择复制现有的数据目录。有关详细信息,请参阅系统初始化文件部分。
显著的更改
挖矿
如果未指定隔离见证(segwit)规则,则对getblocktemplate的调用将失败。没有隔离见证(segwit)指定而调用getblocktemplate,几乎肯定是一种错误配置,因为这样做会降低矿工的回报。失败的调用将生成一条说明如何启用隔离见证(segwit)规则的错误信息。
配置选项更改
1. 如果在配置文件中使用了无法识别的section名称,则会提示警告。可识别的section有[test]、 [main]以及[regtest]。
2. 有四个新选项可用于配置ZMQ在删除附加消息之前将在memory中排队的最大消息数。默认值为1000,这与以前的版本相同。有关详细信息,请参阅ZMQ文档。
3. enablebip61选项(Bitcoin Core 0.17.0中引入)用于切换BIP61拒绝消息的发送。拒绝消息在P2P网络上没有应用,并且只被记录以供大多数网络节点调试。默认情况下,该选项现在将关闭,以提高隐私和安全性,并减少上传使用。出于本地网络调试目的,用户可显式打开该选项。
4. rpcallowip选项不能再用于自动监听所有网络接口。相反,rpcbind参数还必须用于指定要侦听的IP地址。由于通过公共网络连接侦听RPC命令是不安全的,应该禁用该命令,因此,如果用户选择了这样的配置,现在将提示警告。如果需要公开RPC以便使用Docker之类的工具,请确保只将RPC绑定到本地主机,例如Docker run[…]-p 127.0.0.1:8332:8332。
5. 如果配置文件中设置的密码包含哈希字符 (#),rpcpassword选项现在会导致启动错误,因为哈希字符是用于密码还是用作注释,这是不明确的。
6. WhiteListforceRelay选项用于中继来自白名单对等节点的交易,即使在未被mempool接受时也是如此。此选项现在默认为关闭,因此策略和断开/禁止行为的更改,不会导致白名单中的另一个节点被对等方删除。用户仍然可以使用命令行选项显式地启用此行为(将来可能会弃用此功能)。
系统初始化文件
系统初始化文件 (contrib/init/bitcoind.service) 已更改为使用/var/lib/bitcoind作为数据目录,而不是~bitcoin/.bitcoin。这一变化使Bitcoin Core 变得与其他服务更加一致,并使得系统初始化文件与现有的Upstart和OpenRC configs更加一致。
配置、PID和数据目录现在完全由SystemD管理,它将负责它们的创建、权限等。有关详细信息,请参阅systemd.exec (5) ;
在contrib/init下使用提供的初始化文件时,覆盖/etc/bitcoin/bitcoin.conf中的datadir选项将无效。这是因为初始化文件中指定的命令行参数优先于/etc/bitcoin/bitcoin.conf中指定的选项。
文档
1. 关于JSON-RPC接口的一个新的简短文档描述了一些情况,其中一个RPC的结果,可能包含来自不同子系统的数据之间的不一致,例如钱包状态和mempool状态。在REST接口文档中添加了一个说明,说明应用了相同的规则。
2. 有关如何保护该接口的更多信息,将添加到JSON-RPC文档中。
3. 关于bitcoin.conf文件的一个新文档,描述了如何使用它来配置 Bitcoin Core。
4. 新的文档介绍了Bitcoin Core的BIP174 部分签名比特币交易(PSBT)接口,该接口用于允许多个程序协作创建、签名和广播新的交易。这对于离线(冷)钱包、多重签名钱包、coinjoin实现以及很多其他需要两个或多个程序交互以生成完整交易的情况非常有用。
5. 输出脚本描述符文档已更新,其中包含有关此仍在开发中语言的新功能信息。该语言目前在scantxstart RPC中使用,预计将适应其他rpc和底层钱包结构。
构建系统更改
1. 可以将一个新的--disable-bip70选项传递给。/configure,以防止Bitcoin-Qt在支持BIP70支付协议的情况下构建或链接libssl。由于支付协议在过去将Bitcoin Core暴露于libssl漏洞,鼓励不需要bip70支持的构建者,使用此选项来减少未来漏洞暴露所带来的伤害。
2. Qt的最低要求版本(构建GUI时)已从5.2增加到5.5.1。
新的RPC
1. getnodeaddresses RPC返回此节点已知的对等地址。它可以用来查找不使用DNS种子器连接到的节点。
2. listwalletdir RPC返回钱包目录中的钱包列表(默认wallet目录或由-walletdir参数配置的目录)。
3. getrpcinfo返回RPC服务器的运行时间详细信息。目前,它返回一个当前活动命令的数组,以及它们已经运行了多长时间。
4. deriveaddresses返回与输出描述符对应的一个或多个地址。
更新的RPC
注意:下面的低level RPC更改部分,描述了一些主要用于测试的低level RPC更改。
1. getpeerinfo RPC现在返回一个额外的minfeefilter字段,该字段设置为对等节点的bip133费用过滤器。你可以使用它来检测你的对等节点是否愿意接受低于默认最低中继费的交易。
2. mempool RPC,例如getrawmempool ,在verbose=true的情况下,现在返回一个额外的“bip125可替换”值,指示交易是否选择请求节点和矿工将其替换为使用相同输入的更高费率交易。
3. SettXFee RPC以前会静默地忽略将费用设置为低于允许最小值的尝试。现在它会发出警告,特殊值“0”仍可用于请求最小值。
4. getaddressinfo RPC现在提供一个ischange字段,指示钱包是否使用了找零输出中的地址。
5. importmulti RPC已更新为支持P2WSH、 P2WPKH、 P2SH-P2WPKH以及P2SH-P2WSH。对P2WSH 和P2SH-P2WSH 的请求,接受一个附加的witnessscript参数。
6. importmulti RPC现在为每个请求返回一个额外的warnings字段,其中包含一组字符串,用于解释字段被忽略或不一致的时间(如果有的话)。
7. 当Bitcoin Core足够了解地址的scriptPubKey、可选redeemScript以及可选witnessScript,以便钱包能够生成发送到该地址的未签名输入支出资金时,getaddressinfo RPC现在返回一个额外的solvable布尔字段。
8. getaddressinfo、listunspent以及scantxoutset RPC现在返回一个附加的desc字段,该字段包含一个输出描述符,其中包含地址的所有密钥路径和签名信息(私钥除外)。只有当地址可解时,getAddressInfo和listunPent才会返回desc字段。
9. importprivkey RPC 将为要导入的私钥对应的地址或公钥保留以前设置的标签。例如,如果你在早期版本的Bitcoin Core中导入了标签为“冷钱包”的只读地址,随后导入私钥将默认为将地址标签重置为默认的空字符串标签(“”)。在此版本中,将保留以前的“Cold Wallet”标签。如果在调用importprivkey时可选择指定除默认值之外的任何标签,则新标签将应用于该地址。
10. 有关对GetBlockTemplate的更改,请参阅挖矿部分。
11. 当区块从未通过此节点上的RPC进行装配时,getmininginfo RPC现在会省略currentblockweight和currentblocktx。
12. getrawtransaction RPC和REST端点不再检查交易的未使用UTXO集。其余行为如下:1.如果提供了区块哈希,请检查相应的块。2。如果没有提供区块哈希,请检查mempool。3. 如果没有提供区块哈希,但启用了 txindex,则还应检查txindex。
13. unloadwallet RPC 现在是同步的,这意味着在完全卸载钱包之前,它不会返回。
14. importmulti RPC 现在支持从描述符导入地址。可以提供“desc”参数,而不是请求中的“scriptpubkey”,以及范围描述符的可选范围,以指定要导入范围的开始和结束。关于描述符的更多信息,可以在这里找到。
15. listunspent RPC 现在已经被修改,以便它返回witnessScript,即P2WSH或P2SH-P2WSH输出时的见证脚本。
16. createwallet RPC 现在有一个可选的空白参数,它可用于创建空白钱包。空白钱包没有任何密钥或HD种子。如果bitcoin core客户端低于0.18版本,则无法打开它们。一旦一个空白钱包有一个HD种子集(通过使用sethdseed)或私钥、脚本地址和其他已被导入的只读东西,钱包就不再是空白的,其可以在0.17.x中打开。加密一个空白钱包也会为它设置一个HD种子。
已弃用或删除的RPC
1. signrawtransaction RPC 在0.17.0版本中被否决,并隐藏在特殊配置选项之后,现在已经被删除了。
2. “account”API在v0.17中被否决后,现在已被删除。‘label’ API 在v0.17中被引入作为账户的替换。有关从“帐户”API到“标签”API更改的完整说明,请参阅v0.17的发布说明。
3. addwitnessaddress RPC在0.16.0版中被否决后,现在已被删除。
4. 钱包的generate RPC方法已被弃用,并将在随后的主要版本中被完全删除。此RPC仅用于测试,但其实现跨越多个子系统(钱包和挖矿),因此不推荐简化 wallet-node接口。使用generate进行测试目的的项目,应转换为使用generatetoaddress RPC,后者不需要或使用钱包组件。使用getnewaddress RPC返回的地址调用generatetoaddress,提供与旧generate RPC相同的功能。要继续在此版本中使用generate,请使用-deprecatedrpc=generate配置选项重新启动bitcoind。
剩余的变化
添加了一个新的 /rest/blockhashbyheight/ 端点,用于根据区块的高度,获取当前最佳区块链中区块的哈希。
图形用户界面(GUI)
1. 在现有文件、设置和帮助菜单旁边,会添加一个新的窗口菜单。其他打开新窗口菜单中的几个项,已被移动到此新窗口菜单。
2. 在“发送”选项卡中,“仅支付所需费用”复选框已被删除。相反,用户可简单地将自定义费率字段中的值降低到节点配置的最小中继费用。
3. 在Overview选项卡中,如果钱包是使用CreateWallet RPC创建的,并且disable_private_keys参数设置为true,则只读的余额将是显示的唯一余额。
4. 如果使用大于10.11的Macosx Min版本编译,则 launch-on-startup选项在MacOS上将不再可用(使用CXXFLAGS=“-mmacosx-version-min=10.11” CFLAGS=“-mmacosx-version-min=10.11”设置部署SDK版本)
工具
一个新的bitcoin-wallet工具现在与Bitcoin Core的其他可执行文件一起分发。不需要使用任何RPC,此工具当前可以创建新的钱包文件或显示有关现有钱包的一些基本信息,例如钱包是否加密、是否使用HD种子、包含多少交易以及有多少地址簿条目。
低level更改
RPC
(TODO pieter: 感觉此部分可与早期的RPC更改部分合并)
1. submitblock RPC 现在总是返回拒绝一个无效块的基本原因,并且只返回它已接受的有效块的“重复品”。
2. 新的submitheader RPC允许独立于区块提交区块头。这可能只对测试有用。
3. signrawtransactionwithkey和signrawtransactionwithwallet RPC已被修改,以便它们也可以选择接受witnessScript,即P2WSH或P2SH-P2WSH输出情况下的见证脚本。这与对 listunspent的更改兼容。
4. 通过importmulti导入的具有密钥来源信息的描述符,将其密钥来源信息存储在钱包中,以用于创建PSBTs
5. 如果walletprocesspsbt和walletcreatefundedpsbt的bip32derivs都设置为true,但公钥的密钥元数据尚未更新,则该密钥将具有一个派生路径,如同它只是一个独立的密钥一样(即,没有派生路径,其主指纹是其自身)。
配置
在0.16版本客户端中, -usehd 配置选项被删除了,从那个版本开始,所有新创建的钱包都是层次确定性(HD)钱包。此版本使指定-usehd 成为无效的配置选项。
网络
此版本允许节点因行为错误(例如发送无效数据)而自动断开连接的对等端,重新连接到你的节点(如果你有未使用的传入连接插槽)。如果你的插槽已满,则会断开行为不正常节点的连接,以便为没有问题历史的节点腾出空间(除非行为不正常的节点以其他方式帮助你的节点。此前,Bitcoin Core在一段时间内(默认为1天)禁止了行为不端对等节点的IP地址,这很容易被拥有多个IP地址的攻击者规避。如果手动禁止某个对等节点,例如使用 setban RPC,则来自该对等节点的所有连接仍将被拒绝。
钱包
第一次使用HD种子时,需要升级密钥元数据。对于未加密的钱包,这将在钱包加载时发生。对于加密钱包,这将在钱包首次解锁时发生。
安全性
这个版本将OpenSSL中使用的随机数生成器(RNG)更改为Bitcoin Core自己的实现(尽管Bitcoin Core收集的熵,被输出到OpenSSL,然后在程序需要强随机性时重新读取)。这使得Bitcoin Core更接近于不再依赖于OpenSSL,这是一种过去引起安全问题的依赖关系。
全部0条评论
快来发表一下你的评论吧 !