Skip to content
This repository was archived by the owner on May 24, 2026. It is now read-only.

Brian44913/boost-2.4.7

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Boost v2.4.7 (Custom Fork) — ⛔ DEPRECATED / ARCHIVED

本仓库已归档,不再更新。 请使用继任分支 Brian44913/boost-2.5.2

所有沿用改动已经 squash + audit 后 port 到 2.5.2。openReader mmap CAR v2 验证移除--start-epoch-head-offset 已被上游 v2.5.2 subsume,不再需要单独维护。filecoin-ffi 在 2.5.2 上重新使用 git submodule(不再 vendor)。


基于 Filecoin 官方 Boost v2.4.7 的定制分支,针对大规模存储提供者场景进行了优化。


与原版的改动

1. 跳过 CommP 验证 (SkipCommPVerify)

涉及文件:

  • node/config/types.go — 新增 SkipCommPVerify 配置项
  • node/config/def.go — 默认值 true
  • storagemarket/provider.go — Provider Config 新增字段
  • storagemarket/direct_deals_provider.go — DDPConfig 新增字段
  • node/modules/storageminer.go — 配置传递
  • node/modules/directdeals.go — 配置传递
  • storagemarket/deal_execution.go — 离线订单和在线订单验证逻辑
  • storagemarket/direct_deals_provider.go — DDO 直接导入验证逻辑

改动说明:

新增 SkipCommPVerify 配置开关(默认 true),统一控制三处 CommP 验证:

场景 文件 原行为 改后
离线订单导入 deal_execution.go execDealUptoAddPiece() 强制 verifyCommP() SkipCommPVerify=true 时跳过
在线订单传输 deal_execution.go transferAndVerify() 强制 verifyCommP() SkipCommPVerify=true 时跳过
DDO 直接导入 direct_deals_provider.go execDeal() 计算 CommP + 比对 SkipCommPVerify=true 时跳过计算,用文件大小推算 PieceSize

配置方式(config.toml):

[Dealmaking]
  SkipCommPVerify = true   # 默认已开启

收益: 跳过 CommP 计算可显著加速离线订单和 DDO 订单的导入速度,尤其在批量导入场景下效果明显。


2. 移除 openReader 中的 mmap CAR v2 验证

涉及文件:

  • storagemarket/deal_execution.goopenReader() 函数

改动说明:

移除 carv2.OpenReader(filePath) 调用。该调用使用 mmap 映射整个 CAR 文件到内存,仅用于格式验证后立即关闭,验证结果未被使用。

原代码:

v2r, err := carv2.OpenReader(filePath)  // mmap 映射整个文件
if err != nil { return nil, err }
_ = v2r.Close()                          // 立即关闭,结果丢弃

问题: 大规模应用阶段(大量未完成订单),特别是重启 boostd 进程时,所有订单并发触发 mmap,耗尽虚拟地址空间导致进程崩溃。

收益: 消除 mmap 地址空间耗尽导致的崩溃风险,提升大规模场景下的稳定性。


3. 发单支持自定义 libp2p 地址(--libp2p

涉及文件:

  • cmd/boost/deal_cmd.go

改动说明:

dealFlags 中新增 --libp2p 可选参数,允许覆盖链上查询到的存储提供者完整 libp2p 地址(含 peer ID),直接连接指定节点进行发单。

适用命令:

boost deal --libp2p=/ip4/10.78.36.98/tcp/49413/ws/p2p/12D3KooWNZ1bNn... ...
boost offline-deal --libp2p=/ip4/10.78.36.97/tcp/4949/p2p/12D3KooWRJi4nB... ...

实现方式:

  • GetAddrInfo 获取链上地址后、Connect 之前,用 peer.AddrInfoFromString 解析 multiaddr
  • 完整替换 addrInfo(包含 peer ID 和地址列表),不再受链上 PeerId 限制

未指定时: 完全兼容原版行为,不影响任何现有逻辑。


4. 修复 Web UI Storage Deals 页面大数据量白屏

涉及文件:

  • react/src/transform.js — 递归改迭代
  • react/src/gql.js — transformResponseLink 加 try-catch
  • react/src/Deals.js — 空值保护
  • react/src/DirectDeals.js — 空值保护

问题现象: 当 deals 数量超过 5 万条后,Storage Deals 页面加载后变成空白,浏览器控制台报错:

TypeError: can't access property "deals", b is undefined (Deals.js:108)

根因分析:

虽然前端查询是分页的(默认 10 条/页),但 pollInterval: 10000 每 10 秒重新查询。当 SELECT count(*) FROM Deals(50k+ 行)变慢时,Apollo Client 的 poll 触发竞态,导致 data 返回 undefined,前端直接访问 data.deals 崩溃白屏。

此外 transform.js 中的递归 response 转换在极端场景下有栈溢出风险。

修复方案(3 层防护):

层级 改动 作用
根因修复 transform.js 递归改为迭代(显式栈) 消除栈溢出风险,不受数据量限制
安全网 gql.js transformResponse 加 try-catch 转换失败时返回原始数据,不中断 Apollo 链路
崩溃保护 Deals.js / DirectDeals.js!data || !data.deals 检查 data 为 undefined 时显示错误提示,不再白屏


5. 修复 Direct Deals 翻页无数据 bug

涉及文件:

  • db/directdeals.goList() 函数

问题现象: Web UI 的 /direct-deals 页面,第 1 页有数据,从第 2 页开始翻页无数据且无报错,而 /storage-deals 页面翻页正常。

根因: DirectDealsDB.List() 中的 cursor 子查询写错了表名:

// 原代码(错误)
where += "CreatedAt <= (SELECT CreatedAt FROM Deals WHERE ID = ?)"

// 修复后
where += "CreatedAt <= (SELECT CreatedAt FROM DirectDeals WHERE ID = ?)"

cursor 是 direct deal 的 UUID,但子查询去了 Deals 表(普通订单表),找不到记录返回 NULL,导致 CreatedAt <= NULL 永远为 false,翻页结果为空。这是上游 boost 官方代码的 bug。


6. filecoin-ffi 内置为普通目录

涉及文件:

  • extern/filecoin-ffi/ — 完整 FFI 源码

改动说明:

原版通过 git submodule 引用 filecoin-ffi,clone 后需要 git submodule update --init --recursive 才能编译。本分支将 filecoin-ffi v1.34.0(commit 586063e)直接作为普通目录提交,clone 后即可编译,无需额外操作。

编译:

git clone git@github.com:Brian44913/boost-2.4.7.git
cd boost-2.4.7
make build

原版仓库

About

Filecoin Boost v2.4.7 custom fork — SkipCommPVerify, mmap crash fix, --boost-host, web UI large dataset fix

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors