@@ -20,14 +20,13 @@ import {Events} from "../libraries/Events.sol";
2020contract StorageEntityManagerFacet is IFacet , Modifiers {
2121 // get the function selectors for this facet for deployment and update scripts
2222 function selectors () external pure returns (bytes4 [] memory selectors_ ) {
23- selectors_ = new bytes4 [](7 );
23+ selectors_ = new bytes4 [](6 );
2424 selectors_[0 ] = this .createStorageEntity.selector ;
2525 selectors_[1 ] = this .addStorageProviders.selector ;
2626 selectors_[2 ] = this .removeStorageProviders.selector ;
27- selectors_[3 ] = this .changeStorageEntityActiveStatus.selector ;
28- selectors_[4 ] = this .getStorageEntity.selector ;
29- selectors_[5 ] = this .isStorageProviderUsed.selector ;
30- selectors_[6 ] = this .getStorageEntities.selector ;
27+ selectors_[3 ] = this .setStorageEntityActiveStatus.selector ;
28+ selectors_[4 ] = this .isStorageProviderUsed.selector ;
29+ selectors_[5 ] = this .setStorageProviderDetails.selector ;
3130 }
3231
3332 function createStorageEntity (address entityOwner , uint64 [] calldata storageProviders )
@@ -63,7 +62,7 @@ contract StorageEntityManagerFacet is IFacet, Modifiers {
6362
6463 Storage.StorageEntity storage se = Storage.s ().storageEntities[entityOwner];
6564
66- _ensureStorageEntityNotExists (se);
65+ _ensureStorageEntityExists (se);
6766
6867 for (uint256 i = 0 ; i < storageProviders.length ; i++ ) {
6968 se.storageProviders.push (storageProviders[i]);
@@ -79,16 +78,25 @@ contract StorageEntityManagerFacet is IFacet, Modifiers {
7978 {
8079 Storage.StorageEntity storage se = Storage.s ().storageEntities[entityOwner];
8180
82- _ensureStorageEntityNotExists (se);
81+ _ensureStorageEntityExists (se);
82+
8383
8484 for (uint256 j = 0 ; j < storageProviders.length ; j++ ) {
8585 uint64 sp = storageProviders[j];
86+
87+ _ensureStorageProviderIsAssignedToStorageEntity (se, sp);
88+
8689 Storage.s ().usedStorageProviders[sp] = false ;
8790 for (uint256 i = 0 ; i < se.storageProviders.length ; i++ ) {
8891 if (se.storageProviders[i] == sp) {
8992 se.storageProviders[i] = se.storageProviders[se.storageProviders.length - 1 ];
9093 se.storageProviders.pop ();
9194 Storage.s ().usedStorageProviders[sp] = false ;
95+
96+ se.providerDetails[sp] = Storage.ProviderDetails ({
97+ isActive: false ,
98+ spaceLeft: 0
99+ });
92100 break ;
93101 }
94102 }
@@ -97,13 +105,13 @@ contract StorageEntityManagerFacet is IFacet, Modifiers {
97105 emit Events.StorageProviderRemoved (msg .sender , entityOwner, storageProviders);
98106 }
99107
100- function changeStorageEntityActiveStatus (address entityOwner , bool isActive )
108+ function setStorageEntityActiveStatus (address entityOwner , bool isActive )
101109 external
102110 onlyOwnerOrStorageEntity (entityOwner)
103111 {
104112 Storage.StorageEntity storage se = Storage.s ().storageEntities[entityOwner];
105113
106- _ensureStorageEntityNotExists (se);
114+ _ensureStorageEntityExists (se);
107115
108116 se.isActive = isActive;
109117
@@ -118,26 +126,41 @@ contract StorageEntityManagerFacet is IFacet, Modifiers {
118126 }
119127 }
120128
121- function _ensureStorageEntityNotExists (Storage.StorageEntity storage se ) internal view {
129+ function _ensureStorageEntityExists (Storage.StorageEntity storage se ) internal view {
122130 if (se.owner == address (0 )) {
123131 revert ErrorLib.StorageEntityDoesNotExist ();
124132 }
125133 }
126134
127- function getStorageEntity (address entityOwner ) external view returns (Storage.StorageEntity memory ) {
128- return Storage.s ().storageEntities[entityOwner];
129- }
130-
131135 function isStorageProviderUsed (uint64 storageProvider ) external view returns (bool ) {
132136 return Storage.s ().usedStorageProviders[storageProvider];
133137 }
134138
135- function getStorageEntities () external view returns (Storage.StorageEntity[] memory ) {
136- address [] storage entityAddresses = Storage.s ().entityAddresses;
137- Storage.StorageEntity[] memory storageEntities = new Storage.StorageEntity [](entityAddresses.length );
138- for (uint256 i = 0 ; i < entityAddresses.length ; i++ ) {
139- storageEntities[i] = Storage.s ().storageEntities[entityAddresses[i]];
139+ function setStorageProviderDetails (
140+ address entityOwner ,
141+ uint64 storageProvider ,
142+ Storage.ProviderDetails memory details
143+ ) external onlyOwnerOrStorageEntity (entityOwner) {
144+ Storage.StorageEntity storage se = Storage.s ().storageEntities[entityOwner];
145+
146+ _ensureStorageEntityExists (se);
147+
148+ _ensureStorageProviderIsAssignedToStorageEntity (se, storageProvider);
149+
150+ se.providerDetails[storageProvider] = details;
151+ }
152+
153+ function _ensureStorageProviderIsAssignedToStorageEntity (Storage.StorageEntity storage se , uint64 storageProvider ) internal view {
154+ // Check if sp is assigned to the entity
155+ bool isAssigned = false ;
156+ for (uint256 i = 0 ; i < se.storageProviders.length ; i++ ) {
157+ if (se.storageProviders[i] == storageProvider) {
158+ isAssigned = true ;
159+ break ;
160+ }
161+ }
162+ if (! isAssigned) {
163+ revert ErrorLib.StorageProviderNotAssignedToEntity ();
140164 }
141- return storageEntities;
142165 }
143166}
0 commit comments