#029NAC公链CBPP共识区块核心技术白皮书 #29
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
NAC公链CBPP共识区块核心技术白皮书(修订版)
版本:1.0
制定方:NAC核心协议工程组 · 共识层工作组
发布日期:2026年2月19日
关联文档:CBPP共识白皮书、宪法层规范、CSNP网络协议白皮书、宪法收据(CR)规范
本白皮书是对NAC公链CBPP共识中区块核心技术的完整阐述。CBPP(宪政区块生产协议)的设计哲学是:节点产生区块,参与即是共识,交易扩张区块的大小和高度。这一理念将区块从“固定的时间容器”转变为“交易的自然沉淀物”,从根本上重构了区块链的区块生产和组织方式。
在CBPP中,任何符合宪法要求的节点都有权独立地打包交易并生成区块。这种并行生产会导致临时分叉,即同一时刻网络中可能存在多个合法的候选区块。CBPP通过收据权重累计和流体区块模型确保网络最终收敛到唯一的链。
一、流体区块设计理念
1.1 传统区块的局限
传统区块链(如比特币、以太坊)采用固定间隔、固定容量的区块模型:
•固定出块时间:比特币10分钟,以太坊12秒。无论交易量大小,区块按固定节奏产生。
•固定区块上限:比特币1MB,以太坊Gas上限。超出上限的交易只能等待下一区块。
这种设计的根本问题是:区块是链的“节拍器”,而非交易的“容器”。交易量小时,区块浪费空间;交易量大时,区块拥堵延迟。
1.2 流体区块的核心思想
CBPP的流体区块模型(FBM)颠覆了这一范式:
•区块是交易的容器:区块的大小和生成频率完全由交易流量自然决定。
•无固定出块时间:节点在满足最小间隔且内存池有交易时即可出块。
•无固定区块大小:区块可包含当前传播周期内所有有效的、未被确认的交易,大小由网络带宽和节点处理能力自然决定。
•宪法定义边界:宪法条款设定最小/最大出块间隔、最小/最大Gas上限,确保网络稳定。
核心公式:
区块 = f(交易量, 网络延迟, 节点能力, 宪法约束)二、三维区块坐标系统
为支持并行区块生产和分叉收敛,CBPP引入三维坐标系统标识每个区块:
维度 名称 说明
Epoch(纪元) 纪元号 每N个区块或固定时间(如24小时)切换,用于划分治理周期和重大状态快照
Round(轮次) 轮次号 纪元内的线性递增序号,表示时间顺序
Branch(分支) 分支哈希 同一轮次内,可能由不同CBP同时产生的多个合法区块,通过包含对方区块哈希形成轻量DAG
区块标识符:
Epoch-Round-BranchHash,既保持了顺序,又容纳了并行。三、区块数据结构
3.1 区块头结构
protobuf
message FluidBlockHeader {
// 三维坐标
uint64 epoch_number; // 纪元号
uint64 round_number; // 纪元内轮次
bytes32 branch_hash; // 并行分支标识(默克尔根)
}
3.2 交易列表结构
protobuf
message FluidBlock {
FluidBlockHeader header;
repeated ConstitutionalTransaction transactions; // 交易+CR列表
}
message ConstitutionalTransaction {
bytes transaction_payload; // 原始交易数据
ConstitutionalReceipt receipt; // 关联宪法收据
bytes signature; // 用户签名
}
关键设计:每个交易必须附带宪法收据(CR),无CR的交易不得被打包。区块头中的
receipt_root是所有CR的默克尔根,用于快速验证。四、区块生产流程
4.1 出块条件判定
每个CBP节点独立运行以下算法,决定是否出块:
python
def should_produce_block(last_block_time, mempool_size, local_load):
"""
判定节点是否应该产生区块
:param last_block_time: 上一个被接受的有效区块的时间
:param mempool_size: 待打包的有效交易数量
:param local_load: 节点CPU/网络负载(0-100)
:return: 是否出块
"""
time_since_last = current_time_ms() - last_block_time
4.2 区块构建流程
1.收集有效交易:从本地内存池中取出所有已验证CR的交易。
2.按收据权重排序:交易按CR权重(手续费×合规等级)降序排列。
3.打包至Gas上限:依次将交易加入候选区块,直到达到当前
gas_limit。4.计算收据根:构建所有交易CR的默克尔树,生成
receipt_root。5.签名:用CBP节点私钥签名区块头。
6.广播:先广播轻量的
BlockAnnounce(仅区块头哈希),再广播完整区块。五、并行区块生产与分叉收敛
5.1 并行生产的必然性
当多个CBP节点同时满足出块条件时,可能产生多个同轮次的合法区块。这是CBPP“节点产生区块”理念的自然结果,也是去中心化的体现。
5.2 收据权重累计
节点在选择主链时,计算从创世块到当前区块路径上的收据权重总和,选择权重最高的链。
收据权重计算公式:
python
def calculate_receipt_weight(receipt):
# 基础权重(宪法定义)
base = constitutional_state::RECEIPT_BASE_WEIGHT
链权重计算:
python
def calculate_chain_weight(chain):
total_weight = 0
for block in chain:
for tx in block.transactions:
total_weight += calculate_receipt_weight(tx.receipt)
return total_weight
5.3 分支处理机制
当节点收到同一轮次的多个候选区块时:
1.并行传播:CSNP网络层确保所有区块快速传播到全网。
2.权重比较:节点计算每个分支链的累计收据权重。
3.选择主链:选择权重最高的分支作为主链延伸。
4.引用叔块:若节点出块时已收到其他分支,可在
sibling_branches字段中引用,被引用的分支可获得部分出块奖励(如10%)。5.4 快速收敛的数学保证
由于收据权重与交易手续费、合规等级直接相关,高价值、高合规的交易天然倾向于被优先打包。即使产生临时分叉,网络也能在1-2个轮次内快速收敛到权重最高的链。
六、动态容量调整算法
6.1 核心参数
参数 符号 说明 宪法层级
目标利用率 U_target 期望的区块平均利用率(如70%) 战略级
调整因子 α 调整幅度控制(如0.125) 战术级
最小Gas上限 G_min 区块Gas下限 战略级
最大Gas上限 G_max 区块Gas上限 战略级
六、动态容量调整算法
6.1 核心参数
参数 符号 说明 宪法层级
目标利用率
U_target期望的区块平均利用率(如70%) 战略级调整因子
α调整幅度控制(如0.125) 战术级最小Gas上限
G_min区块Gas下限 战略级最大Gas上限
G_max区块Gas上限 战略级6.2 调整算法(每纪元执行)
python
def adjust_gas_limit(prev_limit, last_epoch_blocks):
"""
根据上一纪元区块大小动态调整Gas上限
"""
# 计算上一纪元平均区块大小
total_gas = sum(block.gas_used for block in last_epoch_blocks)
avg_block_size = total_gas / len(last_epoch_blocks)
6.3 实时调整示例
情景 当前Gas上限 平均区块大小 目标大小 调整后
拥堵 10,000,000 8,500,000 7,000,000 10,267,500(+2.7%)
空闲 10,000,000 5,000,000 7,000,000 9,732,500(-2.7%)
极度空闲 10,000,000 2,000,000 7,000,000 8,750,000(-12.5%)
七、宪法收据在区块中的集成
7.1 收据默克尔根
每个区块中的交易CR共同构成一棵默克尔树,根哈希存储在区块头中:
receipt_root = MerkleRoot([CR1, CR2, ..., CRn])节点验证区块时,可通过
receipt_root快速验证所有CR的完整性。7.2 跨辖区交易的多CR处理
对于涉及多个司法辖区的交易,区块中可能包含多个CR(如源辖区CR、目标辖区CR)。区块头中的
receipt_root包含所有CR,节点验证时需检查:•交易涉及的辖区列表(从交易中解析)
•每个辖区是否有对应的有效CR
•所有CR的宪法哈希是否一致
八、区块验证与传播
8.1 节点验证流程
节点收到新区块后,执行完全验证:
1.签名验证:区块头签名是否来自有效CBP
2.宪法哈希验证:区块头中的
constitutional_hash是否与本地当前宪法版本一致3.时间戳验证:与本地时间偏差在允许范围内(如±2秒)
4.CR验证:
○并行验证区块内所有交易的CR(调用NVM指令
UDM_BATCH_VALIDATE)○检查
receipt_root是否与CR列表的默克尔根一致5.Gas验证:区块总Gas使用是否超过
gas_limit6.状态根验证:可选,可在后续状态同步中验证
8.2 CSNP网络传播
CSNP网络层为区块传播提供优化:
•CBP骨干网:所有CBP节点间建立低延迟专用通道
•区块预宣告:先广播轻量区块头哈希,节点可提前准备验证资源
•并行拉取:节点可同时向多个邻居请求缺失区块
九、安全与宪法保障
9.1 抗51%攻击
在CBPP中,攻击者即使控制多数CBP节点,也无法:
•打包无效交易:因为无效交易无法获得CR,不会被任何诚实节点接受
•审查合规交易:其他诚实节点可打包被审查的交易,攻击者无法阻止
•改写历史:篡改历史需重算所有后续区块的签名,且让网络接受一条收据权重更低的链
9.2 宪法条款保障
条款ID 内容 作用
CBPP_DT_MIN最小出块间隔 防止节点恶意快速出块CBPP_DT_MAX最大出块间隔 确保网络活性,防止停滞GAS_LIMIT_MIN/MAXGas上下限 防止区块过大或过小RECEIPT_WEIGHT_FORMULA收据权重公式 分叉选择的依据十、性能目标
指标 目标 说明
最小出块间隔 100ms 由宪法定义,可调整
最大出块间隔 2000ms 确保空区块不导致网络停滞
区块传播延迟 <100ms(骨干网) CBP专用通道保障
交易确认延迟 200-500ms 取决于网络传播
理论TPS 4,000-10,000+ 动态Gas上限 × 交易大小
十一、结论
CBPP的流体区块模型将区块从“链的节拍器”转变为“交易的自然沉淀物”,实现了:
•交易驱动:区块大小和出块频率由交易流量自然决定
•并行生产:多个节点可同时出块,通过收据权重快速收敛
•宪法约束:所有区块行为由宪法条款定义,确保安全稳定
•高效验证:CR默克尔根支持快速验证,并行CR验证提升效率
这是“节点产生区块,参与即是共识,交易扩张区块大小和高度”理念的完整技术实现。
制定人:NAC核心协议工程组 · 共识层工作组
最后更新:2026年2月19日
文档状态:正式发布
✅ 工单完成确认
验证日期: 2026-02-27
验证方式: 逐层系统检查
完成依据
docs/NAC_CONSENSUS_CORE.md 已存在,包含完整的 CBPP 共识协议技术文档。
验证详情
验证路径:/root/NAC_Blockchain/docs/NAC_CONSENSUS_CORE.md ✅
后台管理员账号