Filecoin – 一个越界Bug引发升级
Filecoin在11月24号需要强制升级,好奇看了看最新的代码。不看不知道,一看吓一跳。一个越界的Bug引发了这次升级。这个越界的Bug使程序实现的SDR算法和协议不一致。利用这个越界的Bug可以提升SDR的性能50%左右。
1 官方补丁
在11.02号官方提交一个补丁:
commit 0d17d7466f40e1228a4bab25f8b4861cb0d2da4d Author: Friedel Ziegelmayer <me@dignifiedquire.com> Date: Mon Nov 2 12:06:36 2020 +0100 fix(storage-proofs-porep): fix graph generation - expander: divide before casting to u32 - drg: move predecessor to the first position
这个补丁比较重要,这个补丁“修正”了当前的协议。整个SDR算法中节点的连接关系也发生了改变。
先讲讲简单的 drg: move predecessor to the first position改动,比较简单:
- parents[m_prime] = node - 1; + // Immediate predecessor must be the first parent, so hashing cannot begin early. + parents[predecessor_index] = node - 1;
一个节点的Base父亲节点的依赖,从原来的是最后一个Base父亲节点依赖上一个节点,变成了第一个Base父亲节点依赖上一个节点。简单的说,如果Base父亲节点的最后一个才依赖上一个节点,那Base父亲节点的前面一些节点可以先计算,无须依赖上一个节点的计算。使用老的算法,虽然不能完全提前算整个节点的结果,但是能提前一点好一点。改成最新的协议,这一点点也不能提前算了。
2 越界Bug
重点在于这个改动:expander: divide before casting to u32改动:
原始逻辑,就是在is_legacy包裹住的逻辑:
transformed as u32 / self.expansion_degree as u32
transformed的值是通过Feistel加密算法生成,具体的逻辑含义可以查看之前的文章。即使在不需要知道逻辑的情况下,可以估算出整个表达式的计算结果的范围。self.expansion_degree是固定值8。整个表达式的最大范围为:
2^32/8 = 2^29
注意的是,在32G扇区大小的情况下,节点个数是2^30次方。而这个表达式因为限制了transformed是32bit的无符号整数,导致了整个exp parents的范围在2^29次方范围内,并不是2^30次方。换个说法,在32G扇区大小的情况下,某一层的节点只依赖上一层的前一半节点。64G扇区大小的情况下,上一层依赖相对更少。
总结升级前的exp parents的依赖逻辑如下图:
也就是说,之前的SDR协议逻辑并不是Filecoin协议规定的SDR协议逻辑。在之前的SDR协议基础上,SDR的计算过程可以优化如下:
在某一层的一半计算完成后,可以立即开始下一层的计算,加速整个SDR的计算过程。整个计算可以加速50%左右。Oops。
3 升级时间
在build/params_mainnet.go定义了下两个版本的升级时间:
const UpgradeCalicoHeight = 265200 const UpgradePersianHeight = UpgradeCalicoHeight + (builtin2.EpochsInHour * 60)
Calico将在265200高度升级,也就是北京时间11月25号进行升级。Persian在Calico后2.5天完成。在两个版本中间的2.5天是个混合版本,新的和老的SDR协议都支持,从Persian开始,只支持升级后的SDR协议。
总结:
Filecoin官方在11月25号强制升级。升级前的SDR算法实现在越界漏洞,Exp父亲节点的依赖只和上一层的前一半的数据有关。SDR算法可以通过多个并行计算提高性能。升级后的SDR算法修复了漏洞,并同时加强了Base父亲节点的依赖关系。
来源:Star Li
比推快讯
更多 >>- IntoTheBlock:持有超1000枚BTC的地址余额已接近FTX破产前水平
- NFT借贷平台Blend总交易额超60亿美元
- Anchorage Digital向Cumberland DRW转移1000万枚ARB
- Tether CEO:Tether或投入大量资源建立基于Holepunch技术的P2P金融市场终端
- 区块链游戏 4 月份融资额达到 9.9 亿美元,创2021年1月以来新高
- Core基金会推出500万美元基金,以支持创新区块链项目
- Genesis获批以现金和加密货币的形式向客户偿还30亿美元
- 彭博社:多个基金公司预计下周SEC不会批准以太坊现货ETF
- Vitalik Buterin:区块链社区扩展应着眼于更广泛的外部领域
- Syncracy Capital 联创:SOL 到月底可能会达到 200 美元
- 分析师:FET代币可能会突破 4 美元
- 截至第一季度末,Point72持有价值7750万美元的富达现货比特币ETF
- 分析师:5 月份现货比特币 ETF 的资金流入已弥补 4 月份净流出
- Coinbase:宏观环境仍然是加密货币表现的关键驱动因素
- 美国9只现货比特币ETF 今日净增持3,743枚BTC,约合2.51亿美元
- 经 FBI 调查,加密名人 Thomas Sfraga 承认电汇欺诈罪
- 美联储理事Bowman:若通胀停滞或反弹,愿意支持美联储重启加息
- Kraken正在权衡是否在欧盟新规下取消对USDT的支持
- 以太坊二层网络ZkSync暗示将于6月底进行空投
- Web3 focus应用程序Focus Tree完成200万美元种子轮融资,Sfermion 领投
- Coinbase 将在 Solana 网络上添加对Drift Protocol(DRIFT)的支持
- Vitalik Buterin:近期和中期将着重提升以太坊网络的无许可性和去中心化特性
- Blast创始人:推迟空投计划只是因为需要更多时间进行开发
- ETH突破3100美元,日内涨幅达到5.17%
- 比特币突破67000美元,日内涨2.76%
- 美SEC 政策总监 Heather Slavkin Corzo 离职, Corey Klemmer 接任
- 两名中国籍人士因通过加密投资诈骗至少7300万美元在美被捕
- 超 50 家加密行业参与者致信美众议院议长,以支持 FIT21法案
- 截至5月16日贝莱德IBIT持仓超过27.6万枚比特币
比推专栏
更多 >>观点
项目
比推热门文章
- NFT借贷平台Blend总交易额超60亿美元
- Anchorage Digital向Cumberland DRW转移1000万枚ARB
- 【比推一周Web3新闻精选】Millennium Management、Apollo等多家机构Q1持有超 26 亿美元的现货比特币 ETF;鲍威尔重申可能在更长时间内将利率维持在高位;芝商所CME计划推出比特币现货交易
- Tether CEO:Tether或投入大量资源建立基于Holepunch技术的P2P金融市场终端
- 区块链游戏 4 月份融资额达到 9.9 亿美元,创2021年1月以来新高
- Vitalik:改善以太坊网络的无许可和去中心化的近期和中期未来
- 吴说周精选:美国CPI回落、 养老金购买比特币ETF、Lido和Paradigm推EigenLayer竞品与新闻 Top10
- 矿工淘汰赛阶段之后,BTC火箭发射
- 市场沉寂如死水?别急,下一波造富狂潮已暗中涌动!
- Core基金会推出500万美元基金,以支持创新区块链项目