Skip to content

Commit 68b9c7b

Browse files
authored
feat: make FWSS permissionless by removing provider approval checks (#302)
1 parent 7e1f04b commit 68b9c7b

File tree

5 files changed

+31
-40
lines changed

5 files changed

+31
-40
lines changed

service_contracts/abi/FilecoinWarmStorageService.abi.json

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,22 +2078,6 @@
20782078
}
20792079
]
20802080
},
2081-
{
2082-
"type": "error",
2083-
"name": "ProviderNotApproved",
2084-
"inputs": [
2085-
{
2086-
"name": "provider",
2087-
"type": "address",
2088-
"internalType": "address"
2089-
},
2090-
{
2091-
"name": "providerId",
2092-
"type": "uint256",
2093-
"internalType": "uint256"
2094-
}
2095-
]
2096-
},
20972081
{
20982082
"type": "error",
20992083
"name": "ProviderNotInApprovedList",

service_contracts/src/Errors.sol

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,6 @@ library Errors {
222222
/// @param provider The provider address
223223
error ProviderNotRegistered(address provider);
224224

225-
/// @notice Provider is not approved for service
226-
/// @param provider The provider address
227-
/// @param providerId The provider ID from registry
228-
error ProviderNotApproved(address provider, uint256 providerId);
229-
230225
/// @notice Provider is already approved
231226
/// @param providerId The provider ID that is already approved
232227
error ProviderAlreadyApproved(uint256 providerId);

service_contracts/src/FilecoinWarmStorageService.sol

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -513,9 +513,6 @@ contract FilecoinWarmStorageService is
513513

514514
require(providerId != 0, Errors.ProviderNotRegistered(serviceProvider));
515515

516-
// Check if provider is approved
517-
require(approvedProviders[providerId], Errors.ProviderNotApproved(serviceProvider, providerId));
518-
519516
address payee = serviceProviderRegistry.getProviderPayee(providerId);
520517

521518
require(
@@ -948,15 +945,12 @@ contract FilecoinWarmStorageService is
948945
);
949946
require(newServiceProvider != address(0), Errors.ZeroAddress(Errors.AddressField.ServiceProvider));
950947

951-
// Verify new service provider is registered and approved
948+
// Verify new service provider is registered
952949
uint256 newProviderId = serviceProviderRegistry.getProviderIdByAddress(newServiceProvider);
953950

954951
// Check if provider is registered
955952
require(newProviderId != 0, Errors.ProviderNotRegistered(newServiceProvider));
956953

957-
// Check if provider is approved
958-
require(approvedProviders[newProviderId], Errors.ProviderNotApproved(newServiceProvider, newProviderId));
959-
960954
// Update the data set service provider
961955
info.serviceProvider = newServiceProvider;
962956

service_contracts/test/FilecoinWarmStorageServiceOwner.t.sol

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -259,21 +259,20 @@ contract FilecoinWarmStorageServiceOwnerTest is MockFVMTest {
259259
console.log("Correctly reverted for unregistered provider");
260260
}
261261

262-
function testStorageProviderChangedRevertsForUnapprovedProvider() public {
263-
console.log("=== Test: storageProviderChanged reverts for unapproved provider ===");
262+
function testStorageProviderChangedSucceedsForAnyRegisteredProvider() public {
263+
console.log("=== Test: storageProviderChanged succeeds for any registered provider ===");
264264

265265
uint256 dataSetId = createDataSet(provider1, client);
266266

267-
uint256 unauthorizedProviderId = providerRegistry.getProviderIdByAddress(unauthorizedProvider);
268-
269-
// Try to change to unapproved provider
267+
// Change to shouldn't require provider be approved
270268
vm.prank(address(pdpVerifier));
271-
vm.expectRevert(
272-
abi.encodeWithSelector(Errors.ProviderNotApproved.selector, unauthorizedProvider, unauthorizedProviderId)
273-
);
274269
serviceContract.storageProviderChanged(dataSetId, provider1, unauthorizedProvider, new bytes(0));
275270

276-
console.log("Correctly reverted for unapproved provider");
271+
// Verify the service provider was changed
272+
FilecoinWarmStorageService.DataSetInfoView memory info = viewContract.getDataSet(dataSetId);
273+
assertEq(info.serviceProvider, unauthorizedProvider, "Service provider should be updated");
274+
275+
console.log("Successfully changed to registered provider (approval not required)");
277276
}
278277

279278
function testStorageProviderChangedRevertsForWrongOldOwner() public {

service_contracts/test/ProviderValidation.t.sol

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ contract ProviderValidationTest is MockFVMTest {
109109
}
110110

111111
function testProviderRegisteredButNotApproved() public {
112+
// NOTE: This operation is expected to pass.
113+
// Approval is not required to perform onboarding actions.
112114
// Register provider1 in serviceProviderRegistry
113115
vm.prank(provider1);
114116
serviceProviderRegistry.registerProvider{value: 5 ether}(
@@ -133,7 +135,21 @@ contract ProviderValidationTest is MockFVMTest {
133135
new string[](0)
134136
);
135137

136-
// Try to create dataset without approval
138+
// Setup payment approvals for client
139+
vm.startPrank(client);
140+
payments.setOperatorApproval(
141+
usdfc,
142+
address(warmStorage),
143+
true,
144+
1000 * 10 ** 6, // rate allowance
145+
1000 * 10 ** 6, // lockup allowance
146+
365 days // max lockup period
147+
);
148+
usdfc.approve(address(payments), 100 * 10 ** 6);
149+
payments.deposit(usdfc, client, 100 * 10 ** 6);
150+
vm.stopPrank();
151+
152+
// Create dataset without approval should now succeed
137153
string[] memory metadataKeys = new string[](0);
138154
string[] memory metadataValues = new string[](0);
139155
bytes memory extraData = abi.encode(client, 0, metadataKeys, metadataValues, FAKE_SIGNATURE);
@@ -142,8 +158,11 @@ contract ProviderValidationTest is MockFVMTest {
142158
vm.mockCall(address(0x01), bytes(hex""), abi.encode(client));
143159

144160
vm.prank(provider1);
145-
vm.expectRevert(abi.encodeWithSelector(Errors.ProviderNotApproved.selector, provider1, 1));
146-
pdpVerifier.createDataSet(PDPListener(address(warmStorage)), extraData);
161+
// Dataset creation shouldn't require provider be approved
162+
uint256 dataSetId = pdpVerifier.createDataSet(PDPListener(address(warmStorage)), extraData);
163+
164+
// Verify the dataset was created
165+
assertTrue(dataSetId > 0, "Dataset should be created");
147166
}
148167

149168
function testProviderApprovedCanCreateDataset() public {

0 commit comments

Comments
 (0)