Curio v1.28.0
✨ Overview
Curio v1.28.0 is the Nv28 network upgrade release. Storage Providers running on Mainnet MUST upgrade to this version (or later) before the Nv28 activation epoch.
Beyond Nv28 support, this release also tightens PDP correctness around rail finalization, ships an SSRF-config layer for outbound HTTP, and brings several smaller fixes that have accumulated since v1.27.4.
| Field | Value |
|---|---|
| Version | v1.28.0 |
| Type | Stable, network-upgrade required |
| Compare | v1.27.4...v1.28.0 (8 commits) |
| Build | Go 1.26+ required to build from source |
| Network | Nv28 (Lotus v1.36.0, go-state-types Nv28 actors) |
⭐ Highlights
🌐 Nv28 network upgrade
Lotus and the Filecoin FFI are bumped to the Nv28 dependency set (lotus v1.36.0-rc1, filecoin-ffi v1.36.0). Curio nodes running v1.27.x will not be able to follow consensus past the Nv28 activation epoch, so an upgrade is required for all Mainnet SPs before that point. (#1183)
🛡️ Outbound HTTP SSRF guardrails ([Subsystems.RobustHTTP])
Curio's robusthttp client now exposes a configurable SSRF policy. Operators can set per-deployment allow/deny rules for outbound HTTP destinations rather than relying on hardcoded behavior, which matters when Curio talks to retrieval clients, market peers, or PDP service URLs in untrusted networks. New configuration block documented in default-curio-configuration.md. (#1192)
💸 Sybil-fee enforcement on by default for PDP clients
PDP create and pull flows now enforce client-side sybil-fee payment by default. This closes a path where clients could submit data-set creation/pull requests without having staked the protocol-level sybil fee. Existing operators do not need to change configuration; the enforcement is transparent. (#1181)
🛠️ PDP rail-finalization correctness
Two related fixes around the PDP-pay integration with FilecoinPay rails:
- Detect rail finalization from
getRailrevert (#1190). FilecoinPay zeroes the rail struct atomically with the settle that bringssettledUpTotoendEpoch, so the post-confirmgetRailcall reverts. Previously, theEndEpoch == SettledUpToobservation never fired,deletion_allowedwas never set, andDeleteDataSetTasknever ran. Curio now treats agetRailrevert as finalization whenpdp_delete_data_setshowsafter_terminate_service = TRUEandservice_termination_epoch <= current. - Race-safe
parked_piecesupsert (#1195). The existing check-then-execute pattern could race two identical-piece writes and produceduplicate key value violates unique constraint "parked_pieces_active_piece_key". Replaced with a conflict-safe upsert utility. - Missing returns after
httpServerErrorin PDP handlers (#1188). Several PDP HTTP handlers continued executing after writing an error response, which could either double-write a body or take an erroneous further action. Returns now match the error-write.
🧹 Other fixes
itest-compat(#1182): integration-test harness adjustments for the Postgres-template itests landed in v1.27.4. No runtime impact.- Remove old CI files (#1184): cleanup of legacy CircleCI and self-hosted runner configuration.
📦 Compatibility
| Component | Required | Notes |
|---|---|---|
| Lotus | v1.36.0 |
Nv28 release. v1.36.0-rc1 also works for early upgrades. |
| Yugabyte | v2025.1 (Automatic) |
Unchanged from v1.27.x. |
| Forest | 0.33 (Automatic) |
Unchanged from v1.27.4. |
| Boost | NA | Curio's market path. |
⚠️ Upgrade notes
- Upgrade Lotus first, then upgrade Curio. The Curio v1.28.0 binary will not work against an older Lotus daemon that doesn't speak Nv28 actor versions.
- No DB migration is required for this release. The schema is unchanged from v1.27.4. The migrator will pick up no new files on first start.
- If you are still on v1.27.3 or earlier, read the v1.27.4 release notes first. v1.27.4 included the PDP V0 main-branch landing and the
parked_piecesuniqueness migration. Going1.27.3 → 1.28.0directly is supported but skipping the v1.27.4 notes is not recommended. - Calibrationnet may be a network version ahead. Curio v1.28.0 is the calibration-and-mainnet release for Nv28; there is no separate calibration-only build.
🙏 Contributors
Thank you to everyone who contributed to this release: @LexLuthr, @magik6k, @rvagg, @ZenGround0, @snadrus, @Phi-rjan, @Reiers.