共识与区块

Velum 区块链由活跃的全节点轮流出块,每个时隙的目标为 2 秒。实际节奏以测量为准:浏览器和首页会显示最近的平均值。每个纪元(1,800 个区块,约 1 小时30 个区块,约 60 秒),节点凭借经过验证的工作发现该纪元的 VEL。

轮次

时间从创世起划分为 2 秒(目标值)一个的时隙(slot = floor((ts − 创世) / 2000))。对每个时隙,所有节点都会算出相同的轮次顺序:

活跃节点 = 已注册、且在最近 15 个区块内发出过存活信号的全节点
顺序     = 按 sha256(上一区块哈希 | slot | 地址) 对活跃节点排序
  • 排在第一位的节点(排名 0)在时隙开始时提议区块。
  • 替补节点每靠后一位就多等半秒(排名 × 500 ms)才能提议。
  • 在轮到自己之前签名的区块会被拒绝。

顺序随每个区块变化(取决于上一个区块的哈希),所以没人能提前知道何时轮到谁。

存活信号

每个节点定期签发存活信号(presence:节点、高度、时间)。这些信号写入区块,决定谁处于活跃状态,同时也计入在线率——等级要求之一。

链不会停

如果活跃节点同时离线,每个空时隙都会让其余所有节点前进一位。几个时隙之后,任何已注册的节点都能继续出块。轻节点从不出块:它们签名的区块会被拒绝。

纪元

在每个纪元的最后一个区块中:

  1. 汇总待发现的数量:本纪元发行量、所保存手续费的 80%,以及网络储备返还的 0.1%。
  2. 15% 由出块和验证区块的节点发现,按出块数平均划分。
  3. 85% 由打通桥的节点发现:经过验证的投递 × 等级系数。
  4. 释放仍在进行中的代币奖池(pool.fund)。
  5. 公布难度(已验证的工作量 / 发行的 VEL)和预言机价格。
  6. 市场中 ttl 到期的订单失效。

每个节点的工作量不会逐张回执上链:每个节点公布一份汇总的工作申报(work.claim),其中包含其回执的 Merkle 根,下一个纪元再随机抽查 16 张回执(work.prove)。参见搭建节点。

在测试网中,一个纪元持续一分钟;在主网中为一小时。在主网中,一个纪元持续一小时(1,800 个区块)。

发行规则见 VEL 货币,等级见搭建节点。

链的选择与重组

当两个区块争夺同一高度时,按以下规则取胜:

最优 = 最高的链;高度相同时,取哈希较小的区块

节点发现更优的分支时会切换过去(重组)。由于轮次设计,重组都很短:通常是两个替补几乎同时提议,只涉及一两个区块。浏览器的索引器保存最近的状态以跟踪重组,并把被放弃的区块标记为「被放弃的分支」。

最终性 {#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 是应用该区块后完整状态的指纹:两个诚实节点总会得到相同结果。