Skip to content

Releases: FilOzone/pdp

v3.4.0

Choose a tag to compare

@rjan90 rjan90 released this 28 May 06:01
b8ae60d

This release upgraded the deployed PDPVerifier contract with data-set cleanup deposits and explicit piece-cleanup finalization. New data sets now hold a 0.1 FIL cleanup deposit that is returned to whoever completes cleanup after deletion, giving storage providers and permissionless cleanup callers a concrete incentive to clear on-chain piece state.

The active Mainnet and Calibnet proxies now report VERSION() == "3.4.0". The v3.3.0 release was library-only and did not deploy a PDPVerifier implementation, so this rollout intentionally fast-forwards the deployed contract version from 3.2.0 to 3.4.0.

Deployed

The implementation contracts were deployed from commit 1370f49f9af958e4e3a1396377035685d55ffdba. The v3.4.0 release tag points to a later documentation-only commit that finalized these release notes.

Mainnet:

Calibnet:

Breaking Changes

  • New data-set creation now requires a 0.1 FIL cleanup deposit. Callers of createDataSet() and callers that create a data set through addPieces(NEW_DATA_SET_SENTINEL, ...) must send at least FIL_CLEANUP_DEPOSIT() in msg.value; excess FIL is refunded. #270
  • The previous USDFC sybil-fee payment path has been removed from PDPVerifier. Integrations should use the FIL cleanup deposit flow instead of relying on USDFC sybil-fee payment getters or payment-contract constructor values.
  • PDPVerifier implementation deployment now uses constructor args (uint64 initializerVersion, uint256 challengeFinality). For this rollout, use initializerVersion = 3, challengeFinality = 10 on Calibration, and challengeFinality = 150 on Mainnet.
  • Several data-set liveness failures now revert with custom errors such as DataSetNotLive() and DataSetNotFound() instead of string revert reasons. Integrations that decode revert data should update their expectations (#274).

Added

  • Added a per-data-set cleanup deposit that is collected when a data set is created and paid to the caller who completes cleanup (#270).
  • Added cleanupPieces(setId, maxPieces) so deleted data sets with remaining pieces can be cleaned incrementally, clearing piece CID, leaf-count, and sum-tree storage before finalizing deletion (#270).
  • Added FIL_CLEANUP_DEPOSIT() to expose the current cleanup deposit amount to typed integrations (#270).
  • Added permissionless deletion and cleanup paths after INACTIVITY_WINDOW, while keeping cleanup provider-restricted during the inactivity window (#270).

Changed

  • Moved challengeFinality from proxy storage into an immutable implementation constructor value while preserving getChallengeFinality() for callers (#270).
  • Updated PDPVerifier deploy and upgrade tooling for the new constructor shape and network-specific challenge finality values (#270).
  • Kept getNextPieceId() and getNextChallengeEpoch() readable while a data set is in cleanup mode, allowing cleanup and indexing callers to inspect teardown state after deletion starts (#274).

Maintenance

  • Regenerated PDPVerifier storage layout files and updated storage-layout checks to support intentional deprecated-slot renames (#270).
  • Added cleanup-focused tests covering incremental cleanup, zero-piece data sets, permissionless cleanup after inactivity, deposit payout timing, and storage-slot clearing (#270).
  • Removed redundant data-set bounds checks now covered by storage-provider liveness checks, with tests updated for the custom-error revert shape (#274).

v3.3.0

Choose a tag to compare

@rjan90 rjan90 released this 07 May 13:02
c437a59

This release updates the PDP Solidity library with raw-size helper functions for PieceCIDv2 values. Cids.rawPieceSize(padding, height) derives the exact original raw byte size from FRC-0069 padding and tree height, while Cids.leafCountToRawSize(leaves) converts aggregate data-bearing leaf counts into raw byte estimates for callers that already work with PDP leaf totals. These helpers are useful for indexers, services, and integrations that need to recover or report user-data sizes from piece metadata without reimplementing the PieceCID sizing math.

No PDPVerifier contract upgrade is included in v3.3.0; the deployed Mainnet and Calibnet PDPVerifier contracts remain the v3.2.0 deployments. Integrations that only call the deployed contracts do not need to take action.

Deployed

No new deployments in this release. The active PDPVerifier addresses remain:

Mainnet:

Calibnet:

Breaking Changes

  • None. There are no changes to the deployed PDPVerifier contract API or behavior.

Added

  • Added raw-size helpers to the Cids library: rawPieceSize(padding, height) for exact per-piece raw sizes and leafCountToRawSize(leaves) for aggregate leaf-count estimates, with unit coverage for both behaviors (#266)

Maintenance

  • Added additive-only PDPVerifier storage layout generation and CI checks to reduce risk in future contract upgrades (#263)
  • Added a PDPVerifier upgrade checklist issue template for future rollouts (#260)

v3.2.0

Choose a tag to compare

@rjan90 rjan90 released this 19 Mar 06:59
323467e

This release upgrades PDPVerifier from v3.1.0 to v3.2.0 and adds better piece discovery APIs plus support for satisfying sybil-fee requirements via USDFC-backed payments. The existing FIL-based fee path remains supported.

Deployed

Mainnet:

Calibnet:

Breaking Changes

  • No breaking changes for existing PDP user flows such as dataset creation, piece management, proof submission, or the existing read/query methods used against v3.1.0.

Added

  • Added getActivePiecesByCursor() for cursor-based pagination, allowing clients to page through large data sets in O(limit) gas instead of paying the O(offset) scan cost of getActivePieces() (#246)
  • Added findPieceIdsByCid() to look up active piece IDs by piece CID with cursor-style scanning and bounded result size (#250)
  • Added support for satisfying sybil-fee requirements for createDataSet() and the new-data-set path of addPieces() via USDFC-backed payments, with FIL burn fallback when msg.value is provided (#249)
  • Added the USDFC_SYBIL_FEE() getter to IPDPVerifier so typed integrations can read the configured USDFC sybil-fee amount (#249)
  • Added the FIL_SYBIL_FEE() getter to IPDPVerifier so integrations can read the FIL fallback sybil-fee amount directly from the contract (#256)
    • Impact on existing PDPListener integrations: none. Listener callbacks and emitted events are unchanged, so existing listeners continue to work without modification unless they want to query the new getter.

Changed

  • Updated provePossession() to follow check-effects-interactions ordering by recording the proven epoch before external listener callbacks and refunds (#242)

Documentation

  • Added a per-piece security guarantees section to the design documentation to clarify the probabilistic protection model for data-set proving (#241)

v3.1.0

Choose a tag to compare

@rjan90 rjan90 released this 27 Oct 09:16
fd1b650

This release addresses an issue where the schedulePieceDeletions() function lacked duplicate piece ID validation, which could lead to unexpected behavior when the same piece ID was scheduled for removal multiple times.

The issue has been resolved with bitmap-based duplicate detection, and these contracts will be used for the FWSS GA release.

Deployed

Mainnet:

Calibnet:

Added

  • Prevent duplicate piece IDs in schedulePieceDeletions (#228)
    • Added two-level bitmap tracking for unlimited piece ID support in scheduled removals
    • Prevents duplicate piece IDs from being added to scheduled deletion queue
    • Enhanced validation to only allow live pieces to be scheduled for removal

v3.0.0

v3.0.0 Pre-release
Pre-release

Choose a tag to compare

@rjan90 rjan90 released this 21 Oct 10:42
856fd2f

M4: Filecoin Service Liftoff

Deployed

Mainnet:

Calibnet:

💥 Breaking Changes

  • BREAKING: Changed getActivePieces() return signature (#223)
    • Removed: rawSizes array from return values
    • Before: returns (Cids.Cid[] memory pieces, uint256[] memory pieceIds, uint256[] memory rawSizes, bool hasMore)
    • After: returns (Cids.Cid[] memory pieces, uint256[] memory pieceIds, bool hasMore)
    • Migration Guide: Remove any code that expects or uses the rawSizes return value from getActivePieces(). The raw size information was redundant as it can be derived from the piece CIDs themselves.

Changed

  • Removed EXTRA_DATA_MAX_SIZE limit (previously 2048 bytes) allowing unlimited extra data in function calls (#225)
  • Clarified naming: renamed rawSize parameter to proofSize in calculateProofFeeForSize() for better clarity (#223)

Removed

  • Removed internal calculateCallDataSize() function and gasUsed calculation logic (#222)

v2.2.1

v2.2.1 Pre-release
Pre-release

Choose a tag to compare

@rjan90 rjan90 released this 08 Oct 19:01
7a3b18b

PDP M3.1

Deployed

Mainnet:

Calibnet:

Added

  • Restored createDataSet() function for enhanced flexibility in dataset initialization, enabling empty "bucket" creation, smoother Curio and synapse-sdk integration (#219)
  • Implemented FVM precompiles for native payments, burn operations, and beacon randomness functionality (#207)

v2.2.0

v2.2.0 Pre-release
Pre-release

Choose a tag to compare

@rjan90 rjan90 released this 07 Oct 06:07
6045b45

PDP M3

Deployed

Mainnet:

Calibnet:

💥 Breaking Changes

  • Merged createDataset and addPieces functions for streamlined dataset creation (#201)
    • Removed: createDataset() function no longer exists
    • Changed: addPieces() now handles both creating new datasets AND adding pieces to existing datasets
    • Migration Guide:
      • To create a new dataset with pieces: Call addPieces(type(uint256).max, listenerAddress, pieces, extraData)
      • To add pieces to existing dataset: Call addPieces(datasetID, address(0), pieces, extraData)
    • Benefits: Single transaction replaces the previous two-step process (create, then add), reducing wait times and gas costs

Added

  • feat: Update PDP proof fee (#214)

Changed

  • rm unused constants (#211)
  • remove seconds per day again (#215)
  • Fixed vm.getBlockNumber in test environments (#206)

📝 Changelog

For the full set of changes since the last tag:

View all changes between v2.1.0 and v2.2.0

v2.1.0

Choose a tag to compare

@rjan90 rjan90 released this 17 Sep 08:51
5d2e601

📦 Deployed

Mainnet:

Calibnet:

💥 Breaking Changes

  • BREAKING: Switched from Piece CID version 1 to version 2 (#184)
    • New Cids.sol library with CIDv2 handling capabilities
    • No backward compatibility - CIDv1 support completely removed
    • Enhanced piece data validation using CID height information
    • Golden tests for CommPv2 functionality

🚀 Added

  • Data Set Indexing: Data set IDs now start at 1 instead of 0 (#196)
  • Event Enhancement: Added root_cids to RootsAdded event for better piece tracking (#169)

🔧 Changed

  • Interface Updates: IPDPProvingSchedule methods changed from pure to view for accurate state access patterns (#186)
  • Price Validation: Updated price validation logic to accept older price data for improved reliability (#191)
  • Performance Optimization: Reduced optimizer runs to minimize deployed contract size (#194)
  • Code Architecture: Transitioned from IPDPTypes.PieceData to Cids.Cid throughout the codebase for better type consistency (#184)
  • Code Quality: Comprehensive formatting improvements across all Solidity files and tests (#185)
  • Documentation: Updated README to point to latest release (#192)

🐛 Fixed

  • Various test stability improvements and bug fixes
  • Enhanced error handling in CID processing
  • Improved code formatting consistency

📝 Changelog

For the set of changes since the last tag:

View all changes between v2.0.0 and v2.1.0

v2.0.0

Choose a tag to compare

@rvagg rvagg released this 23 Jul 06:30
5d59f00

BREAKING: Renamed core terminology throughout the codebase for better clarity, for each of the following, all functions, variables, events, and parameters have been changed.

  • proofSetdataSet ("proof set" becomes "data set")
  • rootpiece
  • rootIdpieceId
  • ownerstorageProvider
  • Function renames:
    • createProofSet()createDataSet()
    • deleteProofSet()deleteDataSet()
    • getNextProofSetId()getNextDataSetId()
    • proofSetLive()dataSetLive()
    • getProofSetLeafCount()getDataSetLeafCount()
    • getProofSetListener()getDataSetListener()
    • getProofSetLastProvenEpoch()getDataSetLastProvenEpoch()
    • getProofSetOwner()getDataSetStorageProvider()
    • proposeProofSetOwner()proposeDataSetStorageProvider()
    • claimProofSetOwnership()claimDataSetStorageProvider()
    • addRoots()addPieces()
    • getNextRootId()getNextPieceId()
    • rootLive()pieceLive()
    • rootChallengable()pieceChallengable()
    • getRootCid()getPieceCid()
    • getRootLeafCount()getPieceLeafCount()
    • findRootIds()findPieceIds()
    • scheduleRemovals()schedulePieceDeletions()
    • getActiveRootCount()getActivePieceCount()
  • Event renames:
    • ProofSetCreatedDataSetCreated (parameter change: ownerstorageProvider)
    • ProofSetDeletedDataSetDeleted
    • ProofSetEmptyDataSetEmpty
    • ProofSetOwnerChangedStorageProviderChanged (parameters: oldOwner/newOwneroldStorageProvider/newStorageProvider)
    • RootsAddedPiecesAdded (parameter change: rootIdspieceIds)
    • RootsRemovedPiecesRemoved (parameter change: rootIdspieceIds)
    • PossessionProven event updated: IPDPTypes.RootIdAndOffset[]IPDPTypes.PieceIdAndOffset[]
  • Interface updates:
    • PDPListener interface method renames:
      • proofSetCreated()dataSetCreated() (parameter change: proofSetIddataSetId)
      • proofSetDeleted()dataSetDeleted() (parameter change: proofSetIddataSetId)
      • rootsAdded()piecesAdded() (parameter changes: proofSetIddataSetId, IPDPTypes.RootData[]IPDPTypes.PieceData[])
      • rootsScheduledRemove()piecesScheduledRemove() (parameter changes: proofSetIddataSetId, rootIdspieceIds)
      • possessionProven() → unchanged name (parameter change: proofSetIddataSetId)
      • nextProvingPeriod() → unchanged name (parameter change: proofSetIddataSetId)
      • ownerChanged()storageProviderChanged() (parameters: proofSetIddataSetId, oldOwner/newOwneroldStorageProvider/newStorageProvider)
    • IPDPTypes.RootDataIPDPTypes.PieceData (note: struct field remains piece)
  • Storage renames:
    • Constants:
      • MAX_ROOT_SIZEMAX_PIECE_SIZE
      • VERSION = "1.1.0"VERSION = "2.0.0" (to reflect this release)
    • State variables:
      • nextProofSetIdnextDataSetId (uint64)
    • Mappings:
      • nextRootIdnextPieceId
      • proofSetLeafCountdataSetLeafCount
      • proofSetListenerdataSetListener
      • proofSetLastProvenEpochdataSetLastProvenEpoch
      • proofSetOwnerstorageProvider
      • proofSetProposedOwnerdataSetProposedStorageProvider
      • rootCidspieceCids
      • rootLeafCountspieceLeafCounts

Deprecated

  • SimplePDPService: No longer actively maintained or deployed by default

What's Changed

New Contributors

Full Changelog: v1.0.0...v2.0.0

Initial PDP Release

Choose a tag to compare

@ZenGround0 ZenGround0 released this 29 Apr 00:10
e1664dc

The initial PDP release deployed to mainnet

  • PDPVerifier and PDPSimpleService
  • Extensible 2 contract architecture
  • Secure proving
  • Proof set management