{"componentChunkName":"component---src-template-article-js","path":"/genesis","result":{"data":{"strapiArticles":{"title":"信标链的创世","summary":"测试网Medalla创世后运行良好，本文全方位解读信标链创世。","publishDate":"2020-08-05","author":"Ben Edgington","authorImg":{"childImageSharp":{"fixed":{"src":"/static/64988ed2b203b1fa0319cf09a1f7b233/eed38/242b2a1f135cd3b7dabf840b72e1f69e.png"}}},"content":"来源 | [Ben Edgington](https://hackmd.io/@benjaminion/genesis)\n\n<br/>\n\n人生中能见证庞大的、分布式的多客户端区块链创世的机会是非常难得的。不久前的7月30日是以太坊1.0区块链创世的五周年——真正重大的创世事件很罕见且相隔甚远。\n\n至于以太坊2.0，[Medalla测试网](https://github.com/goerli/medalla)已经在8月4日上线，这很可能是我们今年下半年唯一一次在以太坊2.0发布前的正式彩排。\n\nEth2的创世机制说来有点复杂，创世是一个区块链系统为自身注入生命的过程。我将用浅显易懂的语言尽可能准确地讲解它。至于真正技术上的说明，读者可以在[Eth2 annotated spec](https://news.ethereum.cn/wp-admin/post.php?post=2149&action=elementor#genesis)上看我的注释。\n\n在下文，“创世事件”指代信标链启动并开始处理证明和区块的确切时间。也是slot 0 epoch 0开始的时间。\n\n（如果读者想看速览的话，可以直接跳到后文“创世的两种情况”部分）\n\n##  \n\n<br/>\n\n# 验证者存款\n\n首先，读者需要知道的一点背景知识是验证者在加入Eth2前需要将存款存进Eth1区块链上的合约里。对于每个Eth2的验证者来说，他们需要将32个ETH和其他一些数据发送到合约。例如，读者可以通过[Launchpad](https://medalla.launchpad.ethereum.org/overview)网站发送存款和数据到Medalla测试网。请记住Medalla现在在用Goerli测试网的ETH！不要发送主网的ETH到合约。当然，到了真正的信标链发布的时候，我们会用主网的ETH。\n\n接下来，我们只关心有效存款：不少于32个ETH的单笔存款，或属于同一个验证者的、总计不少于32个ETH的多笔存款，为此需要额外的数据验证（加密签名）。任何无效或不足的存款都将在创世中被忽略不计。\n\n##  \n\n<br/>\n\n# 信标节点\n\n在创世前，在Eth2链上活跃的只有信标节点；在创世后，验证者会马上活跃起来。信标节点维持着系统的状态，并在点对点的网络里相互通信。\n\n因此，在创世前，有大量的信标节点关注着以太坊1.0区块链，留意着存款合约上的有效存款。他们不需要24小时留意，因为Eth1的区块都被打上时间戳，因此节点可以在创世前的任何时间跟进最新情况。\n\n现在，大家都知道Eth1的区块可以回滚，且可以改变主意，决定哪些交易是有效的。这就是为什么你在交易所转入ETH时需要等待30个区块的时间。回滚的范围通常非常小——大约一到两个区块；但一旦遇到网络攻击，回滚的范围可以变很大。为了尽量避免在Eth2上出现这种情况，我们在同步Eth1链上数据时非常谨慎地保持[14](https://news.ethereum.cn/wp-admin/post.php?post=2149&action=elementor#seconds_per_eth1_block) * [1024](https://news.ethereum.cn/wp-admin/post.php?post=2149&action=elementor#eth1_follow_distance)秒的延迟，大概是4小时。我把这称为Eth1的同步距离 (Eth1 follow distance)。\n\n##  \n\n<br/>\n\n# 什么时候？谁？\n\n关于创世的两个问题“什么时候？”和“谁？”：什么时候开始，和谁会在创世块验证者大军里。这两个问题的答案定义着信标链的创世状态，所有其他的状态都由此衍生开来。\n\n大致的过程如下：\n\n1. 关注Eth1区块链上的存款情况\n2. 当经历了足够长的时间和存款达到一定数量时，创建创世状态\n3. 两天后，在创世时间启动区块链\n\n在第2步，我们在寻找Eth1上第一个区块时需要特别注意两点：\n\n- 是否有足够的存款；\n- 时间是否太早。\n\n符合这两个条件的第一个区块将被设为创世状态。\n\n时间和角色受以下三个关键参数设置的影响。\n\n- [MIN_GENESIS_TIME](https://news.ethereum.cn/genesis/#min_genesis_time)是创世事件可以发生的最早时间。对Medalla来说，就是[1596546000](https://news.ethereum.cn/genesis/#L8) Unix time——2020年8月4日UTC时间13：00：00，采用RFC2822规范。\n- [GENESIS_DELAY](https://news.ethereum.cn/genesis/#genesis_delay)是[172800](https://news.ethereum.cn/wp-admin/post.php?post=2149&action=elementor#L25)秒，48小时整。这是创建创世状态和区块链与创世事件启动之间的时间间隔。这段延迟是为了让客户端团队将创世状态写进他们的信标节点里，这样即使他们不运行验证者节点也不再需要关注Eth1的区块链。这也为举办一般的创世事件直播和聚会活动预留时间。😄\n- [MIN_GENESIS_ACTIVE_VALIDATOR_COUNT](https://news.ethereum.cn/genesis/#min_genesis_active_validator_count)是在创建创世状态前我们在Eth1的存款合约里所需的最低有效验证者数量。在Medalla测试网（和主网），这个参数是[16384](https://news.ethereum.cn/wp-admin/post.php?post=2149&action=elementor#L7)个验证者。\n\n##  \n\n<br/>\n\n# 创世的两种情况\n\n创世状态时基于满足以下两个条件的第一个Eth1区块：\n\n创世状态所基于的第一个Eth1区块需要满足以下两个条件：\n\n1. 至少有16384 (MIN_GENESIS_ACTIVE_VALIDATOR_COUNT) 个验证者已经在这个或之前的区块上进行了注册；以及\n2. 它的时间戳不会太早（不早于MIN_GENESIS_TIME – GENESIS_DELAY这段时间）。\n\n根据这两个要求得到满足的顺序，创世过程会以下面两种情况进行:\n\n###  \n\n## 1.存款数先得到满足\n\n在这种情况下，条件1先得到满足。我们在最早创世时间前收到的足够的存款。\n\nMedalla测试网在MIN_GENESIS_TIME – GENESIS_DELAY间的时间点是周日8月2日UTC 1300。\n\n我们的启动区块是这个时间后挖到的第一个Eth1上的区块，也就是在13：00：05挖到的（1pm后的5秒）。\n\n如果截止到该区块存款合约收到的有效存款达到或超过16384笔，那么至今收到的所有存款都会包含在创世状态里。因此，验证者数量可能会远超出16384（在Altona测试网上，我们将MIN_GENESIS_ACTIVE_VALIDATOR_COUNT设为640，但结果有685个创世验证者）\n\n这个Eth1区块启动创世状态的运算，而Medalla的创世事件将在区块时间戳的48小时整后开始。在这个例子里，就是8月4日周二的13：00：05。\n\n\n\n<center><img src=\"https://i.ibb.co/VDsxpxv/genesis-1-7175d28623.png\"/></center>\n\n\n\n<center>**红色区块是满足两个条件的第一个Eth1区块**</center>\n\n请注意，由于Eth同步距离，我们直到4小时后才真正知道创世状态。也就是说，在这种情况下，我们在8月2日周日UTC1700知道Medalla的创世状态。\n\n### 总结\n\n如果存款数额首先满足要求，那么创世事件会在最早创世时间后几秒启动。创世状态包含这个时间点48小时以前的所有注册了的验证者。\n\n###  \n\n## 2.时间戳满足条件早于存款数\n\n这种情况在条件2先得到满足的时候发生。存款数增长缓慢，且没有在预定时间内达到最低有效数额。\n\n在这种情况下，打包第16384笔存款的Eth1区块成为启动区块。我们假设这个区块是在8月5日周三UTC 12：34：56被挖到的。\n\n现在，区块状态将包含16384个验证者和在那个区块里任何其他有效的存款。因此，如果那个区块包含多笔存款的话，那么将会有比最低存款数更多的验证者包含在内。\n\n创世时间将会是该区块的时间戳加48小时。在这个例子里，就是8月7日周五UTC 12:34:56。\n\n\n\n\n<center><img src=\"https://i.ibb.co/0CJLVRz/genesis-2-72557e9e97.png\"/></center>\n\n\n\n\n<center>**红色的区块是满足两个要求的第一个Eth区块**</center>\n\n同样，由于Eth1同步距离，直到这个Eth1区块被挖出的4小时后我们才知道创世状态或创世时间。\n\n### 总结\n\n如果存款增长慢，在包含第16384笔存款的Eth1区块被挖出48小时，创世事件会启动。创世状态包含16834个验证者，加上在同一个Eth 1区块里的其他一些验证者。\n\n##  \n\n<br/>\n\n# 结论\n\n文章写到这里，大家是不是已经了解了信标链创世的基本情况？🙂\n\n如果你没赶上Medalla创世状态的敲定，那么你的验证者将会按照存款时间顺序进入排队队伍，并在创世后被慢慢安排到验证者集里。排队可能会花上几个小时或几天的时间。\n\n期待在Medalla上见到你们！🚀\n\n<br/>\n\n<br/>\n\n\n\n声明：ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源，文章版权归原作者所有，转载须注明原文出处以及ethereum.cn，若需长期转载，请联系ethereumcn@gmail.com进行授权。","content_images":null,"cover":{"childImageSharp":{"resize":{"src":"/static/25c5301c3cd17fba6baca61b367a6283/497c6/b7de7f83a83ae59dd022f53fa97d15c4.png"}}}},"site":{"siteMetadata":{"title":"Ethereum Community Network","description":"以太坊——全球的、开源的去中心化应用平台。DeFi？NFT？游戏？虚拟世界？每一个人都可以成为以太坊的开发者和用户！","author":"@ECN以太坊社区网络","keywords":"以太坊,以太坊中国,Ethereum,以太坊中文","siteLanguage":"zh-CN","siteLocale":"zh-cn","siteUrl":"http://ethereum.cn","twitterUsername":"@EthereumCN"}}},"pageContext":{"id":"Articles_113"}},"staticQueryHashes":["1238767529","2940180826"]}