当前页面已进入跨页知识网络层:不仅展示本页拓扑,还明确它在整站里的分类、被哪些页面引用、又继续指向哪些专题与证据页。
flowchart TD
subgraph DARAudit["DAR 资格审计与评分"]
Audit["资格审计: 过滤 jailed / slashed / audit_failed"] --> Eligible["保留合格验证者集合"]
Eligible --> Cache{"DARScore.TotalScore > 0 ?"}
Cache -->|"是"| Cached["优先使用合约缓存 DARScore"]
Cache -->|"否"| Local["回退本地 CalculateDARScore"]
Cached --> Count{"当前合格验证者数量"}
Local --> Count
Score["评分口径 = 在线 0-40 + 稳定 0-30 + 持币 0-20 + 持币时长 0-10"] --> Rank["按总分排序;同分按在线分 / 漏块 / NodeID 排序"]
end
subgraph ReviewClock["DAR / 节点角色重审时间边界"]
BlockTime["block_time_schedule_v1
累计 economic_seconds"] --> ReviewPeriod["rating_update_interval = 86400 economic seconds"]
ReviewPeriod --> ReviewGate{"到达重审窗口?"}
ReviewGate -->|"是"| Audit
ReviewGate -->|"否"| KeepPrev["保持当前角色与资格状态"]
FailClosed["主网生产查询失败 -> fail-closed
不按默认 block 数触发重审"] -.-> ReviewGate
end
Count -->|"数量 >= 104"| Capped["进入 capped 模式"]
Count -->|"数量 <= 96"| Open["进入 open 模式"]
Count -->|"数量 97~103"| Keep["保持上一轮 selection_mode"]
Capped --> Rank
Rank --> Top100["仅保留 DAR TopN 进入轮值集合
N = max_validators,默认 100,可 DAO 增加"]
Open --> All["所有合格验证者直接进入轮值集合"]
Keep --> Prev["沿用上一轮 open / capped 结果"]
subgraph SchedulerFlow["Round-Robin 调度与安全门"]
Top100 --> Scheduler["Round-Robin 调度器"]
All --> Scheduler
Prev --> Scheduler
Scheduler --> MinNodes{"至少 2 个量子节点在线?"}
MinNodes -->|"否"| Wait["暂停出块,继续等待节点恢复"]
MinNodes -->|"是"| NoRepeat{"WouldCauseConsecutiveBlock ?"}
NoRepeat -->|"是"| Reject["拒绝该候选节点,记录连续出块原因"]
NoRepeat -->|"否"| Build["按治理生效的 target_block_seconds 触发打包"]
Reject --> Rotate["切到下一个候选 / 链停等恢复"]
Rotate --> Build
Build --> Sign["执行交易、计算状态并用 Dilithium-5 签名"]
Sign --> Broadcast["向 P2P 网络广播新区块"]
end