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.