我去年在中文区发过一个共识协议的设计文档,之后忙了一段别的事情,但是一直都在做相关的改进。
现在这个版本我感觉已经比较完善了,但是发在英文区技术板块之后被移到了山寨币板块,很快被淹没了,所以我又回中文区来试试,看看有没有人感兴趣。
我先谈一下主要设计思路,以免设计文档过于枯燥没人看下去:
我们先看看一个争议很大的问题,“PoS 还是 PoW?”
我先明确我的看法,我认为将来PoS必然要代替PoW。PoW的支持者现在最主要的依据就是它消耗了成本,所以就比较安全。但实际上消耗成本与安全性之间并没有因果关系,我们只要解决好PoS存在的一系列技术上的问题(主要是多重投票和历史攻击的问题),安全性不应该比PoW更低。即使不谈能源消耗的问题,我们从技术本身来看,PoW中的"工作量"用了一种不可控制的外部资源,用不可控制的外部资源来竞争很可能形成大规模的合作行为,影响到系统安全(参考
https://vitalik.ca/general/2019/04/03/collusion.html的讨论),“矿池”就是一个例子;而PoS使用的是区块链内部资源进行竞争,首先总量上不变,这会有巨大的好处,我们后面会谈,其次“权益”是账户的基本属性,人们不会大量的共享他们的账户信息,也就很难进行大规模的合作。
既然不局限于PoW,那我们再来看看一个共识机制的选择问题,到底是忠实于中本聪的链式共识还是用BFT(拜占庭容错)系列、DPoS(授信PoS)或者是DAG(有向无环图)结构呢?
所有共识体系的核心都离不开验证人(比如比特币中的矿工)角色,选择验证人都要通过竞争的过程(算力更高或者权益更高或者获得投票最多),这个过程决定了系统的安全性。但是竞争过程又有潜在的风险:
1)使用不可控制资源(工作量、获得选票的能力、硬盘容量等)引起大规模合作的风险;
2)对获胜者的激励如果不足,会导致缺乏足够的竞争者,给攻击者带来可乘之机,降低系统安全;
3)如果激励充足,又会导致财富集中化,参考
https://github.com/yj1190590/PoAS第一条的叙述(英文的,暂未翻译成中文,请将就看),进而造成参与者减少。
对于一个以
货币功能作为主导的账本来说,安全性的降低是难以接受的;而对于一个面向所有人的
公共链来说,参与者的减少也是难以接受的。通过大规模地减少验证节点,以提高性能的方式(BFT和DPOS)会极大的加剧上述问题,所以我认为不可取。所以,为了避免
1),选择只有PoS;为了避免严重的2)或3),我们只能放弃BFT和DPoS。但是即使不加剧,
2)和
3)的问题仍然存在,有没有什么方法能避免呢?答案是有,关键点就在于,让低权益的用户通过先合作(类似于投票)来降低工作强度,再与高权益的用户进行竞争(还是参考
https://github.com/yj1190590/PoAS第一条)。也就是在
3)的问题上把用户参与的问题解决了。我原先觉得DAG结构也有可能做到同样的事情,但是在异步方式下我没有找到能够让权益保持同步的方法,所以设计中还是使用了链式共识。
确定了链式PoS共识的方向之后,现在第一个问题是解决此结构下的缺陷,然后如何保留PoW的优点(比如简单高效的验证、客观性等)。现在的设计
解决了现存的NaS问题(多重投票和历史攻击),
客观性也基本得到保证(参考:
https://bitcointalk.org/index.php?topic=5094909.0 的讨论),验证上虽然没法做到等同于PoW的高效,但不影响重要功能(跨链验证等)。
接下来的目标是考虑的是还有哪些特性能够保留下来。
首先是性能,虽然无法在单条链上做到BFT和DPOS的高性能和DAG的扩展性,但是链式共识也有其扩展规模的方法,即多链结构,比如侧链或者分片。多链方案的分层结构实际上在安全方面更加合理,但是我认为没有简单明确的盈利方式(锁定汇率使得币价不能升值)导致了多链项目到很难得到大规模的应用。一个偶然的情况是,聚集权益的机制下,钱包程序会直接参与到挖矿活动中去,使开发者获得收入。这样刚好
解决了跨链项目的盈利模式问题,这会改变很多事情,我希望这能更好地解决扩展性问题。
显式最终性(explicit finality)也是一个很重要的特性,会带来许多的好处,比如提高确认速度和避免历史攻击,而在链式共识上通常不具备这种属性。利用前面提到的权益总量不变的特点,和两类投票的方式,这个能力也被成功地实现了。
总的来说,
PoAS是一种优化的链式PoS协议。以我个人的理解,应该在虚拟货币的应用上具有一定的价值,欢迎发表自己的看法,谢谢你们花时间阅读。
这里是简介,英文的,不想看可以略过
https://github.com/yj1190590/PoAS/中文版的设计文档PDF在这里:
https://docdro.id/oKEhuNR