共识与区块
Velum 区块链由活跃的全节点轮流出块,每个时隙的目标为 2 秒。实际节奏以测量为准:浏览器和首页会显示最近的平均值。每个纪元(1,800 个区块,约 1 小时30 个区块,约 60 秒),节点凭借经过验证的工作发现该纪元的 VEL。
轮次
时间从创世起划分为 2 秒(目标值)一个的时隙(slot = floor((ts − 创世) / 2000))。对每个时隙,所有节点都会算出相同的轮次顺序:
活跃节点 = 已注册、且在最近 15 个区块内发出过存活信号的全节点
顺序 = 按 sha256(上一区块哈希 | slot | 地址) 对活跃节点排序
- 排在第一位的节点(排名 0)在时隙开始时提议区块。
- 替补节点每靠后一位就多等半秒(排名 × 500 ms)才能提议。
- 在轮到自己之前签名的区块会被拒绝。
顺序随每个区块变化(取决于上一个区块的哈希),所以没人能提前知道何时轮到谁。
存活信号
每个节点定期签发存活信号(presence:节点、高度、时间)。这些信号写入区块,决定谁处于活跃状态,同时也计入在线率——等级要求之一。
链不会停
如果活跃节点同时离线,每个空时隙都会让其余所有节点前进一位。几个时隙之后,任何已注册的节点都能继续出块。轻节点从不出块:它们签名的区块会被拒绝。
纪元
在每个纪元的最后一个区块中:
- 汇总待发现的数量:本纪元发行量、所保存手续费的 80%,以及网络储备返还的 0.1%。
- 15% 由出块和验证区块的节点发现,按出块数平均划分。
- 85% 由打通桥的节点发现:经过验证的投递 × 等级系数。
- 释放仍在进行中的代币奖池(
pool.fund)。 - 公布难度(已验证的工作量 / 发行的 VEL)和预言机价格。
- 市场中
ttl到期的订单失效。
每个节点的工作量不会逐张回执上链:每个节点公布一份汇总的工作申报(work.claim),其中包含其回执的 Merkle 根,下一个纪元再随机抽查 16 张回执(work.prove)。参见搭建节点。
链的选择与重组
当两个区块争夺同一高度时,按以下规则取胜:
最优 = 最高的链;高度相同时,取哈希较小的区块
节点发现更优的分支时会切换过去(重组)。由于轮次设计,重组都很短:通常是两个替补几乎同时提议,只涉及一两个区块。浏览器的索引器保存最近的状态以跟踪重组,并把被放弃的区块标记为「被放弃的分支」。
最终性 {#finalidad}
在 {{chain}} 中,最终性是概率性的:区块上面叠加的区块越多,它被放弃的可能性就越小。
| 用途 | 建议确认数 | 大约时间 |
|---|---|---|
| 消息、个人之间的小额转账 | 1 | 一个区块 |
| 商户与支付网关 | 6 | 几秒钟 |
| 交易所,普通金额 | 30 | 按目标节奏约 1 分钟 |
| 交易所,大额 | 一个纪元 | 主网中约 1 小时 |
基于 2/3 验证者签名的即时最终性已列入主网路线图。
区块结构
BlockHeader = { chain, height, prev, ts, slot, proposer, txRoot, receiptRoot, presenceRoot, stateRoot }
Block = { header, hash, sig, txs[], receipts[], presence[], rewards[], tokenRewards?[] }
hash = sha256(header 的规范 JSON)
sig = 提议者对 hash 的 ed25519 签名
各个根是交易、回执和存活信号的 Merkle 树(SHA-256)根。stateRoot 是应用该区块后完整状态的指纹:两个诚实节点总会得到相同结果。