@@ -9,10 +9,9 @@ import { IGraphPayments } from "../../../../contracts/interfaces/IGraphPayments.
9
9
import { TAPCollectorTest } from "../TAPCollector.t.sol " ;
10
10
11
11
contract TAPCollectorCollectTest is TAPCollectorTest {
12
-
13
12
/*
14
- * HELPERS
15
- */
13
+ * HELPERS
14
+ */
16
15
17
16
function _getQueryFeeEncodedData (
18
17
uint256 _signerPrivateKey ,
@@ -47,38 +46,122 @@ contract TAPCollectorCollectTest is TAPCollectorTest {
47
46
* TESTS
48
47
*/
49
48
50
- function testTAPCollector_Collect (uint256 tokens ) public useGateway useSigner {
49
+ function testTAPCollector_Collect (
50
+ uint256 tokens
51
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
51
52
tokens = bound (tokens, 1 , type (uint128 ).max);
52
-
53
+
53
54
_approveCollector (address (tapCollector), tokens);
54
55
_depositTokens (address (tapCollector), users.indexer, tokens);
55
-
56
+
56
57
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
57
58
58
59
resetPrank (users.verifier);
59
60
_collect (IGraphPayments.PaymentTypes.QueryFee, data);
60
61
}
61
62
62
- function testTAPCollector_Collect_Multiple (uint256 tokens , uint8 steps ) public useGateway useSigner {
63
+ function testTAPCollector_Collect_Multiple (
64
+ uint256 tokens ,
65
+ uint8 steps
66
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
63
67
steps = uint8 (bound (steps, 1 , 100 ));
64
68
tokens = bound (tokens, steps, type (uint128 ).max);
65
-
69
+
66
70
_approveCollector (address (tapCollector), tokens);
67
71
_depositTokens (address (tapCollector), users.indexer, tokens);
68
72
69
73
resetPrank (users.verifier);
70
74
uint256 payed = 0 ;
71
75
uint256 tokensPerStep = tokens / steps;
72
76
for (uint256 i = 0 ; i < steps; i++ ) {
73
- bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (payed + tokensPerStep));
77
+ bytes memory data = _getQueryFeeEncodedData (
78
+ signerPrivateKey,
79
+ users.indexer,
80
+ users.verifier,
81
+ uint128 (payed + tokensPerStep)
82
+ );
74
83
_collect (IGraphPayments.PaymentTypes.QueryFee, data);
75
84
payed += tokensPerStep;
76
85
}
77
86
}
78
87
88
+ function testTAPCollector_Collect_RevertWhen_NoProvision (uint256 tokens ) public useGateway useSigner {
89
+ tokens = bound (tokens, 1 , type (uint128 ).max);
90
+
91
+ _approveCollector (address (tapCollector), tokens);
92
+ _depositTokens (address (tapCollector), users.indexer, tokens);
93
+
94
+ bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
95
+
96
+ resetPrank (users.verifier);
97
+ bytes memory expectedError = abi.encodeWithSelector (
98
+ ITAPCollector.TAPCollectorUnauthorizedDataService.selector ,
99
+ users.verifier
100
+ );
101
+ vm.expectRevert (expectedError);
102
+ tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
103
+ }
104
+
105
+ function testTAPCollector_Collect_RevertWhen_ProvisionEmpty (
106
+ uint256 tokens
107
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
108
+ // thaw tokens from the provision
109
+ resetPrank (users.indexer);
110
+ staking.thaw (users.indexer, users.verifier, 100 );
111
+
112
+ tokens = bound (tokens, 1 , type (uint128 ).max);
113
+
114
+ resetPrank (users.gateway);
115
+ _approveCollector (address (tapCollector), tokens);
116
+ _depositTokens (address (tapCollector), users.indexer, tokens);
117
+
118
+ bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
119
+
120
+ resetPrank (users.verifier);
121
+ bytes memory expectedError = abi.encodeWithSelector (
122
+ ITAPCollector.TAPCollectorUnauthorizedDataService.selector ,
123
+ users.verifier
124
+ );
125
+ vm.expectRevert (expectedError);
126
+ tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
127
+ }
128
+
129
+ function testTAPCollector_Collect_PreventSignerAttack (
130
+ uint256 tokens
131
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
132
+ tokens = bound (tokens, 1 , type (uint128 ).max);
133
+
134
+ resetPrank (users.gateway);
135
+ _approveCollector (address (tapCollector), tokens);
136
+ _depositTokens (address (tapCollector), users.indexer, tokens);
137
+
138
+ // The sender authorizes another signer
139
+ (address anotherSigner , uint256 anotherSignerPrivateKey ) = makeAddrAndKey ("anotherSigner " );
140
+ uint256 proofDeadline = block .timestamp + 1 ;
141
+ bytes memory anotherSignerProof = _getSignerProof (proofDeadline, anotherSignerPrivateKey);
142
+ _authorizeSigner (anotherSigner, proofDeadline, anotherSignerProof);
143
+
144
+ // And crafts a RAV using the new signer as the data service
145
+ bytes memory data = _getQueryFeeEncodedData (
146
+ anotherSignerPrivateKey,
147
+ users.indexer,
148
+ anotherSigner,
149
+ uint128 (tokens)
150
+ );
151
+
152
+ // the call should revert because the service provider has no provision with the "data service"
153
+ resetPrank (anotherSigner);
154
+ bytes memory expectedError = abi.encodeWithSelector (
155
+ ITAPCollector.TAPCollectorUnauthorizedDataService.selector ,
156
+ anotherSigner
157
+ );
158
+ vm.expectRevert (expectedError);
159
+ tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
160
+ }
161
+
79
162
function testTAPCollector_Collect_RevertWhen_CallerNotDataService (uint256 tokens ) public useGateway useSigner {
80
163
tokens = bound (tokens, 1 , type (uint128 ).max);
81
-
164
+
82
165
resetPrank (users.gateway);
83
166
_approveCollector (address (tapCollector), tokens);
84
167
_depositTokens (address (tapCollector), users.indexer, tokens);
@@ -95,9 +178,11 @@ contract TAPCollectorCollectTest is TAPCollectorTest {
95
178
tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
96
179
}
97
180
98
- function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens (uint256 tokens ) public useGateway useSigner {
181
+ function testTAPCollector_Collect_RevertWhen_InconsistentRAVTokens (
182
+ uint256 tokens
183
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
99
184
tokens = bound (tokens, 1 , type (uint128 ).max);
100
-
185
+
101
186
_approveCollector (address (tapCollector), tokens);
102
187
_depositTokens (address (tapCollector), users.indexer, tokens);
103
188
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
@@ -106,37 +191,37 @@ contract TAPCollectorCollectTest is TAPCollectorTest {
106
191
_collect (IGraphPayments.PaymentTypes.QueryFee, data);
107
192
108
193
// Attempt to collect again
109
- vm.expectRevert (abi.encodeWithSelector (
110
- ITAPCollector.TAPCollectorInconsistentRAVTokens.selector ,
111
- tokens,
112
- tokens
113
- ));
194
+ vm.expectRevert (
195
+ abi.encodeWithSelector (ITAPCollector.TAPCollectorInconsistentRAVTokens.selector , tokens, tokens)
196
+ );
114
197
tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
115
198
}
116
199
117
200
function testTAPCollector_Collect_RevertWhen_SignerNotAuthorized (uint256 tokens ) public useGateway {
118
201
tokens = bound (tokens, 1 , type (uint128 ).max);
119
-
202
+
120
203
_approveCollector (address (tapCollector), tokens);
121
204
_depositTokens (address (tapCollector), users.indexer, tokens);
122
-
205
+
123
206
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
124
207
125
208
resetPrank (users.verifier);
126
209
vm.expectRevert (abi.encodeWithSelector (ITAPCollector.TAPCollectorInvalidRAVSigner.selector ));
127
210
tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
128
211
}
129
212
130
- function testTAPCollector_Collect_ThawingSigner (uint256 tokens ) public useGateway useSigner {
213
+ function testTAPCollector_Collect_ThawingSigner (
214
+ uint256 tokens
215
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
131
216
tokens = bound (tokens, 1 , type (uint128 ).max);
132
-
217
+
133
218
_approveCollector (address (tapCollector), tokens);
134
219
_depositTokens (address (tapCollector), users.indexer, tokens);
135
220
136
221
// Start thawing signer
137
222
_thawSigner (signer);
138
223
skip (revokeSignerThawingPeriod + 1 );
139
-
224
+
140
225
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
141
226
142
227
resetPrank (users.verifier);
@@ -145,33 +230,35 @@ contract TAPCollectorCollectTest is TAPCollectorTest {
145
230
146
231
function testTAPCollector_Collect_RevertIf_SignerWasRevoked (uint256 tokens ) public useGateway useSigner {
147
232
tokens = bound (tokens, 1 , type (uint128 ).max);
148
-
233
+
149
234
_approveCollector (address (tapCollector), tokens);
150
235
_depositTokens (address (tapCollector), users.indexer, tokens);
151
236
152
237
// Start thawing signer
153
238
_thawSigner (signer);
154
239
skip (revokeSignerThawingPeriod + 1 );
155
240
_revokeAuthorizedSigner (signer);
156
-
241
+
157
242
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
158
243
159
244
resetPrank (users.verifier);
160
245
vm.expectRevert (abi.encodeWithSelector (ITAPCollector.TAPCollectorInvalidRAVSigner.selector ));
161
246
tapCollector.collect (IGraphPayments.PaymentTypes.QueryFee, data);
162
247
}
163
248
164
- function testTAPCollector_Collect_ThawingSignerCanceled (uint256 tokens ) public useGateway useSigner {
249
+ function testTAPCollector_Collect_ThawingSignerCanceled (
250
+ uint256 tokens
251
+ ) public useIndexer useProvisionDataService (users.verifier, 100 , 0 , 0 ) useGateway useSigner {
165
252
tokens = bound (tokens, 1 , type (uint128 ).max);
166
-
253
+
167
254
_approveCollector (address (tapCollector), tokens);
168
255
_depositTokens (address (tapCollector), users.indexer, tokens);
169
256
170
257
// Start thawing signer
171
258
_thawSigner (signer);
172
259
skip (revokeSignerThawingPeriod + 1 );
173
260
_cancelThawSigner (signer);
174
-
261
+
175
262
bytes memory data = _getQueryFeeEncodedData (signerPrivateKey, users.indexer, users.verifier, uint128 (tokens));
176
263
177
264
resetPrank (users.verifier);
0 commit comments