Releases: FilOzone/pdp
v3.1.0
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:
- PDPVerifier Implementation: 0xe2Dc211BffcA499761570E04e8143Be2BA66095f
- PDPVerifier Proxy: 0xBADd0B92C1c71d02E7d520f64c0876538fa2557F
Calibnet:
- PDPVerifier Implementation: 0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42
- PDPVerifier Proxy: 0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C
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
M4: Filecoin Service Liftoff
Deployed
Mainnet:
- PDPVerifier Implementation: [0x78d8C130995701136EeC85094628015967315FB8
- PDPVerifier Proxy: 0x8b3e727D1Df709D5cac9FcBef57B139A9298766C
Calibnet:
- PDPVerifier Implementation: 0x9Fe814dd4eC663557c3D74c386CB5BC4be528Dd1
- PDPVerifier Proxy: 0x06279D540BDCd6CA33B073cEAeA1425B6C68c93d
💥 Breaking Changes
- BREAKING: Changed
getActivePieces()return signature (#223)- Removed:
rawSizesarray 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
rawSizesreturn value fromgetActivePieces(). The raw size information was redundant as it can be derived from the piece CIDs themselves.
- Removed:
Changed
- Removed
EXTRA_DATA_MAX_SIZElimit (previously 2048 bytes) allowing unlimited extra data in function calls (#225) - Clarified naming: renamed
rawSizeparameter toproofSizeincalculateProofFeeForSize()for better clarity (#223)
Removed
- Removed internal
calculateCallDataSize()function andgasUsedcalculation logic (#222)
v2.2.1
PDP M3.1
Deployed
Mainnet:
- PDPVerifier Implementation: 0xbeeD1aea4167787D0CA6d8989B9C7594749215AE
- PDPVerifier Proxy: 0x255cd1BFE3A83889607b8A7323709b24657d3534
Calibnet:
- PDPVerifier Implementation: 0x4EC9a8ae6e6A419056b6C332509deEA371b182EF
- PDPVerifier Proxy: 0x579dD9E561D4Cd1776CF3e52E598616E77D5FBcb
Added
v2.2.0
PDP M3
Deployed
Mainnet:
- PDPVerifier Implementation: 0xfEFD001a9aFfb38Bba7f81e3FB37a1ab8F392A5A
- PDPVerifier Proxy: 0x9F1bc521A7C3cFeC76c32611Aab50a6dFfb93290
Calibnet:
- PDPVerifier Implementation: 0xCa92b746a7af215e0AaC7D0F956d74B522b295b6
- PDPVerifier Proxy: 0x9ecb84bB617a6Fd9911553bE12502a1B091CdfD8
💥 Breaking Changes
- Merged
createDatasetandaddPiecesfunctions 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)
- To create a new dataset with pieces: Call
- Benefits: Single transaction replaces the previous two-step process (create, then add), reducing wait times and gas costs
- Removed:
Added
- feat: Update PDP proof fee (#214)
Changed
- rm unused constants (#211)
- remove seconds per day again (#215)
- Fixed
vm.getBlockNumberin test environments (#206)
📝 Changelog
For the full set of changes since the last tag:
v2.1.0
📦 Deployed
Mainnet:
- PDPVerifier Implementation: 0xf2a47b4136Ab2dfB6FA67Fb85c7a031f56F6f024
- PDPVerifier Proxy: 0x31D87004Fc0C38D897725978e51BC06163603E5A
Calibnet:
- PDPVerifier Implementation: 0x648E8D9103Ec91542DcD0045A65Ef9679F886e82
- PDPVerifier Proxy: 0x445238Eca6c6aB8Dff1Aa6087d9c05734D22f137
💥 Breaking Changes
- BREAKING: Switched from Piece CID version 1 to version 2 (#184)
- New
Cids.sollibrary with CIDv2 handling capabilities - No backward compatibility - CIDv1 support completely removed
- Enhanced piece data validation using CID height information
- Golden tests for CommPv2 functionality
- New
🚀 Added
- Data Set Indexing: Data set IDs now start at 1 instead of 0 (#196)
- Event Enhancement: Added
root_cidstoRootsAddedevent for better piece tracking (#169)
🔧 Changed
- Interface Updates: IPDPProvingSchedule methods changed from
puretoviewfor 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.PieceDatatoCids.Cidthroughout 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:
v2.0.0
BREAKING: Renamed core terminology throughout the codebase for better clarity, for each of the following, all functions, variables, events, and parameters have been changed.
proofSet→dataSet("proof set" becomes "data set")root→piecerootId→pieceIdowner→storageProvider- 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:
ProofSetCreated→DataSetCreated(parameter change:owner→storageProvider)ProofSetDeleted→DataSetDeletedProofSetEmpty→DataSetEmptyProofSetOwnerChanged→StorageProviderChanged(parameters:oldOwner/newOwner→oldStorageProvider/newStorageProvider)RootsAdded→PiecesAdded(parameter change:rootIds→pieceIds)RootsRemoved→PiecesRemoved(parameter change:rootIds→pieceIds)PossessionProvenevent updated:IPDPTypes.RootIdAndOffset[]→IPDPTypes.PieceIdAndOffset[]
- Interface updates:
PDPListenerinterface method renames:proofSetCreated()→dataSetCreated()(parameter change:proofSetId→dataSetId)proofSetDeleted()→dataSetDeleted()(parameter change:proofSetId→dataSetId)rootsAdded()→piecesAdded()(parameter changes:proofSetId→dataSetId,IPDPTypes.RootData[]→IPDPTypes.PieceData[])rootsScheduledRemove()→piecesScheduledRemove()(parameter changes:proofSetId→dataSetId,rootIds→pieceIds)possessionProven()→ unchanged name (parameter change:proofSetId→dataSetId)nextProvingPeriod()→ unchanged name (parameter change:proofSetId→dataSetId)ownerChanged()→storageProviderChanged()(parameters:proofSetId→dataSetId,oldOwner/newOwner→oldStorageProvider/newStorageProvider)
IPDPTypes.RootData→IPDPTypes.PieceData(note: struct field remainspiece)
- Storage renames:
- Constants:
MAX_ROOT_SIZE→MAX_PIECE_SIZEVERSION = "1.1.0"→VERSION = "2.0.0"(to reflect this release)
- State variables:
nextProofSetId→nextDataSetId(uint64)
- Mappings:
nextRootId→nextPieceIdproofSetLeafCount→dataSetLeafCountproofSetListener→dataSetListenerproofSetLastProvenEpoch→dataSetLastProvenEpochproofSetOwner→storageProviderproofSetProposedOwner→dataSetProposedStorageProviderrootCids→pieceCidsrootLeafCounts→pieceLeafCounts
- Constants:
Deprecated
- SimplePDPService: No longer actively maintained or deployed by default
- Removed from default deployment scripts (
deploy-mainnet.sh,deploy-calibnet.sh,deploy-devnet.sh) - Added optional deployment script (
deploy-simple-pdp-service.sh) for community use - Remains available as reference integration in
src/SimplePDPService.sol. Proper Filecoin Service with PDP can be found in https://github.com/FilOzone/filecoin-services/tree/main/service_contracts/src
- Removed from default deployment scripts (
What's Changed
- init changelog by @ZenGround0 in #156
- scripts for ownership transfer by @ZenGround0 in #151
- chore: update the licensing of the codebase by @rjan90 in #162
- chore: update to correct deploy script in readme by @rjan90 in #163
- Fallback to unsafe oracle feed when safe call fails by @ZenGround0 in #165
- Safe migrate function scaffold by @ZenGround0 in #160
- refactor: remove npm, use pyth-sdk-solidity, and update build dependencies by @Hany-Almnaem in #172
- Feature/Add Ownership Change to Listener Interface by @Hany-Almnaem in #171
- Refactor PDP Events and Types into Interfaces for External Consumption by @Hany-Almnaem in #174
- feat: root enumeration with getActiveRoots() by @rvagg in #177
- chore: update docs for add-issues-and-prs-to-fs-project-board.yml by @BigLep in #179
- feat!: rename by @jennijuju in #180
New Contributors
- @Hany-Almnaem made their first contribution in #172
- @rvagg made their first contribution in #177
- @BigLep made their first contribution in #179
Full Changelog: v1.0.0...v2.0.0
Initial PDP Release
The initial PDP release deployed to mainnet
- PDPVerifier and PDPSimpleService
- Extensible 2 contract architecture
- Secure proving
- Proof set management