BSV节点软件升级版本v1.0.9正式发布
Posted BSV区块链
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BSV节点软件升级版本v1.0.9正式发布相关的知识,希望对你有一定的参考价值。
发表时间:2021年10月19日
信息来源:bitcoinsv.io
BSV节点软件v1.0.9(正式版)是在v1.0.8(正式版)基础之上的推荐升级版本;这次升级版本改进了安全模式下的处理性能,同时增设了网络回调(webhook)通知、区块内发生双花时的点对点通知消息、以及允许在双花发生时冻结其对应的交易输出。
详细内容列示如下:
- 在区块内有双花发生时,新增点对点通知消息。*
- 改进了的安全模式下的处理性能,包括新增RPC接口允许手动控制安全模式。*
- 在发生链竞争和双花时将有网络回调通知。
- 允许冻结交易输出。*
- 在处理交易链时的性能提升。
对区块预扣(withholding)攻击的响应
背景
在过去的几个月里,BSV网络上发生了多次攻击尝试。攻击涉及挖掘一条隐藏的备用链(长度大于80个区块),然后将其一次性发布到区块链上,使其成为新的主链。新的区块链中用双花交易替换了原始区块链中的一些交易。交易所通常会在存取资金的交易达到一定数量的区块确认(例如攻击者试图替换的交易上已有50个确认)后才认为有效,举例来说,这样可以防止攻击者在存入双花的BSV后就立即开始交易,或在隐藏链中重复之前在主链上的操作再次提取资金。
BSV区块链和其它PoW区块链很容易遭到此类攻击,因为在互相竞争的网络中有大量可随时切换使用的算力。
我们针对此类攻击的对策包括:
- 设置全天候不间断的监控:
• 在网络中出现很长的竞争链时通知矿工。
• 在新链里出现双花交易时通知交易所和用户。 - 请求诚实矿工使用invalidateblock命令将整条隐藏链全部作废,然后回到原来诚实的链上继续挖矿,直至其成为主链。
对安全模式状态改变的通知(竞争链)
如果发生可疑事件(很可能是攻击),交易所和矿工将收到通知。触发条件是网络中突然出现了一条很长的竞争区块链。
区块重组通知也是安全模式通知的一部分。
BSV节点软件目前包含的“安全模式”逻辑可以检测竞争链并停用对钱包的RPC调用(进入安全模式)。安全模式的逻辑已被更新,现在可以配置对链的检测(允许用户根据他们对可疑事件的敏感程度来自定义),并通过网络回调(webhook)触发对交易所、矿工和应用服务提供商的通知。
对双花的通知
交易所和矿工将收到有关BSV网络竞争链最近双花的通知。
区块链监控应用可能会向BSV节点(即挖矿节点)发送DSD点对点通知消息,然后节点会将该消息传播给其它节点。消息里包含了双花证明(区块包含某个交易的Merkle证明)。通知通过网络回调(webhook)发出。
冻结双花交易
BSV节点(特指挖矿节点)现在可以“冻结”特定的TXO(交易输出),例如被双花交易使用的交易输出。
如果某个交易输出被策略冻结,那么节点在挖矿时将不会把试图花费这个TXO的交易放进区块模板中,但会接受包含了花费这个TXO的交易的外部区块。
一些特定改动
DS Detector接口
节点软件将在双花被检测到时收到DSD点对点消息。节点收到DSD消息后,(a)验证DSD消息的有效性(以确保不是恶意伪造),(b)将DSD消息传播给其他节点,以及(c)使用网络回调通知用户。
请注意,没有必要将每个区块中的每个双花都通知给对等节点(peers),只通知在不同区块中相互冲突的单个交易的详细信息,就足够了。
DSD点对点消息
新的DSD点对点消息格式如下:
block_details:
block_header:
点击这里获取DSD点对点消息的技术文档。
网络回调(webhook)DSD通知消息
当在备用链上检测到新的双花时,节点将使用网络回调通知监听器。可以使用新的命令行参数dsdetectedwebhookurl设置网络回调消息的接收者。
DSD通知消息模板示例:
{
"version" : number,
"blocks : [
{
"divergentBlockHash" : string,
"headers" : [
{
"version" : number,
"hashPrevBlock" : string,
"hashMerkleRoot" : string,
"time" : number,
"bits" : number,
"nonce" : number
}
],
"merkleProof" : {
"index" : number,
"txOrId" : string, // Full transaction, serialised, hex-encoded
"targetType": "merkleRoot",
"target" : string, // Merkle-root
"nodes" : [ "hash", ... ]
}
},
...
]
}
这个通知消息的文档是docs/web_hooks.md。
RPC接口getblockheader已被更新为报告区块的有效或无效状态。
升级安全模式的触发机制
安全模式会禁用节点的钱包功能导致用户无法花费BSV。当检测到长的竞争(并行)区块链时,安全模式会被触发。即当攻击链被发现时。网络回调用于在安全模式状态发生改变时通知用户。
此次更新还修改了安全模式的触发逻辑。
这个版本引入了3个全新的命令行参数:
- safemodemaxforkdistance,默认值为1000(挖矿7天)
- safemodeminforklength,默认值为3
- safemodeminblockdifference,默认值为-72(在低于当前链高度的链上挖矿12小时)
如果下列条件均被满足,则会触发安全模式:
- 当前块高与分叉处最后一个公共区块头之间的距离小于safemodemaxforkdistance。
- 分叉链的长度超过safemodeminforklength。
- 分叉链累计的工作量证明超过最小的分叉工作量证明(POW)。分叉工作量证明的最小值与活跃链的高度有关,可用此公式计算:< total-proof-of-work-active-chain > + safemodeminblockdifference * < proof-of-work-of-the-active-tip >。实际上,它归结为:如果分叉链的高度大于< height-active-chain-tip > + safemodeminblockdifference,则激活安全模式。请注意,safemodeminblockdifference的负值意味着它会在分叉链的高度低于活跃链时激活安全模式。
当前实现的第一个条件被保留,但会在竞争链超过活动链之前被触发。当竞争链追赶主链到两者的高度差小于safemodeminforklength,或者竞争链高度大于主链高度,安全模式就会被激活。
网络回调DSD通知消息
节点会在自己进入或退出安全模式、或在安全模式中发生了下列任一事件时,通过网络回调通知监听器。
- 非主链被延长
- 拉取到了非主链的最新区块
- 某条链的有效状态发生变化(例如使用了invalidateblock命令)
- 发生了区块重组(reorg)
在初始化区块下载或重建索引时,即使存在触发安全模式的条件也不会有通知发生。
只对当前安全模式状态感兴趣的用户可以查看通知消息中的safemodeenabled 字段(见下文)。
可以使用新的命令行参数safemodewebhookurl来设置网络回调消息的接收者。
安全模式通知消息模板示例:
{
"safemodeenabled": boolean, // Is the node in the safe mode.
"activetip": { // Tip of the main chain.
"hash": string, // Block hash.
"height": number, // Block height.
"blocktime": string, // Human readable, UTC, block time.
"firstseentime": string, // Human readable, UTC, time when the node first received header.
"status": "active" // Status of the block. Possible values: active, invalid
// headers-only, valid-fork, and valid-headers.
},
"timeutc": string, // Human readable, UTC, time of creation of this message.
"reorg": { // Information about possible reorg.
"happened": bool, // Indicates if an reorg happened.
"numberofdisconnectedblocks": number, // Number of blocks disconnected in reorg.
"oldtip": { // Information about old active tip, "null" if an reorg did not happened.
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
}
},
"forks": [ // List of forks that are triggering the safe mode.
{
"forkfirstblock": { // Root of the fork, this block's parent is on the main chain.
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
"tips": [ // List of tips of this fork.
{
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
...
],
"lastcommonblock": { // Block on the main chain which is parent of the "forkfirstblock"
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
"activechainfirstblock": { // Block on the main chain which is child of the "lastcommonblock"
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
},
...
]
}
该通知消息的文档也是docs/web_hooks.md。
全新的用于启用和禁用安全模式的RPC方法
这些RPC方法允许用户手动修改安全模式状态,而不需要重启节点软件。
此版本引入了三个全新的RPC接口:
- ignoresafemodeforblock <block_hash> - 在验证是否进入安全模式的条件时,忽略指定的区块及其后面的所有区块。
- reconsidersafemodeforblock <block_hash> - 在验证是否进入安全模式的条件时,考虑指定的区块及其后面的所有区块。
- getsafemodeinfo - 获取安全模式状态的详细信息。
这些RPC设置不会在节点重启后被保留。
对冻结TXO(交易输出)的支持
节点现在可以“冻结”指定的TXO(交易输出)。冻结可被应用在已花费的和未花费的交易输出上,并可被用来确保节点不处理已知的双花。
如果某个TXO被策略冻结,那么节点在挖矿时将不会把试图花费这个TXO的交易放进区块模板中,但会接受包含了花费这个TXO的交易的外部区块。
此版本引入了全新的RPC接口:
- addToPolicyBlacklist < funds : object > - 将某个TXO加入策略冻结黑名单(即不再接受花费这个TXO的交易,但可能接受包含花费这个TXO的交易的区块,如果这个TXO不在共识冻结黑名单中)。
- removeFromPolicyBlacklist < funds : object > - 从策略冻结黑名单中移除某个TXO。
- queryBlacklist – 从数据库中返回所有被冻结的TXO。
- clearBlacklists <removeAllEntries : boolean, default=true> - 从黑名单中移除条目。
性能改进
这个版本优化了在极端负载下节点对长且复杂的链式交易的处理。
请在此下载可执行文件和源代码:https://download.bitcoinsv.io/bitcoinsv/。
如有问题,您可以通过邮件support@bitcoinsv.io或Telegram https://t.me/bitcoinsvsupport联系我们。
感谢您对BSV的持续支持!
本公告代表Steve Shadders和BSV基础架构团队向您发送。
目前,全球已有超过400个项目构建于BSV区块链之上。凭借坚如磐石的协议及超高的网络性能,BSV生态系统迅猛发展,我们期待未来出现更多前所未有的商业应用。
- 对BSV区块链开发感兴趣的朋友可以通过CSDN站内私信联系我们,申请加入BSV开发者交流群。
- 同时,您也可以扫描下方二维码,关注BSV区块链官方微信公众号,了解更多区块链领域的实时资讯。
以上是关于BSV节点软件升级版本v1.0.9正式发布的主要内容,如果未能解决你的问题,请参考以下文章
Bitcoin SV节点软件发布升级版本v1.0.8(正式版)