Nervos Fans

Casper+Sharding链 规范 V2.1(一)

2018-09-03  本文已影响1人  526ba0512193

每晚八点,我们在社区分享知识,等你。

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_chainan 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主链客户端将实现一种prioritizeblock_hashvalue的方法。区块可用且已验证时,此方法将其分数设置为给定值,并递归调整所有后代的分数。使得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

上一篇下一篇

猜你喜欢

热点阅读