编者注:本文为 Ethereum Foundation 于 1 月 11 日发布的君士坦丁堡升级公告。
以太坊网络将在高度为 7,080,000 的区块上激活计划中的升级,预计是在2019 年 1 月 16 日,星期三。具体的日期会因为这段时间的出块时间波动而推迟或提早 1~2 天。倒计时可以在这个网站 https://amberdata.io/blocks/7080000 上看到。大家还可以在这个网站 http://forkmon.ethdevops.io/ 上实时观察网络升级的情况。
君士坦丁堡是啥?
“Constantinople(君士坦丁堡)”是本次网络升级的代号。此前还有像“伪龙(Spurious Dragon)”和“拜占庭(Byzantium)”这样的代号。
作为以太坊的用户或是持币者,我们要做什么操作吗?
如果你在使用:
- 中心化的交易所(比如 Coinbase、Karken 或是币安)
- 网页端钱包服务(比如 Metamask、MyCrypto 或是 MyEtherWallet)
- 移动端钱包(比如 Coinbase Wallet、Status.im、Trust Wallet 或是 imToken)
- 硬件钱包(比如 Ledger、Trezor 或是 KeepKey)
你不需要做任何操作!除非你收到所用交易所或钱包的通知,提示您采取额外步骤(但这跟你用的服务有关,跟以太坊链无关)。
我在跑全节点/我在挖矿,我也躺着就行?
请下载最新的以太坊客户端:
- 最新的 geth 客户端 (v1.8.20)
- 最新的 Parity 客户端 (v2.1.11-stable)
- 最新的 Harmony 客户端 (v2.3 Build 72)
- 最新的 Pantheon 客户端 (v0.8.3)
- 最新的 Trinity 客户端 (v0.1.0-alpha.20)
- 最新的 Ethereum Wallet/Mist (v0.11.1)
我在跑全节点/我在挖矿,要是我不更新呢?
如果你没有更新到上述最新版本的客户端,升级激活之后,你的客户端会使用分叉前的共识规则与其它同样没有更新的节点同步并继续共识(如果还有矿工在那里出块的话)。由于共识规则已经发生变化并且互不兼容,没有更新的客户端将不能发送交易到更新后的以太坊网络上,只能发送交易到没有更新的网络中。
对以太坊来说,“网络升级”是怎么一回事?
网络升级即对以太坊底层协议的更改,目的是增加一些能够增强系统功能的新规则。区块链系统的的去中心化属性,使得升级并不像你更新手机上的 App 那么简单。区块链中的网络升级需要整个社区的协调和沟通,包括多个以太坊客户端开发者们的交易,以使升级顺利进行。
网络升级过程是什么样的?
当社区对升级应当包含哪些更新达成一致意见之后,以太坊客户端(比如 geth、Parity 和 Harmony) 的开发者们会把相关更新的代码写到客户端软件里。这些协议更新会在指定的区块高度后激活。没有更新到最新规则的节点都会留在更新前的网络中,使用旧的共识规则继续运行。
君士坦丁堡分叉包含了哪些更新?
网络升级中包含的更新是用 EIP 来标记和指代的。以太坊升级提案(Ethereum Improvement Proposal,EIP)描述了为以太坊平台实施的一些标准,包括核心协议规范(core protocol specification)、客户端 API(client API)以及合约标准(contract standard)。下列 EIP 为君士坦丁堡升级中包含的更新:
EIP 145:EVM 中的按位移动(bitwise shifting)指令
- 提供与其它算术运算代价相当的原生按位移动指令
- EVM 现在是没有按位移动指令的,但支持其他逻辑和算术运算。按位移动可以通过算术操作来实现,但这样会有更高的 Gas 消耗,也需要更多时间来处理。使用算术操作,实现 SHL 和 SHR 需要耗费 35 Gas,但这一提案提供的原生指令只需消耗 3 Gas。
- 一句话总结:该 EIP 为协议加入了一个原生的功能,使得 EVM 中的按位移动操作更便宜也更简单。
EIP 1014:Skinny CREATE2
- 加入新的操作码
0xf5
,需要 4 个堆栈参数(stack argument):endowment
、memory_start
、memory_length
、salt
。具体表现与 CREATE 相同,但使用keccak256( 0xff ++ sender_address ++ salt ++ keccak256(init_code)))[12:]
,而不是keccak256(RLP(sender_address, nonce))[12:]
,作为合约初始化的地址。 - 拓宽我们的交互范围:有些合约在链上还不存在,但可以确定只可能包含由 init_code 特定部分创建出来的代码,有了该 EIP 之后我们就可以和这样的合约交互。
- 对包含与合约的 conterfactual 交互的状态通道来说非常重要。
- 一句话总结:这一 EIP 让你可以与还没有被创建出来的合约交互。
EIP 1052:EXTCODEHASH 操作码
- 该 EIP 指定了一个新的操作码,可以返回某合约代码的 keccak256 哈希值。
- 许多合约都需要检查某一合约的字节码,但并不需要那些字节码本身。比如,某个合约可能想检查另一合约的字节码是不是一组可行的实现之一;又或者它想分析另一合约的代码,把所有能通过分析的合约(即字节码匹配的合约)添加进白名单。
- 合约现在可以使用 EXTCODECOPY 操作码,但在那些只需要哈希值的情境下,这一操作码相对来说是比较贵的,尤其是对那些大型合约而言。新的操作码EXTCODEHASH 部署之后,就可以只返回某一合约字节码的 keccak256 哈希值。
- 一句话总结:该 EIP 会让相关操作变得更便宜(消耗更少的 Gas)。
EIP 1283:改变 SSTORE 操作码所用 Gas 的计算方式
- 该 EIP 建议改变 SSTORE 操作码的净 Gas 计量方式,以启用合约存储的新用法,并在计算方式与当前大多数实现不匹配的情形下减少无谓的 Gas 消耗(译者注:因为在当前的大多数实现中都不需要某些操作,但原来的计算方式会把这些操作所需的 Gas 也算进去)。
- 一句话总结:该 EIP 会让某些操作变得更便宜(只需更少的 Gas 即可完成操作),减少那些当前“多余”而昂贵的 Gas 消耗。
EIP 1234:推迟难度炸弹爆炸的时间并调整区块奖励
- 平均出块时间会因为逐渐加速的难度炸弹(也叫做“冰河时期”)而不断上升。该 EIP 提议推迟难度炸弹约 12 个月,并且(为适应冰河期推迟)而减少区块奖励。
- 一句话总结:该 EIP 保证了我们不会在 PoS 准备好并实现之前使以太坊停止出块。
感谢您的支持!
诚挚感谢以太坊社区、以太坊所有客户端的开发者们,以及通过不同平台聚集到一起、投入精力、贡献思想的参与者们。
特别感谢 Reddit 用户“cartercarlson”,授权我们使用他的 Reddit 帖子(编者注:即几天前的《君士坦丁堡更新总结》);以及 MyCrypto 团队,授权我们使用他们的 Medium 文章“Ethereum Constantinople: Everything You Need To Know”。
声明:这是一个新兴的、不断发展并且高度技术性的领域。如果您选择执行本文中的建议并继续参与,请保证您已经充分了解了这些建议对您的影响。您应该理解其中的风险,包括但不限于意料之外的代码 bug。选择建议时,请独立评估结果的风险。本文以及其中的建议绝非销售协议,也绝不构成任何意义上的担保条款,包括但不限于对文本所提及的以太坊网络和以太坊客户端的担保。
原文链接: https://blog.ethereum.org/2019/01/11/ethereum-constantinople-upgrade-announcement/
作者: Hudson Jameson