Skip to content

Commit 980e25a

Browse files
authored
build: prep FWSS v1.0.0 release (#332)
Prep General Availability (GA) release of the Filecoin Warm Storage Service contracts. - Bump PDP submodule to v3.1.0 tag - Bump FWSS and service provider registry version to v1.0.0 - Prep changelog
1 parent 8e162d6 commit 980e25a

11 files changed

+171
-46
lines changed

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 112 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,71 @@ All notable changes to this project will be documented in this file.
33

44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
55

6-
## [Unreleased]
6+
## [1.0.0] - 2025-10-27 - FWSS GA Release
7+
8+
This is the General Availability (GA) release of the Filecoin Warm Storage Service (FWSS) contracts.
9+
10+
## Core Contracts - Mainnet
11+
12+
1. Payments Contract: [0x23b1e018F08BB982348b15a86ee926eEBf7F4DAa](https://filfox.info/en/address/0x23b1e018F08BB982348b15a86ee926eEBf7F4DAa)
13+
- From [Filecoin-Pay v1.0.0](https://github.com/FilOzone/filecoin-pay/releases/tag/v1.0.0)
14+
2. PDPVerifier Implementation: [0xe2Dc211BffcA499761570E04e8143Be2BA66095f](https://filfox.info/en/address/0xe2Dc211BffcA499761570E04e8143Be2BA66095f)
15+
- From [PDP v3.1.0](https://github.com/FilOzone/pdp/releases/tag/v3.1.0)
16+
3. PDPVerifier Proxy: [0xBADd0B92C1c71d02E7d520f64c0876538fa2557F](https://filfox.info/en/address/0xBADd0B92C1c71d02E7d520f64c0876538fa2557F)
17+
- From [PDP v3.1.0](https://github.com/FilOzone/pdp/releases/tag/v3.1.0)
18+
4. SessionKeyRegistry: [0x74FD50525A958aF5d484601E252271f9625231aB](https://filfox.info/en/address/0x74FD50525A958aF5d484601E252271f9625231aB)
19+
5. ServiceProviderRegistry Implementation: [0xe255D3a89D6B326b48bc0fC94a472A839471D6B0](https://filfox.info/en/address/0xe255D3a89D6B326b48bc0fC94a472A839471D6B0)
20+
6. ServiceProviderRegistry Proxy: [0xf55dDbf63F1b55c3F1D4FA7e339a68AB7b64A5eB](https://filfox.info/en/address/0xf55dDbf63F1b55c3F1D4FA7e339a68AB7b64A5eB)
21+
7. FilecoinWarmStorageService Implementation: [0xd60b90f6D3C42B26a246E141ec701a20Dde2fA61](https://filfox.info/en/address/0xd60b90f6D3C42B26a246E141ec701a20Dde2fA61)
22+
8. FilecoinWarmStorageService Proxy: [0x8408502033C418E1bbC97cE9ac48E5528F371A9f](https://filfox.info/en/address/0x8408502033C418E1bbC97cE9ac48E5528F371A9f)
23+
9. FilecoinWarmStorageServiceStateView: [0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46](https://filfox.info/en/address/0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46)
24+
25+
Configuration:
26+
- USDFC Token: [0x80B98d3aa09ffff255c3ba4A241111Ff1262F045](https://filfox.info/en/address/0x80B98d3aa09ffff255c3ba4A241111Ff1262F045)
27+
- FILBEAM_BENEFICIARY_ADDRESS: [0x1D60d2F5960Af6341e842C539985FA297E10d6eA](https://calibration.filfox.info/en/address/0x1D60d2F5960Af6341e842C539985FA297E10d6eA)
28+
- FILBEAM_CONTROLLER_ADDRESS: [0x5f7E5E2A756430EdeE781FF6e6F7954254Ef629A](https://calibration.filfox.info/en/address/0x5f7E5E2A756430EdeE781FF6e6F7954254Ef629A)
29+
- CHALLENGE_FINALITY: 150 epochs
30+
- MAX_PROVING_PERIOD: 2880 epochs
31+
- CHALLENGE_WINDOW_SIZE: 20 epochs
32+
- Service Name: "Filecoin Warm Storage Service - Mainnet GA Release"
33+
- Service Description: "Mainnet FWSS GA contracts"
34+
35+
## Core Contracts - Calibration Network
36+
37+
1. Payments Contract: [0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0](https://calibration.filfox.info/en/address/0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0)
38+
- From [Filecoin-Pay v1.0.0](https://github.com/FilOzone/filecoin-pay/releases/tag/v1.0.0)
39+
2. PDPVerifier Implementation: [0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42](https://calibration.filfox.info/en/address/0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42)
40+
- From [PDP v3.1.0](https://github.com/FilOzone/pdp/releases/tag/v3.1.0)
41+
3. PDPVerifier Proxy: [0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C](https://calibration.filfox.info/en/address/0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C)
42+
- From [PDP v3.1.0](https://github.com/FilOzone/pdp/releases/tag/v3.1.0)
43+
4. SessionKeyRegistry: [0x97Dd879F5a97A8c761B94746d7F5cfF50AAd4452](https://calibration.filfox.info/en/address/0x97Dd879F5a97A8c761B94746d7F5cfF50AAd4452)
44+
5. ServiceProviderRegistry Implementation: [0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3](https://calibration.filfox.info/en/address/0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3)
45+
6. ServiceProviderRegistry Proxy: [0x839e5c9988e4e9977d40708d0094103c0839Ac9D](https://calibration.filfox.info/en/address/0x839e5c9988e4e9977d40708d0094103c0839Ac9D)
46+
7. FilecoinWarmStorageService Implementation: [0x4BCc752555Bf08A5Bd9a4Ce467a12607277450bA](https://calibration.filfox.info/en/address/0x4BCc752555Bf08A5Bd9a4Ce467a12607277450bA)
47+
8. FilecoinWarmStorageService Proxy: [0x02925630df557F957f70E112bA06e50965417CA0](https://calibration.filfox.info/en/address/0x02925630df557F957f70E112bA06e50965417CA0)
48+
9. FilecoinWarmStorageServiceStateView: [0xA5D87b04086B1d591026cCE10255351B5AA4689B](https://calibration.filfox.info/en/address/0xA5D87b04086B1d591026cCE10255351B5AA4689B)
49+
50+
Configuration:
51+
- USDFC Token: [0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0](https://calibration.filfox.info/en/address/0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0)
52+
- FILBEAM_BENEFICIARY_ADDRESS: [0x1D60d2F5960Af6341e842C539985FA297E10d6eA](https://calibration.filfox.info/en/address/0x1D60d2F5960Af6341e842C539985FA297E10d6eA)
53+
- FILBEAM_CONTROLLER_ADDRESS: [0x5f7E5E2A756430EdeE781FF6e6F7954254Ef629A](https://calibration.filfox.info/en/address/0x5f7E5E2A756430EdeE781FF6e6F7954254Ef629A)
54+
- CHALLENGE_FINALITY: 10 epochs
55+
- MAX_PROVING_PERIOD: 240 epochs
56+
- CHALLENGE_WINDOW_SIZE: 20 epochs
57+
- Service Name: "Filecoin Warm Storage Service - Calibration GA Release"
58+
- Service Description: "Calibration FWSS GA contracts"
759

860
### Added
9-
- Dataset lifecycle tracking with `DataSetStatusChanged` event ([#169](https://github.com/FilOzone/filecoin-services/issues/169))
10-
- Convenience functions `isDataSetActive()` and `getDataSetStatusDetails()` for status checking
11-
- Comprehensive documentation: dataset lifecycle guide and integration guide
12-
- Subgraph status history tracking with `DataSetStatusHistory` entity
61+
- EXTRA_DATA size limits for enhanced security ([#313](https://github.com/FilOzone/filecoin-services/pull/313))
62+
- Floor price set to 0.06 USDFC/month ([#320](https://github.com/FilOzone/filecoin-services/pull/320))
63+
- Random nonces for AddPieces operations ([#317](https://github.com/FilOzone/filecoin-services/pull/317))
64+
- Relaxed constraints on `setViewContract` ([#310](https://github.com/FilOzone/filecoin-services/pull/310))
65+
- Auto-verify contracts after deployment ([#272](https://github.com/FilOzone/filecoin-services/pull/272))
66+
- Regression tests for dataset cleanup ([#276](https://github.com/FilOzone/filecoin-services/pull/276))
67+
- Export Errors ABI ([#329](https://github.com/FilOzone/filecoin-services/pull/329))
1368

1469
### Changed
15-
- **BREAKING**: Simplified `DataSetStatus` enum from 3 states to 2 states ([#169](https://github.com/FilOzone/filecoin-services/issues/169))
70+
- **BREAKING**: Simplified `DataSetStatus` enum from 3 states to 2 states ([#314](https://github.com/FilOzone/filecoin-services/pull/314))
1671
- **Old values**: `NotFound (0)`, `Active (1)`, `Terminating (2)`
1772
- **New values**: `Inactive (0)`, `Active (1)`
1873
- **Migration**:
@@ -21,19 +76,54 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
2176
- Use `pdpEndEpoch` to check if a dataset is terminated
2277
- **Details**: `Inactive` represents non-existent datasets or datasets with no pieces yet. `Active` represents all datasets with pieces, including terminated ones.
2378
- Use `getDataSetStatusDetails()` to check termination status separately from Active/Inactive status
24-
- Subgraph schema updated with status enum and history tracking
25-
- **Calibnet**: Reduced DEFAULT_CHALLENGE_WINDOW_SIZE from 30 epochs to 20 epochs for faster testing iteration
26-
- Made storage pricing and minimum rate mutable storage variables instead of immutable constants ([#306](https://github.com/FilOzone/filecoin-services/issues/306))
27-
- `storagePricePerTibPerMonth` (initially 2.5 USDFC, max 10 USDFC)
28-
- `minimumStorageRatePerMonth` (initially 0.06 USDFC, max 0.24 USDFC)
29-
- Added `updatePricing(uint256 newStoragePrice, uint256 newMinimumRate)` function to allow owner to update pricing rates without contract upgrades
30-
- Pass 0 to keep existing value unchanged
31-
- At least one price must be non-zero
32-
- Validates against 4x upper bounds (10 USDFC storage, 0.24 USDFC minimum rate)
33-
- Price updates apply immediately to existing payment rails when recalculated
34-
- Added `getCurrentPricingRates()` function to query current storage price and minimum rate
35-
- Added `PricingUpdated(uint256 storagePrice, uint256 minimumRate)` event to track pricing changes
36-
- Added `AtLeastOnePriceMustBeNonZero` and `PriceExceedsMaximum` errors for pricing validation
79+
- **BREAKING**: ServiceProviderRegistry Bloom Schema refactor ([#308](https://github.com/FilOzone/filecoin-services/pull/308))
80+
- **Removed** encoded `productData`; all product attributes now use capability key-value store
81+
- **Keys** are `string`, **values** are `bytes`
82+
- **Migration for synapse and curio**:
83+
1. All `productInfo` previously ABI-encoded is removed. Use capability key-value store instead. Encode unsigned integers as big-endian, addresses as `bytes[20]`, strings as UTF-8.
84+
2. Replace `getPDPOffering()` with `getAllProductCapabilities()` to retrieve product info
85+
3. `getActiveProvidersByProductType()` and `getProvidersByProductType()` now return `productCapabilityValues` in `ProviderWithProduct[]`
86+
4. `getProductCapabilities()` no longer returns `exists` bool array
87+
5. `getProductCapability()` is removed; use `productCapabilities` mapping instead
88+
6. `updatePDPServiceWithCapabilities()` is removed; use `updateProduct()` instead
89+
7. Capability values cannot be empty; exclude the key if product lacks the capability
90+
- Contract size reduced from 21,290 to 17,751 bytes (-3,539 bytes)
91+
- **BREAKING**: Non-sequential `clientDataSetId` ([#265](https://github.com/FilOzone/filecoin-services/pull/265))
92+
- **Changed** from sequential counter to mapping-based non-sequential IDs
93+
- **Migration**: Clients can now create datasets with any unique `clientDataSetId` value, removing the sequential bottleneck
94+
- Added `DataSetIdAlreadyExists` error for duplicate IDs
95+
- **BREAKING**: Renamed Payments contract to FilecoinPayV1 ([#293](https://github.com/FilOzone/filecoin-services/pull/293))
96+
- **Migration**: Update all contract references from `Payments` to `FilecoinPayV1`
97+
- ABI file renamed: `Payments.abi.json` β†’ `FilecoinPayV1.abi.json`
98+
- Deployment scripts and documentation updated
99+
- **BREAKING**: ServiceProviderRegistry events now emit raw productData ([#294](https://github.com/FilOzone/filecoin-services/pull/294))
100+
- **Removed** `serviceUrl` argument from Product events
101+
- **Migration**: Parse `serviceUrl` from raw `productData` if needed
102+
- Events now more portable and forward-compatible with future product types
103+
- **BREAKING**: ServiceProviderRegistry deletes removed product data ([#295](https://github.com/FilOzone/filecoin-services/pull/295))
104+
- **Changed** behavior: Product data is now properly cleaned up when removed
105+
- **Migration**: Use `isActive` to detect if product exists, not presence of data fields
106+
- **Calibnet**: Reduced `DEFAULT_CHALLENGE_WINDOW_SIZE` from 30 epochs to 20 epochs for faster testing iteration ([#327](https://github.com/FilOzone/filecoin-services/pull/327))
107+
- Made storage pricing and minimum rate mutable storage variables instead of immutable constants ([#325](https://github.com/FilOzone/filecoin-services/pull/325))
108+
- Made FWSS permissionless by removing provider approval checks ([#302](https://github.com/FilOzone/filecoin-services/pull/302))
109+
- CDN pricing changed from monthly to usage-based egress model ([#324](https://github.com/FilOzone/filecoin-services/pull/324))
110+
- Use constant typehash instead of rehashing for EIP-712 signatures ([#315](https://github.com/FilOzone/filecoin-services/pull/315))
111+
- Burn mechanism now uses FVMPay ([#296](https://github.com/FilOzone/filecoin-services/pull/296))
112+
- SignatureVerificationLib refactored to use delegate pattern ([#282](https://github.com/FilOzone/filecoin-services/pull/282))
113+
- Subgraph now uses productData from events directly ([#298](https://github.com/FilOzone/filecoin-services/pull/298))
114+
- Subgraph decodes PDP offering using ethereum.decode ([#290](https://github.com/FilOzone/filecoin-services/pull/290))
115+
- CDNPaymentRailsToppedUp event refactored ([#284](https://github.com/FilOzone/filecoin-services/pull/284))
116+
- Updated lib/pdp to v3.1.0 with improved validator support for forward progress despite missing proofs ([#321](https://github.com/FilOzone/filecoin-services/pull/321))
117+
118+
### Removed
119+
- **BREAKING**: `PaymentArbitrated` event removed from contract and subgraph ([#301](https://github.com/FilOzone/filecoin-services/pull/301))
120+
121+
### Performance Improvements
122+
- Optimized payment validation to loop over proving periods ([#267](https://github.com/FilOzone/filecoin-services/pull/267))
123+
- Removed railToDataSet mapping for CDN rails ([#278](https://github.com/FilOzone/filecoin-services/pull/278))
124+
- Optimized withCDN metadata key handling ([#271](https://github.com/FilOzone/filecoin-services/pull/271))
125+
- Added dataSetHasCDNMetadataKey optimization ([#274](https://github.com/FilOzone/filecoin-services/pull/274))
126+
- Replaced error strings with custom errors ([#270](https://github.com/FilOzone/filecoin-services/pull/270))
37127

38128
## [0.3.0] - 2025-10-08 - M3.1 Calibration Network Deployment
39129

@@ -221,6 +311,8 @@ This release contains breaking changes that rename core concepts throughout the
221311

222312
The underlying functionality remains unchanged; this release only updates terminology for consistency.
223313

224-
[Unreleased]: https://github.com/filozone/filecoin-services/compare/v0.2.0...HEAD
314+
[Unreleased]: https://github.com/filozone/filecoin-services/compare/v1.0.0...HEAD
315+
[1.0.0]: https://github.com/filozone/filecoin-services/compare/v0.3.0...v1.0.0
316+
[0.3.0]: https://github.com/filozone/filecoin-services/releases/tag/v0.3.0
225317
[0.2.0]: https://github.com/filozone/filecoin-services/releases/tag/v0.2.0
226318
[0.1.0]: https://github.com/filozone/filecoin-services/releases/tag/v0.1.0

β€Žservice_contracts/src/FilecoinWarmStorageService.solβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ contract FilecoinWarmStorageService is
5959
EIP712Upgradeable
6060
{
6161
// Version tracking
62-
string public constant VERSION = "0.3.0";
62+
string public constant VERSION = "1.0.0";
6363

6464
// =========================================================================
6565
// Events

β€Žservice_contracts/src/ServiceProviderRegistry.solβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ contract ServiceProviderRegistry is
4343
}
4444

4545
/// @notice Version of the contract implementation
46-
string public constant VERSION = "0.3.0";
46+
string public constant VERSION = "1.0.0";
4747

4848
/// @notice Maximum length for service URL
4949
uint256 private constant MAX_SERVICE_URL_LENGTH = 256;

β€Žservice_contracts/test/FilecoinWarmStorageService.t.solβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5065,7 +5065,7 @@ contract FilecoinWarmStorageServiceUpgradeTest is Test {
50655065
if (logs[i].topics[0] == expectedTopic) {
50665066
// Decode and verify the event data
50675067
(string memory version, address implementation) = abi.decode(logs[i].data, (string, address));
5068-
assertEq(version, "0.3.0", "Version should be 0.3.0");
5068+
assertEq(version, "1.0.0", "Version should be 1.0.0");
50695069
assertTrue(implementation != address(0), "Implementation address should not be zero");
50705070
foundEvent = true;
50715071
break;

β€Žservice_contracts/test/ServiceProviderRegistry.t.solβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ contract ServiceProviderRegistryTest is MockFVMTest {
3737

3838
function testInitialState() public view {
3939
// Check version
40-
assertEq(registry.VERSION(), "0.3.0", "Version should be 0.3.0");
40+
assertEq(registry.VERSION(), "1.0.0", "Version should be 1.0.0");
4141

4242
// Check owner
4343
assertEq(registry.owner(), owner, "Service provider should be deployer");

β€Žservice_contracts/test/ServiceProviderRegistryFull.t.solβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ contract ServiceProviderRegistryFullTest is MockFVMTest {
8585
// ========== Initial State Tests ==========
8686

8787
function testInitialState() public view {
88-
assertEq(registry.VERSION(), "0.3.0", "Version should be 0.3.0");
88+
assertEq(registry.VERSION(), "1.0.0", "Version should be 1.0.0");
8989
assertEq(registry.owner(), owner, "Service provider should be deployer");
9090
assertEq(registry.getNextProviderId(), 1, "Next provider ID should start at 1");
9191
assertEq(registry.REGISTRATION_FEE(), 5 ether, "Registration fee should be 5 FIL");
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
## FWSS GA Release - Calibration Network:
2+
3+
DEPLOYING...
4+
========================================
5+
SessionKeyRegistry
6+
βœ… Using existing address: 0x97Dd879F5a97A8c761B94746d7F5cfF50AAd4452
7+
PDPVerifier implementation
8+
βœ… Using existing address: 0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42
9+
PDPVerifier proxy
10+
βœ… Using existing address: 0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C
11+
FilecoinPayV1
12+
βœ… Using existing address: 0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0
13+
Deploying ServiceProviderRegistry implementation
14+
βœ… Deployed at: 0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3
15+
Deploying ServiceProviderRegistry proxy
16+
πŸ“¦ Implementation: 0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3
17+
βœ… Deployed at: 0x839e5c9988e4e9977d40708d0094103c0839Ac9D
18+
Deploying SignatureVerificationLib
19+
βœ… Deployed at: 0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6
20+
Deploying FilecoinWarmStorageService implementation
21+
πŸ“š Using libraries: src/lib/SignatureVerificationLib.sol:SignatureVerificationLib:0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6
22+
πŸ”§ Constructor args: 6 arguments
23+
βœ… Deployed at: 0x4BCc752555Bf08A5Bd9a4Ce467a12607277450bA
24+
Deploying FilecoinWarmStorageService proxy
25+
πŸ“¦ Implementation: 0x4BCc752555Bf08A5Bd9a4Ce467a12607277450bA
26+
βœ… Deployed at: 0x02925630df557F957f70E112bA06e50965417CA0
27+
FilecoinWarmStorageServiceStateView
28+
πŸ”§ Using external deployment script...
29+
FilecoinWarmStorageServiceStateView deployed at 0xA5D87b04086B1d591026cCE10255351B5AA4689B
30+
---
31+
βœ… Deployment completed successfully!
32+
33+
# DEPLOYMENT SUMMARY (calibnet)
34+
PDPVerifier Implementation: 0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42
35+
PDPVerifier Proxy: 0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C
36+
FilecoinPayV1 Contract: 0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0
37+
ServiceProviderRegistry Implementation: 0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3
38+
ServiceProviderRegistry Proxy: 0x839e5c9988e4e9977d40708d0094103c0839Ac9D
39+
FilecoinWarmStorageService Implementation: 0x4BCc752555Bf08A5Bd9a4Ce467a12607277450bA
40+
FilecoinWarmStorageService Proxy: 0x02925630df557F957f70E112bA06e50965417CA0
41+
FilecoinWarmStorageServiceStateView: 0xA5D87b04086B1d591026cCE10255351B5AA4689B
42+
43+
Network Configuration (calibnet):
44+
Challenge finality: 10 epochs
45+
Max proving period: 240 epochs
46+
Challenge window size: 20 epochs
47+
USDFC token address: 0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0
48+
FilBeam controller address: 0x5f7E5E2A756430EdeE781FF6e6F7954254Ef629A
49+
FilBeam beneficiary address: 0x1D60d2F5960Af6341e842C539985FA297E10d6eA
50+
Service name: Filecoin Warm Storage Service - Calibration GA Release
51+
Service description: Calibration FWSS GA contracts

0 commit comments

Comments
Β (0)