在 Geth 客户端导致节点崩溃的高危漏洞后,以太坊又因为 EXTCODESIZE 操作码问题,而受到 DDoS 攻击。
这次攻击的现象是,矿工和节点需要花费很长的时间(20~60秒)来处理一些区块。造成攻击的原因是一个 EXTCODESIZE 操作码,它具有相当低的 gas 价格,需要节点从磁盘中读取状态信息。攻击交易调用此操作码的频率大约是 50000 次每区块。这样的后果是,网络已经大大放缓了,但却没有共识故障或内存超载发生。目前,已经确定了几个可持续的中期修复路线,并已有开发者正在实施。
故障发生后,以太官方建议大家切换至 Parity 客户端进行挖矿,并使用以下配置:
–cache-size-db 1024 –gas-floor-target 1000000 –gasprice 50000000000
如果要继续使用 geth 客户端,可以使用以下设置:
–cache 1024 –targetgaslimit 1000000 –gasprice 50000000000
或
–cache 1024 –targetgaslimit 1500000 –gasprice 20000000000
关于 geth 的配置,前者是 Jeffrey Wilcke 给出的,后者是以太坊创始人 Vitalik Buterin 给出的。
与此同时,当 bug 发现后,Geth 的开发者发布了新的软件版本,但其升级率却很低,这会使那些运行兼容拜占庭功能的节点在之后更加容易遭受 DoS 攻击。
究其原因,这个漏洞源于新的拜占庭功能中的一个疏忽,致使这个 bug 可能会被那些想要使以太坊节点离线的攻击者所利用。
下面再补充一些相关信息:
2015年,以太坊创始人 Vitalik Buterin 及其团队推出以太坊完整发展路线分为四个阶段,即 ”前沿”(Frontier)、”家园”(Homestead)、”大都会”(Metropolis)和 ”宁静”(Serenity)。据悉,由于开发精力受限,升级 “大都会” 需要经过两次硬分叉,即 “拜占庭” 硬分叉与 “君士坦丁堡” 硬分叉。“君士坦丁堡” 硬分叉时间未定,预计在 2018年。
以太坊已多次通过硬分叉来升级。区块链以节点连接,硬分叉后用户将使用新的共识链条。以太坊的硬分叉是改变以太坊底层协议,创建新的规则,提高整个系统。协议在某个特定区块上被激活。所有的以太坊客户端都需要升级,否则将停留在遵循旧规则的老链上。
硬分叉存在风险,目前以太坊平台已执行了四次硬分叉,其中一次导致替代链以太坊经典(ETC)的诞生。硬分叉并不一定会导致链条断裂,产生新的币种。但是2016年以太坊硬分叉提出的修改方案在社区存在很大争议,最终导致链条分裂为以太坊和以太坊经典,以太坊经典成为与以太坊竞争的加密数字货币。
“拜占庭”升级得到社区一致同意,“拜占庭”硬分叉将只是软件的更新,基本不会导致以太坊发生分裂产生新的以太币。升级后,早期软件版本将不再与新网络兼容。据以太坊分叉追踪器(Ethereum fork tracker)数据,“拜占庭”之前的区块链已经停止挖矿,这也有效的降低了分叉出新货币的可能。
“拜占庭”升级的关键在于网络节点的更新,以太坊社区要确保节点客户端能够准备好这次升级。以太坊客户端主要有Go ethereum(Geth)和Parity,还有以太坊创始人Vitalik Buterin所创建的基于python的客户端。在“拜占庭”硬分叉前夕,Geth软件客户端的开发者发现了一个DoS攻击漏洞。据CoinDesk所述,故障软件可能会导致共识问题,导致网络分区或将平台暴露来阻断服务攻击。Geth随即发布了一个新的软件版本。开发者表示“拜占庭”硬分叉正在平缓进行。
此次“拜占庭”升级将为以太坊平台引进9大关键改进协议(EIP)。“拜占庭”硬分叉是以太坊升级大都会的第一阶段,本次硬分叉将为智能合约的开发者提供灵活的参数,对于开发者更为友好。
硬分叉后以太坊的具体变化包括:
1、增加‘REVERT’操作符,允许处理错误不需要花费掉所有的gas(EIP 140)
2、现在交易接收方可以包括一个状态字段,用以指出交易成功还是失败(EIP 658)
3、在alt_bn128 (EIP 196)和配对检查上(EIP197)增加椭圆曲线和标量乘法,允许ZK-Snarks和其它加密数
4、支持大数模幂(EIP 198),实现RSA签名验证和其它加密应用。
5、支持可变长度返回值(EIP 211)
6、增加‘STATICCALL’操作符,允许对其它合约进行非状态改变调用(EIP 214)
7、修改难度调整公式,将叔块计算在内(EIP100)
8、冰河期/难度炸弹延期一年,区块奖励从5个以太坊降到3个以太坊(EIP 649)
另,Parity挖矿指南:
https://docs.google.com/document/d/1j3v8bKjXQcMNNdx5Juwo3PRRCcHy8XcA6R9-0W7NCso/edit
https://github.com/ethcore/parity/wiki/Mining