本文档描述了Ethereum 2.0第0阶段——信标链的规范。
> 本文档描述了Ethereum 2.0第0阶段——信标链的规范。
[以太坊2.0](https://learnblockchain.cn/2019/06/15/eth-serenity)的核心是一个被称为“信标链”的系统链,信标链存储和管理验证人的注册。在Ethereum 2.0的初始部署阶段,成为验证人的唯一机制是在Ethereum 1.0上发起单向ETH `交易`到 `质押合约`里面。当信标链处理Ethereum 1.0存款 `收据`,达到激活余额,并完成排队处理时,验证人将会激活。自愿退出或是对不当行为的惩罚而强制退出,信标链上的主要负载来源是 `证明(attestations)`信息,`证明(attestations)`对于 `分片区块`(阶段1)的投票和 `信标区块`(阶段0)权益证明的投票同时可用。
## 自定义类型
为了类型提示和可读性,我们定义了以下Python自定义类型:
| 名字 | SSZ 编码 | 描述 |
| – | – | – |
| `Slot` | `uint64` | a slot number |
| `Epoch` | `uint64` | an epoch number |
| `Shard` | `uint64` | a shard number |
| `ValidatorIndex` | `uint64` | a validator registry index |
| `Gwei` | `uint64` | an amount in Gwei |
| `Hash` | `Bytes32` | a hash |
| `Version` | `Bytes4` | a fork version number |
| `DomainType` | `Bytes4` | a domain type |
| `Domain` | `Bytes8` | a signature domain |
| `BLSPubkey` | `Bytes48` | a BLS12-381 public key |
| `BLSSignature` | `Bytes96` | a BLS12-381 signature |
## 常量
以下值是整个规范中使用的(不可配置的)常量。
| 名字 | 值 |
| – | – |
| `GENESIS_SLOT` | `Slot(0)` |
| `GENESIS_EPOCH` | `Epoch(0)` |
| `FAR_FUTURE_EPOCH` | `Epoch(2**64 – 1)` |
| `BASE_REWARDS_PER_EPOCH` | `uint64(4)` |
| `DEPOSIT_CONTRACT_TREE_DEPTH` | `uint64(2**5)` (= 32) |
| `JUSTIFICATION_BITS_LENGTH` | `uint64(4)` |
| `ENDIANNESS` | `’little’` |
### 配置
*注意:* 这里包含默认mainnet配置值是为了规范设计的目的。对于mainnet、testnet和基于yaml的测试,可以在 `configs/constant_presets`目录中找到不同的配置。这些配置会在发布时进行更新,在dev更改期间可能会不同步。
### 杂项
| 名字 | 值 |
| – | – |
| `ETH1_FOLLOW_DISTANCE` | `uint64(2**10)` (= 1,024) |
| `MAX_COMMITTEES_PER_SLOT` | `uint64(2**6)` (= 64) |
| `TARGET_COMMITTEE_SIZE` | `uint64(2**7)` (= 128) |
| `MAX_VALIDATORS_PER_COMMITTEE` | `uint64(2**11)` (= 2,048) |
| `MIN_PER_EPOCH_CHURN_LIMIT` | `uint64(2**2)` (= 4) |
| `CHURN_LIMIT_QUOTIENT` | `uint64(2**16)` (= 65,536) |
| `SHUFFLE_ROUND_COUNT` | `uint64(90)` |
| `MIN_GENESIS_ACTIVE_VALIDATOR_COUNT` | `uint64(2**14)` (= 16,384) |
| `MIN_GENESIS_TIME` | `uint64(1578009600)` (Jan 3, 2020) |
| `HYSTERESIS_QUOTIENT` | `uint64(4)` |
| `HYSTERESIS_DOWNWARD_MULTIPLIER` | `uint64(1)` |
| `HYSTERESIS_UPWARD_MULTIPLIER` | `uint64(5)` |
– 为了委员会的安全,`TARGET_COMMITTEE_SIZE`超过了[推荐的委员会最小大小111](http://web.archive.org/web/20190504131341/https://vitalik.ca/files/Ithaca201807_Sharding.pdf);有了足够的激活验证人(至少 `SLOTS_PER_EPOCH * TARGET_COMMITTEE_SIZE `),洗牌算法确保委员会的大小至少为 `TARGET_COMMITTEE_SIZE`。(具有可验证延迟函数(VDF)的不可偏随机性将提高委员会的鲁棒性,并降低安全的最小委员会规模。)
### Gwei值
| 名字 | 值 |
| – | – |
| `MIN_DEPOSIT_AMOUNT` | `Gwei(2**0 * 10**9)` (= 1,000,000,000) |
| `MAX_EFFECTIVE_BALANCE` | `Gwei(2**5 * 10**9)` (= 32,000,000,000) |
| `EJECTION_BALANCE` | `Gwei(2**4 * 10**9)` (= 16,000,000,000) |
| `EFFECTIVE_BALANCE_INCREMENT` | `Gwei(2**0 * 10**9)` (= 1,000,000,000) |
### 初始化值
| 名字 | 值 |
| – | – |
| `GENESIS_FORK_VERSION` | `Version(‘0x00000000’)` |
| `BLS_WITHDRAWAL_PREFIX` | `Bytes1(‘0x00’)` |
### 时间参数
| 名字 | 值 | 单位 | 时间 |
| – | – | :-: | :-: |
| `GENESIS_DELAY` | `uint64(172800)` | seconds | 2 days |
| `SECONDS_PER_SLOT` | `uint64(12)` | seconds | 12 seconds |
| `SECONDS_PER_ETH1_BLOCK` | `uint64(14)` | seconds | 14 seconds |
| `MIN_ATTESTATION_INCLUSION_DELAY` | `uint64(2**0)` (= 1) | slots | 12 seconds |
| `SLOTS_PER_EPOCH` | `uint64(2**5)` (= 32) | slots | 6.4 minutes |
| `MIN_SEED_LOOKAHEAD` | `uint64(2**0)` (= 1) | epochs | 6.4 minutes |
| `MAX_SEED_LOOKAHEAD` | `uint64(2**2)` (= 4) | epochs | 25.6 minutes |
| `MIN_EPOCHS_TO_INACTIVITY_PENALTY` | `uint64(2**2)` (= 4) | epochs | 25.6 minutes |
| `EPOCHS_PER_ETH1_VOTING_PERIOD` | `uint64(2**5)` (= 32) | epochs | ~3.4 hours |
| `SLOTS_PER_HISTORICAL_ROOT` | `uint64(2**13)` (= 8,192) | slots | ~27 hours |
| `MIN_VALIDATOR_WITHDRAWABILITY_DELAY` | `uint64(2**8)` (= 256) | epochs | ~27 hours |
| `SHARD_COMMITTEE_PERIOD` | `uint64(2**8)` (= 256) | epochs | ~27 hours |
### 状态列表长度
| 名字 | 值 | 单位 | 时间 |
| – | – | :-: | :-: |
| `EPOCHS_PER_HISTORICAL_VECTOR` | `uint64(2**16)` (= 65,536) | epochs | ~0.8 years |
| `EPOCHS_PER_SLASHINGS_VECTOR` | `uint64(2**13)` (= 8,192) | epochs | ~36 days |
| `HISTORICAL_ROOTS_LIMIT` | `uint64(2**24)` (= 16,777,216) | historical roots | ~52,262 years |
| `VALIDATOR_REGISTRY_LIMIT` | `uint64(2**40)` (= 1,099,511,627,776) | validators | |
### 奖励和惩罚
| Name | Value |
| – | – |
| `BASE_REWARD_FACTOR` | `uint64(2**6)` (= 64) |
| `WHISTLEBLOWER_REWARD_QUOTIENT` | `uint64(2**9)` (= 512) |
| `PROPOSER_REWARD_QUOTIENT` | `uint64(2**3)` (= 8) |
| `INACTIVITY_PENALTY_QUOTIENT` | `uint64(2**24)` (= 16,777,216) |
| `MIN_SLASHING_PENALTY_QUOTIENT` | `uint64(2**5)` (= 32) |
– `NACTIVITY_PENALTY_QUOTIENT `= `INVERSE_SQRT_E_DROP_TIME**2`,其中 `INVERSE_SQRT_E_DROP_TIME:= 2**12` epochs(大约18天)是不活动惩罚,将不参与验证 人的余额减少到大约 `1/sqrt(e) ~= 60.6%`的时间。实际上,在 `n`epoch之后,脱机验证人保留的余额大约是 `(1 – 1/INACTIVITY_PENALTY_QUOTIENT)**(n**2/2)`;所以在’`INVERSE_SQRT_E_DROP_TIME`epoch后,它大概是 `(1 – 1/ INACTIVITY_PENALTY_QUOTIENT)**(INACTIVITY_PENALTY_QUOTIENT/2)~= 1/sqrt(e) `
### 每个区块最大操作数
| Name | Value |
| – | – |
| `MAX_PROPOSER_SLASHINGS` | `2**4` (= 16) |
| `MAX_ATTESTER_SLASHINGS` | `2**1` (= 2) |
| `MAX_ATTESTATIONS` | `2**7` (= 128) |
| `MAX_DEPOSITS` | `2**4` (= 16) |
| `MAX_VOLUNTARY_EXITS` | `2**4` (= 16) |
### 域类型
| 名字 | 值 |
| – | – |
| `DOMAIN_BEACON_PROPOSER` | `DomainType(‘0x00000000’)` |
| `DOMAIN_BEACON_ATTESTER` | `DomainType(‘0x01000000’)` |
| `DOMAIN_RANDAO` | `DomainType(‘0x02000000’)` |
| `DOMAIN_DEPOSIT` | `DomainType(‘0x03000000’)` |
| `DOMAIN_VOLUNTARY_EXIT` | `DomainType(‘0x04000000’)` |
| `DOMAIN_SELECTION_PROOF` | `DomainType(‘0x05000000’)` |
| `DOMAIN_AGGREGATE_AND_PROOF` | `DomainType(‘0x06000000’)` |
介绍
本文档描述了Ethereum 2.0第0阶段——信标链的规范。
以太坊2.0的核心是一个被称为“信标链”的系统链,信标链存储和管理验证人的注册。在Ethereum 2.0的初始部署阶段,成为验证人的唯一机制是在Ethereum 1.0上发起单向ETH 交易
到 质押合约
里面。当信标链处理Ethereum 1.0存款 收据
,达到激活余额,并完成排队处理时,验证人将会激活。自愿退出或是对不当行为的惩罚而强制退出,信标链上的主要负载来源是 证明(attestations)
信息,证明(attestations)
对于 分片区块
(阶段1)的投票和 信标区块
(阶段0)权益证明的投票同时可用。
自定义类型
为了类型提示和可读性,我们定义了以下Python自定义类型:
名字 | SSZ 编码 | 描述 |
---|---|---|
Slot |
uint64 |
a slot number |
Epoch |
uint64 |
an epoch number |
Shard |
uint64 |
a shard number |
ValidatorIndex |
uint64 |
a validator registry index |
Gwei |
uint64 |
an amount in Gwei |
Hash |
Bytes32 |
a hash |
Version |
Bytes4 |
a fork version number |
DomainType |
Bytes4 |
a domain type |
Domain |
Bytes8 |
a signature domain |
BLSPubkey |
Bytes48 |
a BLS12-381 public key |
BLSSignature |
Bytes96 |
a BLS12-381 signature |
常量
以下值是整个规范中使用的(不可配置的)常量。
名字 | 值 |
---|---|
GENESIS_SLOT |
Slot(0) |
GENESIS_EPOCH |
Epoch(0) |
FAR_FUTURE_EPOCH |
Epoch(2**64 - 1) |
BASE_REWARDS_PER_EPOCH |
uint64(4) |
DEPOSIT_CONTRACT_TREE_DEPTH |
uint64(2**5) (= 32) |
JUSTIFICATION_BITS_LENGTH |
uint64(4) |
ENDIANNESS |
'little' |
配置
注意: 这里包含默认mainnet配置值是为了规范设计的目的。对于mainnet、testnet和基于yaml的测试,可以在 configs/constant_presets
目录中找到不同的配置。这些配置会在发布时进行更新,在dev更改期间可能会不同步。
杂项
名字 | 值 |
---|---|
ETH1_FOLLOW_DISTANCE |
uint64(2**10) (= 1,024) |
MAX_COMMITTEES_PER_SLOT |
uint64(2**6) (= 64) |
TARGET_COMMITTEE_SIZE |
uint64(2**7) (= 128) |
MAX_VALIDATORS_PER_COMMITTEE |
uint64(2**11) (= 2,048) |
MIN_PER_EPOCH_CHURN_LIMIT |
uint64(2**2) (= 4) |
CHURN_LIMIT_QUOTIENT |
uint64(2**16) (= 65,536) |
SHUFFLE_ROUND_COUNT |
uint64(90) |
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT |
uint64(2**14) (= 16,384) |
MIN_GENESIS_TIME |
uint64(1578009600) (Jan 3, 2020) |
HYSTERESIS_QUOTIENT |
uint64(4) |
HYSTERESIS_DOWNWARD_MULTIPLIER |
uint64(1) |
HYSTERESIS_UPWARD_MULTIPLIER |
uint64(5) |
- 为了委员会的安全,
TARGET_COMMITTEE_SIZE
超过了推荐的委员会最小大小111;有了足够的激活验证人(至少SLOTS_PER_EPOCH * TARGET_COMMITTEE_SIZE
),洗牌算法确保委员会的大小至少为TARGET_COMMITTEE_SIZE
。(具有可验证延迟函数(VDF)的不可偏随机性将提高委员会的鲁棒性,并降低安全的最小委员会规模。)
Gwei值
名字 | 值 |
---|---|
MIN_DEPOSIT_AMOUNT |
Gwei(2**0 * 10**9) (= 1,000,000,000) |
MAX_EFFECTIVE_BALANCE |
Gwei(2**5 * 10**9) (= 32,000,000,000) |
EJECTION_BALANCE |
Gwei(2**4 * 10**9) (= 16,000,000,000) |
EFFECTIVE_BALANCE_INCREMENT |
Gwei(2**0 * 10**9) (= 1,000,000,000) |
初始化值
名字 | 值 |
---|---|
GENESIS_FORK_VERSION |
Version('0x00000000') |
BLS_WITHDRAWAL_PREFIX |
Bytes1('0x00') |
时间参数
名字 | 值 | 单位 | 时间 |
---|---|---|---|
GENESIS_DELAY |
uint64(172800) |
seconds | 2 days |
SECONDS_PER_SLOT |
uint64(12) |
seconds | 12 seconds |
SECONDS_PER_ETH1_BLOCK |
uint64(14) |
seconds | 14 seconds |
MIN_ATTESTATION_INCLUSION_DELAY |
uint64(2**0) (= 1) |
slots | 12 seconds |
SLOTS_PER_EPOCH |
uint64(2**5) (= 32) |
slots | 6.4 minutes |
MIN_SEED_LOOKAHEAD |
uint64(2**0) (= 1) |
epochs | 6.4 minutes |
MAX_SEED_LOOKAHEAD |
uint64(2**2) (= 4) |
epochs | 25.6 minutes |
MIN_EPOCHS_TO_INACTIVITY_PENALTY |
uint64(2**2) (= 4) |
epochs | 25.6 minutes |
EPOCHS_PER_ETH1_VOTING_PERIOD |
uint64(2**5) (= 32) |
epochs | ~3.4 hours |
SLOTS_PER_HISTORICAL_ROOT |
uint64(2**13) (= 8,192) |
slots | ~27 hours |
MIN_VALIDATOR_WITHDRAWABILITY_DELAY |
uint64(2**8) (= 256) |
epochs | ~27 hours |
SHARD_COMMITTEE_PERIOD |
uint64(2**8) (= 256) |
epochs | ~27 hours |
状态列表长度
名字 | 值 | 单位 | 时间 |
---|---|---|---|
EPOCHS_PER_HISTORICAL_VECTOR |
uint64(2**16) (= 65,536) |
epochs | ~0.8 years |
EPOCHS_PER_SLASHINGS_VECTOR |
uint64(2**13) (= 8,192) |
epochs | ~36 days |
HISTORICAL_ROOTS_LIMIT |
uint64(2**24) (= 16,777,216) |
historical roots | ~52,262 years |
VALIDATOR_REGISTRY_LIMIT |
uint64(2**40) (= 1,099,511,627,776) |
validators |
奖励和惩罚
Name | Value |
---|---|
BASE_REWARD_FACTOR |
uint64(2**6) (= 64) |
WHISTLEBLOWER_REWARD_QUOTIENT |
uint64(2**9) (= 512) |
PROPOSER_REWARD_QUOTIENT |
uint64(2**3) (= 8) |
INACTIVITY_PENALTY_QUOTIENT |
uint64(2**24) (= 16,777,216) |
MIN_SLASHING_PENALTY_QUOTIENT |
uint64(2**5) (= 32) |
NACTIVITY_PENALTY_QUOTIENT
=INVERSE_SQRT_E_DROP_TIME**2
,其中INVERSE_SQRT_E_DROP_TIME:= 2**12
epochs(大约18天)是不活动惩罚,将不参与验证 人的余额减少到大约1/sqrt(e) ~= 60.6%
的时间。实际上,在n
epoch之后,脱机验证人保留的余额大约是(1 - 1/INACTIVITY_PENALTY_QUOTIENT)**(n**2/2)
;所以在’INVERSE_SQRT_E_DROP_TIME
epoch后,它大概是(1 - 1/ INACTIVITY_PENALTY_QUOTIENT)**(INACTIVITY_PENALTY_QUOTIENT/2)~= 1/sqrt(e)
每个区块最大操作数
Name | Value |
---|---|
MAX_PROPOSER_SLASHINGS |
2**4 (= 16) |
MAX_ATTESTER_SLASHINGS |
2**1 (= 2) |
MAX_ATTESTATIONS |
2**7 (= 128) |
MAX_DEPOSITS |
2**4 (= 16) |
MAX_VOLUNTARY_EXITS |
2**4 (= 16) |
域类型
名字 | 值 |
---|---|
DOMAIN_BEACON_PROPOSER |
DomainType('0x00000000') |
DOMAIN_BEACON_ATTESTER |
DomainType('0x01000000') |
DOMAIN_RANDAO |
DomainType('0x02000000') |
DOMAIN_DEPOSIT |
DomainType('0x03000000') |
DOMAIN_VOLUNTARY_EXIT |
DomainType('0x04000000') |
DOMAIN_SELECTION_PROOF |
DomainType('0x05000000') |
DOMAIN_AGGREGATE_AND_PROOF |
DomainType('0x06000000') |
本文参与区块链开发网写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 2020-08-10 00:18
- 阅读 ( 1464 )
- 学分 ( 48 )
- 分类:以太访2.0