Skip to content

[SEV] Hotfix FWSS v1.2.0 compatibility with PDPVerifier v3.4.0 #278

@rjan90

Description

@rjan90

Summary

PDPVerifier v3.4.0 remains active on Calibration and Mainnet. The incident was caused by deployed FWSS v1.2.0 still calling IPDPVerifier.USDFC_SYBIL_FEE() during new data-set creation and pre-flight lockup validation, while PDPVerifier v3.4.0 had removed that getter as part of the cleanup-deposit change.

The chosen mitigation was the lower-disruption FWSS hotfix path, not PDPVerifier rollback. FWSS v1.2.1 preserves the FWSS v1.2.0 USDFC sybil-fee burn rail, but replaces the PDPVerifier getter dependency with a local 0.1 USDFC FWSS constant. Curio/SP software still needs to send the 0.1 FIL cleanup deposit required by PDPVerifier v3.4.0 when creating new data sets.

Current Status

Impact

  • New data-set creation through deployed FWSS v1.2.0 could fail against PDPVerifier v3.4.0 because FWSS called the removed USDFC_SYBIL_FEE() getter.
  • Existing data sets appeared unaffected.
  • PDPVerifier rollback was prepared as a fallback, but was not used.

Root Cause

FWSS v1.2.0 contained two IPDPVerifier(pdpVerifierAddress).USDFC_SYBIL_FEE() dependencies:

  • data-set creation sybil-fee burn-rail path
  • pre-flight minimum lockup calculation in validatePayerOperatorApprovalAndFunds()

Those calls were incompatible with PDPVerifier v3.4.0 because that release removed the old PDPVerifier USDFC sybil-fee getter and introduced the FIL cleanup deposit requirement for new data-set creation.

Active PDPVerifier State

Calibration

Mainnet

FWSS Hotfix State

Calibration

Mainnet

Completed Mitigation Checklist

Code / Release Prep

  • Create minimal filecoin-services hotfix branch from the deployed FWSS v1.2.0 baseline
  • Preserve the FWSS sybil-fee burn rail while removing the PDPVerifier getter dependency
  • Use a local FWSS 0.1 USDFC sybil-fee constant
  • Keep sybil-fee amount included in validatePayerOperatorApprovalAndFunds()
  • Bump FWSS VERSION() to 1.2.1
  • Run focused FWSS tests
  • Run full Forge test suite
  • Review and merge the hotfix PR into releases/v1.2.x

Calibration

  • Deploy FWSS v1.2.1 implementation
  • Announce planned FWSS upgrade
  • Execute FWSS upgradeToAndCall
  • Verify FWSS proxy implementation slot
  • Verify FWSS VERSION() returns 1.2.1
  • Verify FWSS nextUpgrade() is cleared
  • Verify PDPVerifier remains on v3.4.0
  • Run end-to-end Calibration smoke test

Mainnet

  • Proceed only after Calibration smoke test passed
  • Deploy FWSS v1.2.1 implementation
  • Announce planned FWSS upgrade
  • Execute FWSS upgradeToAndCall
  • Verify FWSS proxy implementation slot
  • Verify FWSS VERSION() returns 1.2.1
  • Verify FWSS nextUpgrade() is cleared
  • Verify PDPVerifier remains on v3.4.0

Closed-Out Status

Fallback

PDPVerifier rollback was the fallback path if the FWSS hotfix failed. It was not used because FWSS v1.2.1 was deployed and verified on both networks.

If PDPVerifier rollback ever becomes necessary later, use upgradeToAndCall(previousImplementation, 0x), not the existing PDP tools/upgrade.sh default migrate() calldata, because the proxy initializer counter is already 3 and v3.2.0 migrate() uses reinitializer(2).

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

Status
🎉 Done
Status
🎉 Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions