Ethereum 君士坦丁堡安全漏洞对 FOD 的影响
FOD 与 Ethereum 的前世今生
FOD 是 FIBOS 生态中的稳定币,与 USDC 1:1 锚定,其服务于需要稳定价值衡量的应用场景。FOD 通过跨链网关将 ETH 链上的 USDC 与 FIBOS 链上的 FOD 价值绑定。这相当于 1:1 锁定了流通 FOD 同等数量的 USDC,并提供稳定即时的双向兑换。
Ethereum 君士坦丁堡升级对 FOD 的影响
本次 Ethereum 君士坦丁堡升级是 Ethereum 由大都会转向宁静前的最后一次升级,升级采取的硬分叉模式,为了防止用户在升级时转账出现问题,我们决定暂时关闭 FOD 通道。由于在 2019 年 01 月 16 日凌晨,Ethereum 君士坦丁堡版本被曝出安全漏洞因此 FOD 通道重启只能延期,重启日期需要根据 Ethereum 基金会对这次安全漏洞对处理结果待定。
Ethereum 君士坦丁堡安全漏洞
智能合约中 address.transfer(...)
和 address.send(...)
存在重入攻击漏洞。
漏洞产生的情况
- 合约中有一个函数 A,A 中在改变状态后调用了 transfer/send 函数。这种情况有的时候不是很明显,比如二次 transfer 或者内部调用另一个智能合约
- 必须存在一个攻击者可访问的函数 B,其中(a)改变状态,(b)状态改变与函数 A 的状态改变冲突。
- 函数 B 执行消耗需要小于 1600 gas (2300 gas 限制 - 700 gas(为 call 提供的))
为什么此次升级会产生安全漏洞
在 Ethereum 拜占庭版本每个存储操作需要消耗至少 5000 gas,而 transfer/send 操作 gas 消耗要求小于 2300,在执行上述操作的时候会因为 gas 限制而无法执行。
在 Ethereum 君士坦丁堡版本中,改良了 EVM 机制,从而减少了 gas 的消耗,因此出现了重入攻击的安全漏洞。
Parity 客户端升级方法
在这次安全漏洞之前的 Parity 客户端包含了 Ethereum 君士坦丁堡版本的升级并会在区块高度达到 7080000 时激活。针对这次的安全漏洞,Parity 官方紧急发布了新的 Parity 版本。
Parity 升级方法
升级指令:
bash <(curl https://get.parity.io -L) -r stable
验证是否更新成功
parity -v
得到的结果查看版本是否是 Parity-Ethereum/v2.2.7-stable
Parity Ethereum version Parity-Ethereum/v2.2.7-stable-b00a21f39-20190115/x86_64-macos/rustc1.31.1 Copyright 2015-2018 Parity Technologies (UK) Ltd.