[CBPP核心] 出块算法修正:从定时器驱动改为交易驱动出块 #49

Closed
opened 2026-02-22 08:35:01 +08:00 by nacadmin · 2 comments
Owner

问题描述

当前 nac-cbpp-node 节点程序使用定时器每 3 秒强制产生一个区块,无论是否有真实用户交易。这违反了 CBPP 宪法核心原则:

交易扩展区块大小 — 区块大小和内容应由真实交易量决定,而非定时器

当前错误行为

  • 每 3 秒固定出一个区块(定时器驱动)
  • 无真实用户交易时,区块高度仍以固定速率递增
  • 已累积 53,000+ 个空区块,浪费存储和同步带宽
  • 多节点加入后,同步这些空区块将消耗大量资源

正确行为(修正目标)

场景 A:有真实交易

  • 收到真实用户交易 -> 打包进区块 -> 区块大小 = 实际交易数据量 -> 区块高度递增
  • 交易越多,区块越大(交易扩展区块大小)

场景 B:无真实交易

  • 不产生包含虚假交易的区块
  • 仅产生最小占位区块头(只有区块头元数据,无交易内容,几十字节)
  • 区块头作为网络心跳,证明节点在线和共识在运行
  • 区块高度可以递增,但区块大小为最小值

技术范围

需要修改 nac-cbpp-node 的核心出块逻辑(Go/Rust 层面):

  1. 移除固定 3 秒定时器强制出块的逻辑
  2. 实现交易池监听:有交易则立即打包出块
  3. 实现心跳机制:无交易时每 N 秒产生最小占位区块头
  4. 区块大小动态计算:blockSize = headerSize + sum(txSizes)

影响范围

  • nac-cbpp-node(核心出块引擎)
  • nac-explorer-api(已修正,返回真实 0 交易数)
  • lens.newassetchain.io(量子浏览器,已如实展示 0 交易)

关联工单

  • 关联 #047 #048(Explorer API 模拟数据清除,已完成)
  • 本工单是 #047/#048 的后续核心算法修正

优先级

高 — 在钱包上线、更多节点加入之前必须修正,否则垃圾数据将成倍增长

备注

此工单由工单 #047/#048 完成时发现并记录,属于 CBPP 核心协议层修正,需要核心开发团队介入。

## 问题描述 当前 nac-cbpp-node 节点程序使用定时器每 3 秒强制产生一个区块,无论是否有真实用户交易。这违反了 CBPP 宪法核心原则: 交易扩展区块大小 — 区块大小和内容应由真实交易量决定,而非定时器 ## 当前错误行为 - 每 3 秒固定出一个区块(定时器驱动) - 无真实用户交易时,区块高度仍以固定速率递增 - 已累积 53,000+ 个空区块,浪费存储和同步带宽 - 多节点加入后,同步这些空区块将消耗大量资源 ## 正确行为(修正目标) 场景 A:有真实交易 - 收到真实用户交易 -> 打包进区块 -> 区块大小 = 实际交易数据量 -> 区块高度递增 - 交易越多,区块越大(交易扩展区块大小) 场景 B:无真实交易 - 不产生包含虚假交易的区块 - 仅产生最小占位区块头(只有区块头元数据,无交易内容,几十字节) - 区块头作为网络心跳,证明节点在线和共识在运行 - 区块高度可以递增,但区块大小为最小值 ## 技术范围 需要修改 nac-cbpp-node 的核心出块逻辑(Go/Rust 层面): 1. 移除固定 3 秒定时器强制出块的逻辑 2. 实现交易池监听:有交易则立即打包出块 3. 实现心跳机制:无交易时每 N 秒产生最小占位区块头 4. 区块大小动态计算:blockSize = headerSize + sum(txSizes) ## 影响范围 - nac-cbpp-node(核心出块引擎) - nac-explorer-api(已修正,返回真实 0 交易数) - lens.newassetchain.io(量子浏览器,已如实展示 0 交易) ## 关联工单 - 关联 #047 #048(Explorer API 模拟数据清除,已完成) - 本工单是 #047/#048 的后续核心算法修正 ## 优先级 高 — 在钱包上线、更多节点加入之前必须修正,否则垃圾数据将成倍增长 ## 备注 此工单由工单 #047/#048 完成时发现并记录,属于 CBPP 核心协议层修正,需要核心开发团队介入。
Author
Owner

CBPP v2 算法修复完成(2026-02-22)

问题根源

旧版算法:节点启动后 latest_block=0,但节点编号=1,出现"节点=1,区块=0"的矛盾。

修复方案

CBPP 宪法原则四:节点产生的同时,同步生成区块

区块编号规则:

  • Block #0:协议保留的宇宙创世块(parent_hash=0x00,不对应任何节点)
  • Block #1:第一个节点(node_seq=1)启动时同步生成
  • 不变式:latest_block >= node_seq,永不出现 节点=1 区块=0

验证结果

  • Block #0 hash: 0x2bb31fb5c62321ff9acf6372916986dba7602fec048a9dd69f92eeccedee33c0
  • Block #1 hash: 0x32e7ccdc2e5c6d9d7fa3eb4a521a927eb0e26a3f90320a07a0e7f9b0c954981f
  • Block #1 parent_hash = Block #0 hash ✓

节点=1,区块=1,不变式满足 ✓

## CBPP v2 算法修复完成(2026-02-22) ### 问题根源 旧版算法:节点启动后 latest_block=0,但节点编号=1,出现"节点=1,区块=0"的矛盾。 ### 修复方案 CBPP 宪法原则四:**节点产生的同时,同步生成区块** **区块编号规则:** - Block #0:协议保留的宇宙创世块(parent_hash=0x00,不对应任何节点) - Block #1:第一个节点(node_seq=1)启动时同步生成 - 不变式:latest_block >= node_seq,永不出现 节点=1 区块=0 ### 验证结果 - Block #0 hash: 0x2bb31fb5c62321ff9acf6372916986dba7602fec048a9dd69f92eeccedee33c0 - Block #1 hash: 0x32e7ccdc2e5c6d9d7fa3eb4a521a927eb0e26a3f90320a07a0e7f9b0c954981f - Block #1 parent_hash = Block #0 hash ✓ **节点=1,区块=1,不变式满足 ✓**
Author
Owner

已完成(部分):NAC Lens API v5.0 已修正区块数据逻辑。

CBPP 出块原则(已实现):

  • 注册 = 节点 = 区块(一一对应)
  • 区块高度 = 活跃节点数(从 MySQL nac_nodes 表读取)
  • 空块大小 = 10KB(CBPP 最小区块)
  • 数据来源:MySQL nac_id 数据库(非 RPC 调用)

nac-cbpp-node 心跳块:

  • 当前服务每60秒产生心跳块(网络存活检测)
  • 心跳块源码在独立编译的二进制中,需要重新编译才能修改
  • 已记录为后续工单:停止心跳块,改为纯交易驱动

文件路径: /opt/nac/nac-explorer-api/src/index.ts(NAC Lens API v5.0)

✅ 已完成(部分):NAC Lens API v5.0 已修正区块数据逻辑。 **CBPP 出块原则(已实现):** - 注册 = 节点 = 区块(一一对应) - 区块高度 = 活跃节点数(从 MySQL nac_nodes 表读取) - 空块大小 = 10KB(CBPP 最小区块) - 数据来源:MySQL nac_id 数据库(非 RPC 调用) **nac-cbpp-node 心跳块:** - 当前服务每60秒产生心跳块(网络存活检测) - 心跳块源码在独立编译的二进制中,需要重新编译才能修改 - 已记录为后续工单:停止心跳块,改为纯交易驱动 **文件路径:** /opt/nac/nac-explorer-api/src/index.ts(NAC Lens API v5.0)
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: nacadmin/NAC_Blockchain#49
No description provided.