6 月 30 日,Vitalik 发布新文章讨论了以太坊在交易确认速度方面的问题。Vitalik 提到以太坊相比五年前已经有了很大的改进,得益于EIP-1559(动态调整交易费用)和合并后稳定的区块生成时间,用户在 L1 上发送的交易通常在 5-20 秒内得到确认。然而,这个时间还可以进一步改善,对于一些明确要求几百毫秒甚至更短延迟的应用程序来说,进一步缩短确认时间非常有意义。为了实现这一目标,以太坊社区和研究人员提出了一些实际的解决方案,其中之一是预确认(Preconfirmations)。

什么是预确认?

Preconfirmations(preconf)是交易在被正式确认之前的一种预确认状态。具体来说,是指交易在被矿工包含进区块并且正式上链之前,由节点进行的一种临时确认,这种临时确认意味着多个节点验证交易的有效性,并暂时将其存储在内存池中。这样可以让用户在短时间内获得交易被接受的信号,从而即时获得反馈减少等待时间,提高用户体验。这种预确认并不是最终的确认,仍然有可能被撤销(比如区块重组),但这种情况相对较少。

通常情况,在预确认机制中提议者作为提供预确认服务的角色。用户可以通过支付额外的费用,获得其交易将被包含在下一个区块中的签名承诺。如果提议者未能履行其承诺,他们将面临经济惩罚。

具体实现方案:Based Preconfirmations

以太坊基金会研究员Justin Drake一直在推广一种以太坊预确认机制的方法:Based preconfirmations,通过具体的激励和惩罚机制,提供快速交易确认。

在 Based preconfs 机制中为了减少交易因各种原因而未能被打包进区块的风险,需要有额外的提议者惩罚和强制包含:

  • 提议者惩罚(proposer slashing):L1 提议者必须选择加入额外的惩罚条件才能成为预确认者(preconfer)。这点可以通过重质押相关机制实现。

  • 提议者强制包含(proposer forced inclusions):L1 提议者必须能够强制将交易包含在链上,即使在经济性不高或其他提议者不合作的情况下。这点可以通过 inclusion lists 实现。

L1 提议者通过选择加入以下两个预确认惩罚条件,成为预确认者。预确认者向用户发出签名的预确认承诺,承诺在指定时间段内将交易包含在区块中,并为兑现承诺获得用户支付的小费。

  • 活跃惩罚(liveness slashing):如果预确认者未能在指定时间段内包含预确认交易,将面临惩罚。

  • 安全惩罚(safety slashing):如果预确认者的承诺与实际包含的交易不一致,将面临惩罚。

此外,预确认者会根据在提议者前瞻中的位置来进行优先级的排序,以更快的执行预确认交易。提议者前瞻机制是一种用于确定未来一段时间内哪些提议者将有机会打包区块的机制,会给每个未来的提议者分配一个位置编号,这个编号表示他们在未来区块提议中的顺序。预确认者根据他们在提议者前瞻中的位置再进行一个排序,位置编号越小的预确认者优先级越高。假设某个交易得到了预确认者 B 的承诺,那么在 B 之前的位置编号更小的提议者(预确认者 A)可以立即将该交易打包,减少了用户的等待时间,不必等待轮到 B 作为提议者的那个时间段。如果 B 前面提议者未能及时打包交易,预确认者 B 需要在其时间段内确保这些交易被包含,否则将面临惩罚。

通过以上这些条件和设定,Based preconfs 可以给 L1 提供更快速地确认交易。如果 rollup 是 based 的(L2 的排序交给 L1 负责),也就是所有的 L2 区块在逻辑上被视为 L1 的交易,那么可以利用相同的机制来为 L2 提供预确认。

社区的讨论

Justin Drake 提出了 Based preconfirmations 之后引起了社区对预确认机制的关注。之后,社区围绕预确认的话题展开了丰富的讨论,比较值得关注的有:Blockchain Capital 成员Jonah B提出让用户自定义预确认机制中的惩罚措施;独立开发者Matthew提出利用链式预确认机制(preconf chaining)来保护提议者免受外部的意外情况如停电、网络中断等(活跃性故障)被处罚的方法;Primev 研究员Christian Matt介绍了两种预确认的模式:一种是由指定的领导者(leader-based)提供预确认,另一种则是在没有领导者的情况下,由多个竞争者(leaderless)提供预确认。在领导者模式优点是可以提供近乎百分百的确认保证。而在无领导者模式的竞争环境有助于有效地发现预确认的价格,优化验证者的收益。 Christian Matt 还提出了结合领导者和无领导者预确认的几种方案;以太坊基金会成员potuz讨论了 ePBS 框架下,引入预确认机制的各种挑战和解决方案。