{"content":{"title":"以太坊2.0 共识算法","body":"## Casper如何保持着超大规模的验证人的情况下，实现即时最终性？\r\n当下以太坊共识验证人的规模大约是60万，这么多的验证节点，在技术上面保证了以太坊极大的去中心化。但是以太坊共识算法是确定性的算法，也就是说经过了一定的时间后，某个区块一定是不会改变的，而不是概率性确定。\r\n\r\ncasper采取对PBFT算法进行改造，保持pbft算法的即时敲定性，但是必须解决pbft的以下三个问题：\r\n1. 防止Leader作恶而进行veiw change所带来的极高切换成本。\r\n2. Leader选举的不可预测性，在区块链领域非常重要。这保证了区块链的liveness。\r\n3. 因为pbft是基于广播签名消息通信的共识算法，每轮共识都需要两轮N^2通信复杂度，这就极大的限制了共识节点数量。而共识节点数量是区块链是否去中心化最重要的一个方面。\r\n4. 出块和对块共识，从理论来说是两个东西，为了提高性能，最好可以进行解耦。\r\n\r\n## 分叉选择规则\r\n\r\n* Committee (委员会) 是由信标链在每个 slot 期间随机选择的验证者集合 (每个委员会的目标验证者数量是128名)，每个委员会中第一名被随机选择的验证者将有机会在该 slot 期间提议新区块，该委员会的其他验证者将对这个被提议的区块进行证明 (attest)。\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/05/Gpzu5nTI6455bf3304930.png)\r\n\r\nLMD 让“消息 (messages)”发挥了作用，即以太坊2.0链上的最终性是“由最新消息驱动的”。消息就是证明 (attestation)，所有这一切归结起来就是，**拥有最多投票的分叉链将被认为是“权威链”**。\r\n\r\n上图中体现了由最新消息驱动的分叉选择规则：绿色区块表示经由 LMD GHOST 分叉选择规则证明了的区块，笑脸符号表示最新的验证者证明 (attestations)，某个区块中的证明总量 (笑脸总数) 就是该区块的权重，用区块中的数字表示。\r\n\r\n在上图中，尽管位于上方的那条分叉链是最长的链，但**下方的那条由绿色区块组成的链才是“权威链”****，因为绿色区块包含了最多的证明，也就是拥有最多的验证者投票**。\r\n\r\n\r\n## 检查点\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/05/So6nkvij6455c05584d3c.png)\r\n\r\n每个epoch的第一个区块我们称之为检查点。\r\n每个epoch里面32个slot，每个slot会根据随机算法，选出一个委员会，这个committee的第一个validator成为proposer，proposer出块，committee的validtor对区块进行attestation投票，同时对上一个 epoch的检查点进行FFG投票，也就是会进行两次投票，一次attestation投票给本slot的新出块，同时对上一个epoch的检查点区块进行投票。attestation投票是为了分叉链选择做依据。FFG投票是为了进行区块的justified和finalized。\r\n\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/05/S8GcFjCw6455c069e281f.png)\r\n\r\n每个epoch会把全网所有的验证人随机的全部分配到每个slot，而每个slot的committee的validator都会对上一个epoch的检查点进行FFG投票，这也意味着，本epoch走完时，上一个epoch的检查点已经被justified（+2/3的验证人对其投了FFG投票）。pre-pre-epoch的检点已经被finalized（不会再改变，相等于pbft的+2/3的commit投票）。\r\n\r\n从这里我们知道，casper是通过把全网60万validator通过随机分组的方式组成每个slot的committee，如果是32个slot的话，每个slot的committee的validator数量是60万/32 == 2万左右。这2万左右个validator对在slot时间（12秒）内对当下slot进行attestation投票和对上一个Epoch进行FFG投票。以这样的方式把对于一个区块的投票，变成了对于一个epoch的投票（和polkadot的grandpa对于链进行投票一个意思），从而加快了的区块链性能。\r\n\r\n而且对于一个检查点的投票周期，从PBFT的全部validator在一个view周期内全部投票完毕，变成了全部validator在32个slot时间内（12秒*32==6.4分钟）投票完毕，解决（缓解）了pbft在大规模验证人情况下的消息复杂度剧增的问题。\r\n\r\n当然了，这里的validator的退出是会带来一个远程攻击，解决办法是validator请求提出后，会有一个延迟期，延迟期过了才能退出。\r\n\r\n\r\n\r\n\r\n## 参考\r\nhttps://support.token.im/hc/zh-cn/articles/17271785866009-imToken-Labs-%E4%BB%A5%E5%A4%AA%E5%9D%8A-PoS-%E6%BC%94%E8%BF%9B%E5%8F%B2\r\nhttps://learnblockchain.cn/article/1235\r\nhttps://www.tuoluo.cn/article/detail-56560.html\r\nhttps://www.techflowpost.com/article/detail_10681.html\r\nhttps://www.8btc.com/article/473424\r\nhttps://zhuanlan.zhihu.com/p/135231626\r\nhttps://www.jianshu.com/p/f8656a2a4a9d"},"author":{"user":"https://learnblockchain.cn/people/808","address":null},"history":null,"timestamp":1683343751,"version":1}