Skip to content

Commit 8e7f89a

Browse files
authored
Merge pull request #1215 from graphprotocol/tmigone/register-fix
2 parents 3e95a5e + b8f84ae commit 8e7f89a

File tree

7 files changed

+18
-29
lines changed

7 files changed

+18
-29
lines changed

packages/interfaces/contracts/subgraph-service/ISubgraphService.sol

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ import { ILegacyAllocation } from "./internal/ILegacyAllocation.sol";
2020
interface ISubgraphService is IDataServiceFees {
2121
/**
2222
* @notice Indexer details
23-
* @param registeredAt The timestamp when the indexer registered
2423
* @param url The URL where the indexer can be reached at for queries
2524
* @param geoHash The indexer's geo location, expressed as a geo hash
2625
*/
2726
struct Indexer {
28-
uint256 registeredAt;
2927
string url;
3028
string geoHash;
3129
}
@@ -83,11 +81,6 @@ interface ISubgraphService is IDataServiceFees {
8381
*/
8482
error SubgraphServiceEmptyGeohash();
8583

86-
/**
87-
* @notice Thrown when an indexer tries to register but they are already registered
88-
*/
89-
error SubgraphServiceIndexerAlreadyRegistered();
90-
9184
/**
9285
* @notice Thrown when an indexer tries to perform an operation but they are not registered
9386
* @param indexer The address of the indexer that is not registered

packages/interfaces/contracts/toolshed/ISubgraphServiceToolshed.sol

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,10 @@ interface ISubgraphServiceToolshed is
2727
* @dev Note that this storage getter actually returns a ISubgraphService.Indexer struct, but ethers v6 is not
2828
* good at dealing with dynamic types on return values.
2929
* @param indexer The address of the indexer
30-
* @return registeredAt The timestamp when the indexer registered
3130
* @return url The URL where the indexer can be reached at for queries
3231
* @return geoHash The indexer's geo location, expressed as a geo hash
3332
*/
34-
function indexers(
35-
address indexer
36-
) external view returns (uint256 registeredAt, string memory url, string memory geoHash);
33+
function indexers(address indexer) external view returns (string memory url, string memory geoHash);
3734

3835
/**
3936
* @notice Gets the allocation provision tracker

packages/subgraph-service/contracts/SubgraphService.sol

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import { ILegacyAllocation } from "@graphprotocol/interfaces/contracts/subgraph-
1313
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
1414
import { MulticallUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";
1515
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
16-
import {
17-
DataServicePausableUpgradeable
18-
} from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol";
16+
import { DataServicePausableUpgradeable } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServicePausableUpgradeable.sol";
1917
import { DataService } from "@graphprotocol/horizon/contracts/data-service/DataService.sol";
2018
import { DataServiceFees } from "@graphprotocol/horizon/contracts/data-service/extensions/DataServiceFees.sol";
2119
import { Directory } from "./utilities/Directory.sol";
@@ -54,7 +52,7 @@ contract SubgraphService is
5452
* @param indexer The address of the indexer
5553
*/
5654
modifier onlyRegisteredIndexer(address indexer) {
57-
require(indexers[indexer].registeredAt != 0, SubgraphServiceIndexerNotRegistered(indexer));
55+
require(bytes(indexers[indexer].url).length > 0, SubgraphServiceIndexerNotRegistered(indexer));
5856
_;
5957
}
6058

@@ -98,7 +96,6 @@ contract SubgraphService is
9896
* @dev Implements {IDataService.register}
9997
*
10098
* Requirements:
101-
* - The indexer must not be already registered
10299
* - The URL must not be empty
103100
* - The provision must be valid according to the subgraph service rules
104101
*
@@ -123,13 +120,10 @@ contract SubgraphService is
123120

124121
require(bytes(url).length > 0, SubgraphServiceEmptyUrl());
125122
require(bytes(geohash).length > 0, SubgraphServiceEmptyGeohash());
126-
require(indexers[indexer].registeredAt == 0, SubgraphServiceIndexerAlreadyRegistered());
127123

128124
// Register the indexer
129-
indexers[indexer] = Indexer({ registeredAt: block.timestamp, url: url, geoHash: geohash });
130-
if (paymentsDestination_ != address(0)) {
131-
_setPaymentsDestination(indexer, paymentsDestination_);
132-
}
125+
indexers[indexer] = Indexer({ url: url, geoHash: geohash });
126+
_setPaymentsDestination(indexer, paymentsDestination_);
133127

134128
emit ServiceProviderRegistered(indexer, data);
135129
}

packages/subgraph-service/scripts/ops/protocol-activity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ async function main() {
110110
console.log('📝 Subgraph Service - registering...')
111111
for (const signer of signers) {
112112
const indexer = await SubgraphService.indexers(signer.address)
113-
const isRegistered = indexer.registeredAt !== 0n
113+
const isRegistered = indexer.url.length > 0
114114
if (!isRegistered) {
115115
const paymentsDestination = Math.random() < 0.5 ? signer.address : ethers.ZeroAddress
116116
const data = abi.encode(['string', 'string', 'address'], ['http://indexer.xyz', '69y7mznpp', paymentsDestination])

packages/subgraph-service/tasks/test/seed.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ task('test:seed', 'Seed the test environment, must be run after deployment').set
9393

9494
const indexerData = await subgraphService.indexers(indexerSigner.address)
9595

96-
console.log(`Indexer registered at: ${indexerData.registeredAt}`)
96+
console.log(`Indexer registered at: ${indexerData.url} - ${indexerData.geoHash}`)
9797
}
9898

9999
console.log('\n--- STEP 3: Start allocations ---')

packages/subgraph-service/test/unit/shared/SubgraphServiceShared.t.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ abstract contract SubgraphServiceSharedTest is HorizonStakingSharedTest {
8787

8888
// Check registered indexer data
8989
ISubgraphService.Indexer memory indexer = _getIndexer(_indexer);
90-
assertEq(indexer.registeredAt, block.timestamp);
9190
assertEq(indexer.url, url);
9291
assertEq(indexer.geoHash, geohash);
9392

@@ -197,7 +196,7 @@ abstract contract SubgraphServiceSharedTest is HorizonStakingSharedTest {
197196
*/
198197

199198
function _getIndexer(address _indexer) private view returns (ISubgraphService.Indexer memory) {
200-
(uint256 registeredAt, string memory url, string memory geoHash) = subgraphService.indexers(_indexer);
201-
return ISubgraphService.Indexer({ registeredAt: registeredAt, url: url, geoHash: geoHash });
199+
(string memory url, string memory geoHash) = subgraphService.indexers(_indexer);
200+
return ISubgraphService.Indexer({ url: url, geoHash: geoHash });
202201
}
203202
}

packages/subgraph-service/test/unit/subgraphService/provider/register.t.sol

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,18 @@ contract SubgraphServiceProviderRegisterTest is SubgraphServiceTest {
1919
_register(users.indexer, data);
2020
}
2121

22-
function test_SubgraphService_Provider_Register_RevertIf_AlreadyRegistered(
22+
function test_SubgraphService_Provider_Register_MultipleTimes(
2323
uint256 tokens
2424
) public useIndexer useAllocation(tokens) {
25-
vm.expectRevert(abi.encodeWithSelector(ISubgraphService.SubgraphServiceIndexerAlreadyRegistered.selector));
2625
bytes memory data = abi.encode("url", "geoHash", users.rewardsDestination);
27-
subgraphService.register(users.indexer, data);
26+
_register(users.indexer, data);
27+
28+
bytes memory data2 = abi.encode("url2", "geoHash2", users.rewardsDestination);
29+
_register(users.indexer, data2);
30+
31+
(string memory url, string memory geoHash) = subgraphService.indexers(users.indexer);
32+
assertEq(url, "url2");
33+
assertEq(geoHash, "geoHash2");
2834
}
2935

3036
function test_SubgraphService_Provider_Register_RevertWhen_InvalidProvision() public useIndexer {

0 commit comments

Comments
 (0)