模型
拜占庭对手最多控制总权益的三分之一,IntentionBFT 都能容忍。诚实权益因此始终超过三分之二:只要一组验证者的合计权益超过三分之二,就构成标准法定人数——本文档称之为 权益加权法定人数。网络是部分同步的:在稳定点之前,延迟是任意的;在稳定点之后,诚实验证者之间的延迟有界。主节点
验证者
链
2f+1 按质押加权的聚合签名
排序与价格自此不可更改
提议区块 — 批次摘要与经认证的价格
校验可得性、排序与价格
投票
认证本轮
提交
提交一个顺序
区块内的交易次序被提升成共识提交的对象,不再是执行过程的副产物。区块哈希覆盖已排序的载荷,所以共识之后再重排,提交它的那些签名就全部失效。 效果是:区块一旦最终确定,就有一个 权益加权法定人数对这个确切顺序签了名,而且同一轮里,没有哪个诚实验证者会为这批交易的另一种顺序签名。再加上按这个已提交顺序进行的串行执行,确定性重放就从一种实现惯例,变成了任何人都能核验的性质。单个提案内部,主节点仍有自由裁量空间——纳入哪些可用批次、怎么排列——这是一处残留的攻击面,靠主节点声誉,以及“拿不出有效价格观测就根本出不了块”这个事实来缓解。更强的公平排序构造已在跟踪,作为未来升级的候选。
批次可用性
朴素的协议里,主节点提议的区块,载荷里装着本轮的全部交易,共识消息的大小就这样和吞吐量绑死了。IntentionBFT 把数据传播和排序拆开。 验证者在后台持续传播交易批次。每个批次会被逐一确认,直到发起方能够证明它达到了 权益加权的可用性,此后提案才可以引用它——按摘要引用,而不是按内容。吞吐量再高,共识消息都很小;已提交的区块也总是可重放,因为没有哪个区块能引用只握在拜占庭少数方手里的数据。认证价格
验证者同时也是价格观测者,区块携带它据以执行的那组价格。预言机 sidecar每个验证者一个
验证者校验并签名包括按配置的阈值检查新鲜度
在验证者之间 gossip 扩散作为一条共识网络消息
认证价格按纪元与轮次
价格可用性是出块的前提拿得出当前轮次有效价格观测的验证者,才有资格提议区块——所以提交这些交易的签名,同时也提交了这些交易据以结算的价格。
它并不主张什么它把价格绑到了交易上,但并不能让价格变正确——共识认证的是一个法定人数的验证者在这一轮提交了这些观测值,仅此而已。
主节点声誉
主节点按确定性的权益加权轮换逐轮选出,并叠加了一个基于滑动窗口的声誉启发式。验证者反复提案失败——要么是不可用,要么是有对抗行为——在后续选择中就会被降权,槽位转给近期响应良好的验证者。这样一来,不可用的验证者就不会占着分给它的槽位拖住进度。 由于价格观测构成提案资格的门槛,声誉机制还必须避免把主节点资格集中到行情连通性最好的那批验证者手里。一条场所多样性要求——每个品种的观测须取自多个相互独立的来源——堵住了这条路。纪元与重配置
时间按纪元(epoch)组织。一个纪元之内,验证者集合和大多数参数保持不变。到了纪元边界,可以通过一次经治理授权的重配置改动:验证者集合变更、共识参数变更、风险参数更新,以及紧急动作。切换是原子的——每个诚实验证者都在同一个区块高度看到同一次切换。网络拓扑
验证者共识 · 内存池 · 预言机 sidecar · 内核 · 存储
唯一投票的角色
验证者全节点跟随并执行已提交区块;不投票
隔离——吸收公网读流量与对等连接,使验证者不直接暴露在开放互联网上
公共全节点任何人都可以运行;跟随、执行、提供读取服务
开放的一层
客户端前端 · 交易智能体 · 做市商 · 索引器
它们连接的是全节点,不是验证者。需要最低延迟、最完整视图的客户端会自己跑一个。
四层,从共识向外
这一层为什么存在
后续阅读
内存池
什么能到达共识、以什么顺序到达,以及什么会被丢弃。
IntentionKernel
区块的顺序和价格提交之后,会发生什么。
预言机
验证者签名之前,指数价格是怎么产生的。
运行节点
验证者集合为什么是封闭的,以及如何咨询加入事宜。