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
比推快讯
更多 >>- 10x Research:警惕未来近20亿美元代币解锁
- 外媒:特朗普将与部分Mugshot Edition NFT持有者共进晚餐
- 英国数字银行Monzo获得1.9亿美元融资,Hedosophia和CapitalG领投
- 花旗、摩根大通等美国金融巨头探索多资产交易共享账本技术
- DEGEN WAR宣布完成种子轮募资
- 通用证明聚合器Electron完成100万美元种子轮融资
- SCION软件提供商Anapaya Systems完成1000万瑞士法郎融资,Cape Capital等参投
- Coincheck正推进与SPAC公司合并协议以在美国纳斯达克上市
- Web3基础设施初创公司Hemera完成260万美元种子轮融资,LIF Capital等领投
- CryptoPunks以170万美元的销售额位居昨日销售排行榜榜首
- SEC认为Ripple并未违反任何规则但未来仍可能对其采取类似行动
- FOX记者:灰度从未为其以太坊期货ETF提交S-1申请
- Web3娱乐公司Imaginary Ones完成一轮超额认购融资
- Web3孵化服务提供商BlockBooster完成150万美元种子轮融资
- 基金管理巨头Vanguard暂无提供比特币ETF或其他加密相关产品计划
- KOR基金会推出KOR Protocol,Animoca Brands等为发布合作伙伴
- 门罗币P2P交易平台LocalMonero宣布结束运营
- Telos宣布获Presto Labs 100万美元战略投资
- OKX Ventures宣布投资Wild Forest
- Ola:面向早期Massive用户的首次代币分配快照拟于5月11日进行
- Liquidium宣布完成新一轮融资并已购入1 DeGod、1y00t和1 BTC DeGod
- 美SEC主席:收到的有关加密货币的问题“比例过大”
- 灰度撤回其以太坊期货ETF申请
- 美众议院民主党拟于本周提出针对加密货币混合服务的法案
- 摩根士丹利将美联储首次降息时间的预期从7月推迟到9月
- 彭博分析师:灰度现货比特币ETF净流入可能是短期交易的结果
- 前 NFL 巨星Rob Gronkowski同意支付 190 万美元以和解 Voyager Digital 投资者诉讼
- BTC短线跌破63000美元
- Advanced Blockchain AG在瑞士成立加密风投机构ABX Ventures
- Aragon 联合创始人推出自托管钱包 Tuyo
- 美联储Neel Kashkar:今年仍有可能降息
- Solana生态DePin项目Ambient完成200万美元融资,Borderless Capital 领投
- 美国国务院拟悬赏1000万美元以获取LockBit勒索软件组织头目信息
- 分析师:Robinhood第一季度营收有望创近三年新高,加密交易收入同比增幅或达一倍以上
- MoonPay 与 BitPay 合作简化加密货币交易
- Lava Foundation 完成1100万美元融资,未来几个月将推出Lava主网和空投
- Zora网络收购NFT铸造聚合器mint.fun
- 美联储Neel Kashkar:最有可能在较长时间内维持利率不变
- 扩容解决方案提供商ZKM完成500万美元Pre-A融资,OKX Ventures 领投
- 前红杉中国合伙人曹曦旗下投资公司Monolith Management拥有超过2400万美元的贝莱德现货比特币ETF
- 美国9只现货比特币ETF 昨日增持4412枚BTC,价值约2.8亿美元
- 渣打银行:美国财政主导地位和特朗普上台或将使比特币受益
比推专栏
更多 >>观点
项目
比推热门文章
- 英国数字银行Monzo获得1.9亿美元融资,Hedosophia和CapitalG领投
- 花旗、摩根大通等美国金融巨头探索多资产交易共享账本技术
- DEGEN WAR宣布完成种子轮募资
- 通用证明聚合器Electron完成100万美元种子轮融资
- SCION软件提供商Anapaya Systems完成1000万瑞士法郎融资,Cape Capital等参投
- Coincheck正推进与SPAC公司合并协议以在美国纳斯达克上市
- Web3基础设施初创公司Hemera完成260万美元种子轮融资,LIF Capital等领投
- CryptoPunks以170万美元的销售额位居昨日销售排行榜榜首
- SEC认为Ripple并未违反任何规则但未来仍可能对其采取类似行动
- FOX记者:灰度从未为其以太坊期货ETF提交S-1申请