[译]Ethereum 2.0阶段0 — 信标链官方文档一

本文档描述了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%的时间。实际上,在 nepoch之后,脱机验证人保留的余额大约是 (1 - 1/INACTIVITY_PENALTY_QUOTIENT)**(n**2/2);所以在'INVERSE_SQRT_E_DROP_TIMEepoch后,它大概是 (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
  • 阅读 ( 1067 )
  • 学分 ( 48 )
  • 分类:以太访2.0

评论