bsv节点软件升级版本v1.0.9正式发布(代码片段)

BSV区块链 BSV区块链     2023-01-16     456

关键词:


发表时间:2021年10月19日
信息来源:bitcoinsv.io


BSV节点软件v1.0.9(正式版)是在v1.0.8(正式版)基础之上的推荐升级版本;这次升级版本改进了安全模式下的处理性能,同时增设了网络回调(webhook)通知、区块内发生双花时的点对点通知消息、以及允许在双花发生时冻结其对应的交易输出。

详细内容列示如下:

  1. 在区块内有双花发生时,新增点对点通知消息。*
  2. 改进了的安全模式下的处理性能,包括新增RPC接口允许手动控制安全模式。*
  3. 在发生链竞争和双花时将有网络回调通知。
  4. 允许冻结交易输出。*
  5. 在处理交易链时的性能提升。

对区块预扣(withholding)攻击的响应

背景

在过去的几个月里,BSV网络上发生了多次攻击尝试。攻击涉及挖掘一条隐藏的备用链(长度大于80个区块),然后将其一次性发布到区块链上,使其成为新的主链。新的区块链中用双花交易替换了原始区块链中的一些交易。交易所通常会在存取资金的交易达到一定数量的区块确认(例如攻击者试图替换的交易上已有50个确认)后才认为有效,举例来说,这样可以防止攻击者在存入双花的BSV后就立即开始交易,或在隐藏链中重复之前在主链上的操作再次提取资金。

BSV区块链和其它PoW区块链很容易遭到此类攻击,因为在互相竞争的网络中有大量可随时切换使用的算力。

我们针对此类攻击的对策包括:

  1. 设置全天候不间断的监控:
    • 在网络中出现很长的竞争链时通知矿工。
    • 在新链里出现双花交易时通知交易所和用户。
  2. 请求诚实矿工使用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个全新的命令行参数:

  1. safemodemaxforkdistance,默认值为1000(挖矿7天)
  2. safemodeminforklength,默认值为3
  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接口:

  1. ignoresafemodeforblock <block_hash> - 在验证是否进入安全模式的条件时,忽略指定的区块及其后面的所有区块。
  2. reconsidersafemodeforblock <block_hash> - 在验证是否进入安全模式的条件时,考虑指定的区块及其后面的所有区块。
  3. getsafemodeinfo - 获取安全模式状态的详细信息。

这些RPC设置不会在节点重启后被保留。

对冻结TXO(交易输出)的支持

节点现在可以“冻结”指定的TXO(交易输出)。冻结可被应用在已花费的和未花费的交易输出上,并可被用来确保节点不处理已知的双花。

如果某个TXO被策略冻结,那么节点在挖矿时将不会把试图花费这个TXO的交易放进区块模板中,但会接受包含了花费这个TXO的交易的外部区块。

此版本引入了全新的RPC接口:

  1. addToPolicyBlacklist < funds : object > - 将某个TXO加入策略冻结黑名单(即不再接受花费这个TXO的交易,但可能接受包含花费这个TXO的交易的区块,如果这个TXO不在共识冻结黑名单中)。
  2. removeFromPolicyBlacklist < funds : object > - 从策略冻结黑名单中移除某个TXO。
  3. queryBlacklist – 从数据库中返回所有被冻结的TXO。
  4. 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区块链官方微信公众号,了解更多区块链领域的实时资讯。

yc-framework版本更新:v1.0.9

分布式微服务框架:YC-Framework版本更新V1.0.9!!!本文主要内容:1.V1.0.9版本更新主要内容2.YC-Framework新的征程一、V1.0.9版本更新主要内容(1)接入空气质量数据(和风天气API)。(2)新增image-combiner(Java服务端图片合成工 查看详情

bsv基础架构团队正式发布liteclienttoolbox工程中的三个开源项目

...。正式发布BitcoinJ-SVv1.0.1BitcoinJ-SV是旧版BitcoinJ库的轻量级版本,针对可大规模扩容BSV区块链做了大量的优化工作。此次发布的是社区版& 查看详情

mapi软件升级到v1.4.0(正式版)

...所需的IP地址(见下文),以及在交易提交到节点时跳过一些策略检查的能力,例如:“maxtxsizepolicy”:10000000“skipscriptflags”:[“CLEANSTACK”]详细内容列示如下:支持policyQuote和feeQuote为交易构造器提供DSNT信... 查看详情

汇智动力《软件测试课程v8.0版本》正式发布!

...f0c;为了使汇智学子适应科技变化的需要,汇智动力《软件测试课程V8.0版本》也随即正式发布!这套全新升级的V8课程体系,是我们对学员“每年至少进行一次课程重大更新”的承诺。其在之前V7基础上分别做了两个方... 查看详情

springboot3.0正式发布,这份升级指南必须收藏(代码片段)

...支持JakartaEE10。同时借助于GraalVM支持了AOT和NativeImage。3.0升级指南如果你想尝试SpringBoot3.0,不妨参考胖哥精心准备的升级指南。升级JDK首先要升级你的JDK到JDK17,如果你要使用NativeImage特性,要使用GraalVM22.3以上和Native... 查看详情

汇智动力《软件测试课程v8.0版本》正式发布!

...f0c;为了使汇智学子适应科技变化的需要,汇智动力《软件测试课程V8.0版本》也随即正式发布!这套全新升级的V8课程体系,是我们对学员“每年至少进行一 查看详情

软件版本gabetarc含义

...在Alpha版之后推出。RC:(Release Candidate)顾名思义么!用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。GA:GeneralAvailability,正式发布的版本,在国外都是用GA来说明release版本的... 查看详情

vite4.0正式发布!(代码片段)

...比,这个主版本的的更新范围更小,主要目标是升级到Rollup3。Vite团队与生态系统紧密合作,以确保这个新的主要版本顺利升级。Rollup3Vite4.0使用R 查看详情

springboot3.0正式发布及新特性解读(代码片段)

...E10。同时借助于GraalVM支持了AOT和NativeImage。JDK调整首先要升级你的JDK到JDK17,如果你要使用NativeImage特性,要使用GraalVM22.3以上和NativeBuildToolsPlugin0.9.17或更高的版本。平滑升级这里不建议直接从低于SpringBoot2.7的版本直接升... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

....5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化时由于非空模式下导致启动失败#28079当过... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

....5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化时由于非空模式下导致启动失败#28079当过... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

....5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化时由于非空模式下导致启动失败#28079当过... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

....5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化时由于非空模式下导致启动失败#28079当过... 查看详情

microsoftgraphjavascriptsdk3.0.0正式发布(代码片段)

...传任务。新版本中引入的更改是不向后兼容的,关于升级客户端的具体操作请参见升级指导书。MicrosoftGraphJSSDK3.0.0需要Node.js12LTS或更高版本。源码使用TypeScript4.x实现。认证增强在这次更新中,微软通过添加对@azure/msal-... 查看详情

microsoftgraphjavascriptsdk3.0.0正式发布(代码片段)

...传任务。新版本中引入的更改是不向后兼容的,关于升级客户端的具体操作请参见升级指导书。MicrosoftGraphJSSDK3.0.0需要Node.js12LTS或更高版本。源码使用TypeScript4.x实现。认证增强在这次更新中,微软通过添加对@azure/msal-... 查看详情

云原生kubernetes集群升级(代码片段)

...群升级指南前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级三、升级node节点总结前言本文演示kubernetes集群从v1.24.1升级到v1.25.5。相关文档。一、集群升级过程辅助命令(... 查看详情

exadata中infiniband交换机升级

...独下载的,而之后的版本,infiniband的升级包跟随着存储节点的补丁包一起发布。 图Infiniband交换机的软件补丁包 1.3.3-2版本之前注意:1、1.3.3-2及之前的版本,升级方法基本一样,但不同的版本对应的升级包 查看详情

节点升级后 ESLint/Prettier 抛出错误

】节点升级后ESLint/Prettier抛出错误【英文标题】:ESLint/Prettierthrowerrorsafternodeupgrade【发布时间】:2021-03-0817:41:01【问题描述】:我目前正在使用ESLint和Prettier来lint我的React项目。这是当前使用的节点版本10。运行lint命令时,没有... 查看详情