作者:Aditya Asgaonkar
编译:ETH中文
引介动因
传统的验证者客户端设置
以太坊验证者通过使用他们的质押私钥对消息(例如区块或证明)进行签名来参与权益证明(PoS)协议。质押私钥只能通过客户端软件来访问,客户端根据分配给验证者的职责安排消息的创建和签名。传统的验证者客户端设置存在一些风险:
- 质押私钥存在一个地方。如果一个攻击者获得了这个密钥,它可以创建冲突的消息,从而导致验证存款被罚没。 - 不运行自己的验证者的质押者需要把他们的质押私钥交给运营商。为了保证他们质押私钥的安全,他们必须信任该运营商。 - 如果验证者客户端软件不能创建及时的消息以履行验证者职责,该验证者会遭受怠工惩罚(inactivity),余额会减少。这可能是由于软件崩溃、断网、硬件故障等原因造成的。 - 如果验证者客户端连接的信标节点出现故障,验证者可能跟在一个少数节点所在的分叉上,导致在PoS协议的其他部分显示是离线状态。
分布式验证者协议
分布式验证者协议提供了一个解决方案,以减轻与传统的单个验证者设置相关的风险与担忧。此外,该协议还可以用来实现先进的质押设置,例如去中心化的质押池。
基本概念
请注意:请参考词汇表,了解分布式验证者规范中引入的新术语的解释。(见文末)
分布式验证者背后的两个基本概念是:
- 共识:单个验证者的职责被分给几个共同验证者(co-validator),他们必须协作,在对任何消息签名之前就如何投票达成一致。 - M-of-N门限签名(threshold signatures):验证者的质押私钥被分割为N个部分,每个共同验证者持有一个share。当至少有M个共同验证者对如何投票达成共识时,他们分别用各自的share来对消息签名,一个组合签名可以由这些share重构出来。
PoS以太坊使用的是BLS签名方案,其中私钥可以使用M-of-N秘密共享技术(使用Shamir的Secret Sharing方案),以实现M-of-N门限签名。
通过把一个合适的(偏重于安全性的)共识算法和一个M-of-N门限签名方案组合起来,这个DV协议确保共识是得到密码学保证的,且至少有M个共同验证者对任何决定达成一致。
资源
实现
Python中分布式验证者协议实现的概念证明,与以太坊客户端Prysm交互。 - ssv:分布式验证者协议的Go实现,与以太坊客户端Prysm交互。
文档
- 分布式验证者架构视频介绍
总体架构
本规范提出一种实现分布式验证者客户端(Distributed Validator Client, DVC)软件的方法,以便它能提供额外的分布式验证者功能。 - 信标节点和远程签名者不知道DVC的存在,也就是说,它们以为彼此像往常一样相互连接。
假设
- 我们假设总共有N个节点,以及一个M-of-N门限签名方案。为了与拜占庭容错共识协议兼容,我们假设M=ceil(2*N/3)。 - 本规范假设某种基于领袖的、偏重安全性的共识协议,让共同验证者选定相同的证明/区块进行签名。我们假设共识协议在M个正确节点下成功运行,且在N个总节点中不超过F=(N-1)/3个拜占庭节点和不超过N-M-F防失败节点(fail-stop node)。 - 我们假设验证者客户端安全运行的通