Skip to content

Commit c1dc505

Browse files
f: cleanup modifiers
1 parent 0425679 commit c1dc505

File tree

4 files changed

+51
-29
lines changed

4 files changed

+51
-29
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// SPDX-License-Identifier: GPL-3.0-or-later
2+
pragma solidity 0.8.27;
3+
4+
import { IHorizonStaking } from "../../interfaces/IHorizonStaking.sol";
5+
import { ProvisionManager } from "../utilities/ProvisionManager.sol";
6+
7+
library ProvisionManagerLib {
8+
function requireAuthorizedForProvision(
9+
IHorizonStaking graphStaking,
10+
address serviceProvider,
11+
address dataService,
12+
address operator
13+
) external view {
14+
require(
15+
graphStaking.isAuthorized(serviceProvider, dataService, operator),
16+
ProvisionManager.ProvisionManagerNotAuthorized(serviceProvider, operator)
17+
);
18+
}
19+
}

packages/horizon/contracts/data-service/utilities/ProvisionManager.sol

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { PPMMath } from "../../libraries/PPMMath.sol";
99
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
1010
import { GraphDirectory } from "../../utilities/GraphDirectory.sol";
1111
import { ProvisionManagerV1Storage } from "./ProvisionManagerStorage.sol";
12+
import { ProvisionManagerLib } from "../libraries/ProvisionManagerLib.sol";
1213

1314
/**
1415
* @title ProvisionManager contract
@@ -111,18 +112,7 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa
111112
* @param serviceProvider The address of the service provider.
112113
*/
113114
modifier onlyAuthorizedForProvision(address serviceProvider) {
114-
require(
115-
_graphStaking().isAuthorized(serviceProvider, address(this), msg.sender),
116-
ProvisionManagerNotAuthorized(serviceProvider, msg.sender)
117-
);
118-
_;
119-
}
120-
121-
modifier onlyAuthorizedForProvisionHack(address caller, address serviceProvider) {
122-
require(
123-
_graphStaking().isAuthorized(serviceProvider, address(this), caller),
124-
ProvisionManagerNotAuthorized(serviceProvider, caller)
125-
);
115+
ProvisionManagerLib.requireAuthorizedForProvision(_graphStaking(), serviceProvider, address(this), msg.sender);
126116
_;
127117
}
128118

@@ -132,10 +122,14 @@ abstract contract ProvisionManager is Initializable, GraphDirectory, ProvisionMa
132122
* @param serviceProvider The address of the service provider.
133123
*/
134124
modifier onlyValidProvision(address serviceProvider) virtual {
125+
this.requireValidProvision(serviceProvider);
126+
_;
127+
}
128+
129+
function requireValidProvision(address serviceProvider) external view {
135130
IHorizonStaking.Provision memory provision = _getProvision(serviceProvider);
136131
_checkProvisionTokens(provision);
137132
_checkProvisionParameters(provision, false);
138-
_;
139133
}
140134

141135
/**

packages/subgraph-service/contracts/SubgraphService.sol

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,14 @@ contract SubgraphService is
5656
* @param indexer The address of the indexer
5757
*/
5858
modifier onlyRegisteredIndexer(address indexer) {
59-
require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer));
59+
this.requireRegisteredIndexer(indexer);
6060
_;
6161
}
6262

63+
function requireRegisteredIndexer(address indexer) external view {
64+
require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer));
65+
}
66+
6367
/**
6468
* @notice Constructor for the SubgraphService contract
6569
* @dev DataService and Directory constructors set a bunch of immutable variables
@@ -706,17 +710,9 @@ contract SubgraphService is
706710
}
707711
}
708712

709-
function modifiersHack(
710-
address caller,
711-
address indexer
712-
)
713-
external
714-
view
715-
whenNotPaused
716-
onlyAuthorizedForProvisionHack(caller, indexer)
717-
onlyValidProvision(indexer)
718-
onlyRegisteredIndexer(indexer)
719-
{}
713+
function getGraphStaking() external view returns (address) {
714+
return address(_graphStaking());
715+
}
720716

721717
/**
722718
* @notice Delegates the call to the SubgraphServiceExtension implementation.

packages/subgraph-service/contracts/SubgraphServiceExtension.sol

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,31 @@ pragma solidity 0.8.27;
33

44
import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
55
import { IRecurringCollector } from "@graphprotocol/horizon/contracts/interfaces/IRecurringCollector.sol";
6+
import { IHorizonStaking } from "@graphprotocol/horizon/contracts/interfaces/IHorizonStaking.sol";
7+
import { ProvisionManagerLib } from "@graphprotocol/horizon/contracts/data-service/libraries/ProvisionManagerLib.sol";
68

79
import { IndexingAgreement } from "./libraries/IndexingAgreement.sol";
810
import { SubgraphService } from "./SubgraphService.sol";
911

1012
contract SubgraphServiceExtension is PausableUpgradeable {
1113
using IndexingAgreement for IndexingAgreement.Manager;
1214

13-
modifier modifiersHack(address indexer) {
14-
SubgraphService(address(this)).modifiersHack(msg.sender, indexer);
15+
modifier onlyValid(address indexer) {
16+
ProvisionManagerLib.requireAuthorizedForProvision(
17+
IHorizonStaking(_getBase().getGraphStaking()),
18+
indexer,
19+
address(this),
20+
msg.sender
21+
);
22+
_getBase().requireValidProvision(indexer);
23+
_getBase().requireRegisteredIndexer(indexer);
1524
_;
1625
}
1726

1827
function updateIndexingAgreement(
1928
address indexer,
2029
IRecurringCollector.SignedRCAU calldata signedRCAU
21-
) external modifiersHack(indexer) {
30+
) external whenNotPaused onlyValid(indexer) {
2231
IndexingAgreement._getManager().update(indexer, signedRCAU);
2332
}
2433

@@ -38,7 +47,7 @@ contract SubgraphServiceExtension is PausableUpgradeable {
3847
*
3948
* @param agreementId The id of the agreement
4049
*/
41-
function cancelIndexingAgreement(address indexer, bytes16 agreementId) external modifiersHack(indexer) {
50+
function cancelIndexingAgreement(address indexer, bytes16 agreementId) external whenNotPaused onlyValid(indexer) {
4251
IndexingAgreement._getManager().cancel(indexer, agreementId);
4352
}
4453

@@ -67,4 +76,8 @@ contract SubgraphServiceExtension is PausableUpgradeable {
6776
function _cancelAllocationIndexingAgreement(address _allocationId) internal {
6877
IndexingAgreement._getManager().cancelForAllocation(_allocationId);
6978
}
79+
80+
function _getBase() internal view returns (SubgraphService) {
81+
return SubgraphService(address(this));
82+
}
7083
}

0 commit comments

Comments
 (0)