Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 23f1436

Browse files
feat: implement Indexing Agreements
1 parent d89440a commit 23f1436

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+5734
-541
lines changed

‎packages/horizon/contracts/data-service/extensions/DataServiceFees.sol

Lines changed: 16 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol";
55

66
import { ProvisionTracker } from "../libraries/ProvisionTracker.sol";
77
import { LinkedList } from "../../libraries/LinkedList.sol";
8+
import { StakeClaims } from "../libraries/StakeClaims.sol";
89

910
import { DataService } from "../DataService.sol";
1011
import { DataServiceFeesV1Storage } from "./DataServiceFeesStorage.sol";
@@ -41,23 +42,17 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
4142
* @param _unlockTimestamp The timestamp when the tokens can be released
4243
*/
4344
function _lockStake(address _serviceProvider, uint256 _tokens, uint256 _unlockTimestamp) internal {
44-
require(_tokens != 0, DataServiceFeesZeroTokens());
45-
feesProvisionTracker.lock(_graphStaking(), _serviceProvider, _tokens, _delegationRatio);
46-
47-
LinkedList.List storage claimsList = claimsLists[_serviceProvider];
48-
49-
// Save item and add to list
50-
bytes32 claimId = _buildStakeClaimId(_serviceProvider, claimsList.nonce);
51-
claims[claimId] = StakeClaim({
52-
tokens: _tokens,
53-
createdAt: block.timestamp,
54-
releasableAt: _unlockTimestamp,
55-
nextClaim: bytes32(0)
56-
});
57-
if (claimsList.count != 0) claims[claimsList.tail].nextClaim = claimId;
58-
claimsList.addTail(claimId);
59-
60-
emit StakeClaimLocked(_serviceProvider, claimId, _tokens, _unlockTimestamp);
45+
StakeClaims.lockStake(
46+
feesProvisionTracker,
47+
claims,
48+
claimsLists,
49+
_graphStaking(),
50+
address(this),
51+
_delegationRatio,
52+
_serviceProvider,
53+
_tokens,
54+
_unlockTimestamp
55+
);
6156
}
6257

6358
/**
@@ -80,7 +75,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
8075
_numClaimsToRelease
8176
);
8277

83-
emit StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256)));
78+
emit StakeClaims.StakeClaimsReleased(_serviceProvider, claimsReleased, abi.decode(data, (uint256)));
8479
}
8580

8681
/**
@@ -92,23 +87,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
9287
* @return The updated accumulator data
9388
*/
9489
function _processStakeClaim(bytes32 _claimId, bytes memory _acc) private returns (bool, bytes memory) {
95-
StakeClaim memory claim = _getStakeClaim(_claimId);
96-
97-
// early exit
98-
if (claim.releasableAt > block.timestamp) {
99-
return (true, LinkedList.NULL_BYTES);
100-
}
101-
102-
// decode
103-
(uint256 tokensClaimed, address serviceProvider) = abi.decode(_acc, (uint256, address));
104-
105-
// process
106-
feesProvisionTracker.release(serviceProvider, claim.tokens);
107-
emit StakeClaimReleased(serviceProvider, _claimId, claim.tokens, claim.releasableAt);
108-
109-
// encode
110-
_acc = abi.encode(tokensClaimed + claim.tokens, serviceProvider);
111-
return (false, _acc);
90+
return StakeClaims.processStakeClaim(feesProvisionTracker, claims, _claimId, _acc);
11291
}
11392

11493
/**
@@ -117,18 +96,7 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
11796
* @param _claimId The ID of the stake claim to delete
11897
*/
11998
function _deleteStakeClaim(bytes32 _claimId) private {
120-
delete claims[_claimId];
121-
}
122-
123-
/**
124-
* @notice Gets the details of a stake claim
125-
* @param _claimId The ID of the stake claim
126-
* @return The stake claim details
127-
*/
128-
function _getStakeClaim(bytes32 _claimId) private view returns (StakeClaim memory) {
129-
StakeClaim memory claim = claims[_claimId];
130-
require(claim.createdAt != 0, DataServiceFeesClaimNotFound(_claimId));
131-
return claim;
99+
StakeClaims.deleteStakeClaim(claims, _claimId);
132100
}
133101

134102
/**
@@ -138,16 +106,6 @@ abstract contract DataServiceFees is DataService, DataServiceFeesV1Storage, IDat
138106
* @return The next stake claim ID
139107
*/
140108
function _getNextStakeClaim(bytes32 _claimId) private view returns (bytes32) {
141-
return claims[_claimId].nextClaim;
142-
}
143-
144-
/**
145-
* @notice Builds a stake claim ID
146-
* @param _serviceProvider The address of the service provider
147-
* @param _nonce A nonce of the stake claim
148-
* @return The stake claim ID
149-
*/
150-
function _buildStakeClaimId(address _serviceProvider, uint256 _nonce) private view returns (bytes32) {
151-
return keccak256(abi.encodePacked(address(this), _serviceProvider, _nonce));
109+
return StakeClaims.getNextStakeClaim(claims, _claimId);
152110
}
153111
}

‎packages/horizon/contracts/data-service/extensions/DataServiceFeesStorage.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
22
pragma solidity 0.8.27;
33

4-
import { IDataServiceFees } from "../interfaces/IDataServiceFees.sol";
4+
import { StakeClaims } from "../libraries/StakeClaims.sol";
55

66
import { LinkedList } from "../../libraries/LinkedList.sol";
77

@@ -15,7 +15,7 @@ abstract contract DataServiceFeesV1Storage {
1515
mapping(address serviceProvider => uint256 tokens) public feesProvisionTracker;
1616

1717
/// @notice List of all locked stake claims to be released to service providers
18-
mapping(bytes32 claimId => IDataServiceFees.StakeClaim claim) public claims;
18+
mapping(bytes32 claimId => StakeClaims.StakeClaim claim) public claims;
1919

2020
/// @notice Service providers registered in the data service
2121
mapping(address serviceProvider => LinkedList.List list) public claimsLists;

‎packages/horizon/contracts/data-service/interfaces/IDataServiceFees.sol

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -22,70 +22,6 @@ import { IDataService } from "./IDataService.sol";
2222
* bugs. We may have an active bug bounty program.
2323
*/
2424
interface IDataServiceFees is IDataService {
25-
/**
26-
* @notice A stake claim, representing provisioned stake that gets locked
27-
* to be released to a service provider.
28-
* @dev StakeClaims are stored in linked lists by service provider, ordered by
29-
* creation timestamp.
30-
* @param tokens The amount of tokens to be locked in the claim
31-
* @param createdAt The timestamp when the claim was created
32-
* @param releasableAt The timestamp when the tokens can be released
33-
* @param nextClaim The next claim in the linked list
34-
*/
35-
struct StakeClaim {
36-
uint256 tokens;
37-
uint256 createdAt;
38-
uint256 releasableAt;
39-
bytes32 nextClaim;
40-
}
41-
42-
/**
43-
* @notice Emitted when a stake claim is created and stake is locked.
44-
* @param serviceProvider The address of the service provider
45-
* @param claimId The id of the stake claim
46-
* @param tokens The amount of tokens to lock in the claim
47-
* @param unlockTimestamp The timestamp when the tokens can be released
48-
*/
49-
event StakeClaimLocked(
50-
address indexed serviceProvider,
51-
bytes32 indexed claimId,
52-
uint256 tokens,
53-
uint256 unlockTimestamp
54-
);
55-
56-
/**
57-
* @notice Emitted when a stake claim is released and stake is unlocked.
58-
* @param serviceProvider The address of the service provider
59-
* @param claimId The id of the stake claim
60-
* @param tokens The amount of tokens released
61-
* @param releasableAt The timestamp when the tokens were released
62-
*/
63-
event StakeClaimReleased(
64-
address indexed serviceProvider,
65-
bytes32 indexed claimId,
66-
uint256 tokens,
67-
uint256 releasableAt
68-
);
69-
70-
/**
71-
* @notice Emitted when a series of stake claims are released.
72-
* @param serviceProvider The address of the service provider
73-
* @param claimsCount The number of stake claims being released
74-
* @param tokensReleased The total amount of tokens being released
75-
*/
76-
event StakeClaimsReleased(address indexed serviceProvider, uint256 claimsCount, uint256 tokensReleased);
77-
78-
/**
79-
* @notice Thrown when attempting to get a stake claim that does not exist.
80-
* @param claimId The id of the stake claim
81-
*/
82-
error DataServiceFeesClaimNotFound(bytes32 claimId);
83-
84-
/**
85-
* @notice Emitted when trying to lock zero tokens in a stake claim
86-
*/
87-
error DataServiceFeesZeroTokens();
88-
8925
/**
9026
* @notice Releases expired stake claims for the caller.
9127
* @dev This function is only meant to be called if the service provider has enough

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /