Casper+Sharding链 规范 V2.1(一)
每晚八点,我们在社区分享知识,等你。
NervosFans 微信公号:Nervosfans
入群请加乐乐微信:sensus113 美果大冰微信:xj73226
备注入群,谢谢!
进行中!!!!!
此文章为Casper + Sharding(shasper))链2.1版规范,非定稿。
本协议中,有中央PoS链用来存储并管理当前有效PoS验证人集。在当前PoW主链发送含有32ETH的交易才可成为初始验证人。交易发送完毕,到PoS链处理该区块时,交易发送人进入验证人排序阶段并最终成为有效(活跃)验证人,直至自愿注销或因不当行为被强行注销。
PoS链上的主要负载源是证明(attestations)。一个证明具有双重作用:
1. 证实信标链中的某个父块
2. 证实分片中的区块哈希(足够数量的此类证明创造了“交联(crosslink)”,确认分片区块到主链中)。
每个分片(比方说,总共1024个分片)本身就是一个PoS链,作存储交易和帐户用。交联一则用于将分片“确认”进主链,二则也是不同分片间能够彼此通讯的主要方式。
或者,还可以想象个更简单的“最小分片算法”,其中交联就是提出数据块的哈希,这些数据块本身彼此互不链接。
注:
https://github.com/ethereum/beacon_chain、an ethresear.ch post中的python代码没有反应出更新。出现分歧时,本文通常为最新修改版本。
术语
验证人:Casper /分片共识系统的参与者。在Casper机制中存入32 ETH押金验证人
活跃验证人集:当前正在参与的验证人,以及Casper机制希望生成并证明区块、交联及其他共识对象(的验证人)
委员会:活跃验证人集的(伪)随机采样子集。整体提及委员会时,如“该委员会证实X”,认为是“包含足够数量验证人,被协议承认可代表委员会的该委员会某子集”
提议人:出块的验证人
证明人:委员会中签署区块的验证人
信标链:中心化PoS链,是分片系统的基础
分片链:进行交易、存储账户数据的单链
交联:来自委员会的一组签名,证实分片链中的区块,可以包含在信标链中。交联是信标链“获悉”分片链更新状态的主要手段
时隙(Slot):长8秒的时间段,在此期间,一个提议人能够创建一个区块,一些证明人可以进行证明
代迁移:验证人集的变更
代:创世以来在特定链中发生代迁移的数量
周期:一个多区块跨度,在此期间,所有验证人都只有一次机会进行证明(除非在验证人内部发生代迁移)
落定,正当:参见Casper FFG定稿
常数
分片计数(SHARD_COUNT):代表分片数量的常数,目前设置为1024
押金大小(DEPOSIT_SIZE):32 ETH
最大验证人计数(MAX_VALIDATOR_COUNT):222= 4194304 #注意,一次性押金最大值为~1.34亿枚ETH
时隙时常(SLOT_DURATION):8秒
周期时长(CIRCLE_DURATION):64个时隙
委员会最小规模(MIN_COMMITTEE_SIZE):128(基本原理见建议最低值111)
PoW主链变更
本PoS/分片协议可单独于现有PoW主链实施。只需对PoW主链做两处变更,其中第二个变更非技术必须。
在PoW主链上增加合约;该合约支持存入DEPOSIT_SIZE的ETH;deposit函数以:(i)pubkey(字节),(ii)withdrawal_shard_id(int),(iii)withdrawal_addr(地址),(iv)randao_commitment(32字节),(v)bls_proof_of_possession 为参数
PoW主链客户端将实现一种prioritize(block_hash,value)的方法。区块可用且已验证时,此方法将其分数设置为给定值,并递归调整所有后代的分数。使得PoS信标链的终结小工具隐式地完结主链区块。注意,将此实现到PoW客户端是对PoW分叉选择规则的变更,因此是可视为分叉。
信标链
信标链是PoS系统的“主链”。主要职责为:
1. 存储并维护活跃、等待中以及退出的验证人集
2. 处理交联(见上文)
3. 处理自己链上的逐块共识以及定局小工具
以下为进入每个信标链区块的字段:
信标链状态分为活跃状态和结晶状态两种。
以下为活跃状态/ActiveState:
下为结晶状态/CrystallizedState:
ShardAndCommittee对象的形式
每个ValidatorRecord都是包含验证人信息的对象:
CrosslinkRecord包含待提交至区块链的上一个完整交联信息:
信标链处理
处理信标链与处理PoW链在很多方面非常类似。客户端下载并处理区块,维护当前“规范链”,终止于当前的“头部”。但是,由于信标链与现有PoW链的关系,并且本身是PoS链,所以(处理)也存在一定的差异。
由节点处理的信标链区块,必须满足三个条件:
1. parent_hash指向的父区块已被处理并认可
2. pow_chain_ref指向的PoW链区块已被处理并认可
3. 节点的本地时钟时间大于或等于GENESIS_TIME + slot_number * SLOT_DURATION计算得出的最小时间戳
未满足这三个条件时,客户端应延迟处理区块,直至三个条件都满足。
有鉴于PoS机制,出块将显著不同。客户端只在需要创建区块时检查其认为是规范链的链,并查找其时隙号;时隙到达时,按要求提议或证实区块。
信标链分叉选择规则
信标链使用的是“倾向包含最高时隙数合理区块(highest-slot-number justified block)的链”的Casper FFG分叉选择规则。从均来自同一个合理区块的诸多链间选择时,链使用“即时消息驱动的GHOST”(IMD GHOST)选择链的头部。
详见:
https://ethresear.ch/t/beacon-chain-casper-ffg-rpj-mini-spec/2760
网络模拟器实施见:
https://github.com/ethereum/research/blob/master/clock_disparity/ghost_node.py
以下为工作原理的例子(绿色代表完结区块,黄色代表合理区块,灰色代表证明):
信标链状态迁移函数
现在定义下状态迁移函数。设置层面,状态迁移由两部分组成:
1. 结晶状态重算,仅在block.slot_number> = last_state_recalc + CYCLE_LENGTH时发生,且影响CrystallizedState和ActiveState
2. 每块处理,即每个区块都发生(结晶状态重算区块期间时,(每块处理)待结晶状态重算之后发生),且仅影响ActiveState
结晶状态重算通常关注验证人集的变更,包括调整余额、添加删除验证人以及处理交联和管理区块合理(block justification);每块处理通常关注验证聚合签名并保存ActiveState中区块内活动相关的临时记录。
未完待续
https://notes.ethereum.org/SCIg8AH5SA-O4C1G1LYZHQ