@@ -99,12 +99,13 @@ contract EntropyTest is Test, EntropyTestUtils {
99
99
bool useBlockhash
100
100
) public returns (uint64 sequenceNumber ) {
101
101
vm.deal (user, fee);
102
- vm.prank (user);
102
+ vm.startPrank (user);
103
103
sequenceNumber = random.request {value: fee}(
104
104
provider,
105
105
random.constructUserCommitment (bytes32 (randomNumber)),
106
106
useBlockhash
107
107
);
108
+ vm.stopPrank ();
108
109
}
109
110
110
111
function assertRequestReverts (
@@ -133,12 +134,14 @@ contract EntropyTest is Test, EntropyTestUtils {
133
134
}
134
135
135
136
function assertRevealSucceeds (
137
+ address user ,
136
138
address provider ,
137
139
uint64 sequenceNumber ,
138
140
uint userRandom ,
139
141
bytes32 providerRevelation ,
140
142
bytes32 hash
141
143
) public {
144
+ vm.prank (user);
142
145
bytes32 randomNumber = random.reveal (
143
146
provider,
144
147
sequenceNumber,
@@ -156,18 +159,21 @@ contract EntropyTest is Test, EntropyTestUtils {
156
159
}
157
160
158
161
function assertRevealReverts (
162
+ address user ,
159
163
address provider ,
160
164
uint64 sequenceNumber ,
161
165
uint userRandom ,
162
166
bytes32 providerRevelation
163
167
) public {
168
+ vm.startPrank (user);
164
169
vm.expectRevert ();
165
170
random.reveal (
166
171
provider,
167
172
sequenceNumber,
168
173
bytes32 (uint256 (userRandom)),
169
174
providerRevelation
170
175
);
176
+ vm.stopPrank ();
171
177
}
172
178
173
179
function assertInvariants () public {
@@ -203,6 +209,7 @@ contract EntropyTest is Test, EntropyTestUtils {
203
209
assertEq (random.getRequest (provider1, sequenceNumber).blockNumber, 0 );
204
210
205
211
assertRevealSucceeds (
212
+ user2,
206
213
provider1,
207
214
sequenceNumber,
208
215
42 ,
@@ -213,6 +220,7 @@ contract EntropyTest is Test, EntropyTestUtils {
213
220
// You can only reveal the random number once. This isn't a feature of the contract per se, but it is
214
221
// the expected behavior.
215
222
assertRevealReverts (
223
+ user2,
216
224
provider1,
217
225
sequenceNumber,
218
226
42 ,
@@ -230,13 +238,15 @@ contract EntropyTest is Test, EntropyTestUtils {
230
238
assertEq (random.getRequest (provider1, sequenceNumber).blockNumber, 0 );
231
239
232
240
assertRevealReverts (
241
+ user2,
233
242
random.getDefaultProvider (),
234
243
sequenceNumber,
235
244
42 ,
236
245
provider2Proofs[sequenceNumber]
237
246
);
238
247
239
248
assertRevealSucceeds (
249
+ user2,
240
250
random.getDefaultProvider (),
241
251
sequenceNumber,
242
252
42 ,
@@ -249,13 +259,37 @@ contract EntropyTest is Test, EntropyTestUtils {
249
259
assertRequestReverts (10000000 , unregisteredProvider, 42 , false );
250
260
}
251
261
262
+ function testAuthorization () public {
263
+ uint64 sequenceNumber = request (user2, provider1, 42 , false );
264
+ assertEq (random.getRequest (provider1, sequenceNumber).requester, user2);
265
+
266
+ // user1 not authorized, must be user2.
267
+ assertRevealReverts (
268
+ user1,
269
+ provider1,
270
+ sequenceNumber,
271
+ 42 ,
272
+ provider1Proofs[sequenceNumber]
273
+ );
274
+
275
+ assertRevealSucceeds (
276
+ user2,
277
+ provider1,
278
+ sequenceNumber,
279
+ 42 ,
280
+ provider1Proofs[sequenceNumber],
281
+ ALL_ZEROS
282
+ );
283
+ }
284
+
252
285
function testAdversarialReveal () public {
253
286
uint64 sequenceNumber = request (user2, provider1, 42 , false );
254
287
255
288
// test revealing with the wrong hashes in the same chain
256
289
for (uint256 i = 0 ; i < 10 ; i++ ) {
257
290
if (i != sequenceNumber) {
258
291
assertRevealReverts (
292
+ user2,
259
293
provider1,
260
294
sequenceNumber,
261
295
42 ,
@@ -267,6 +301,7 @@ contract EntropyTest is Test, EntropyTestUtils {
267
301
// test revealing with the wrong user revealed value.
268
302
for (uint256 i = 0 ; i < 42 ; i++ ) {
269
303
assertRevealReverts (
304
+ user2,
270
305
provider1,
271
306
sequenceNumber,
272
307
i,
@@ -277,13 +312,14 @@ contract EntropyTest is Test, EntropyTestUtils {
277
312
// test revealing sequence numbers that haven't been requested yet.
278
313
for (uint64 i = sequenceNumber + 1 ; i < sequenceNumber + 3 ; i++ ) {
279
314
assertRevealReverts (
315
+ user2,
280
316
provider1,
281
317
i,
282
318
42 ,
283
319
provider1Proofs[sequenceNumber]
284
320
);
285
321
286
- assertRevealReverts (provider1, i, 42 , provider1Proofs[i]);
322
+ assertRevealReverts (user2, provider1, i, 42 , provider1Proofs[i]);
287
323
}
288
324
}
289
325
@@ -293,21 +329,56 @@ contract EntropyTest is Test, EntropyTestUtils {
293
329
uint64 s3 = request (user1, provider1, 3 , false );
294
330
uint64 s4 = request (user1, provider1, 4 , false );
295
331
296
- assertRevealSucceeds (provider1, s3, 3 , provider1Proofs[s3], ALL_ZEROS);
332
+ assertRevealSucceeds (
333
+ user1,
334
+ provider1,
335
+ s3,
336
+ 3 ,
337
+ provider1Proofs[s3],
338
+ ALL_ZEROS
339
+ );
297
340
assertInvariants ();
298
341
299
342
uint64 s5 = request (user1, provider1, 5 , false );
300
343
301
- assertRevealSucceeds (provider1, s4, 4 , provider1Proofs[s4], ALL_ZEROS);
344
+ assertRevealSucceeds (
345
+ user1,
346
+ provider1,
347
+ s4,
348
+ 4 ,
349
+ provider1Proofs[s4],
350
+ ALL_ZEROS
351
+ );
302
352
assertInvariants ();
303
353
304
- assertRevealSucceeds (provider1, s1, 1 , provider1Proofs[s1], ALL_ZEROS);
354
+ assertRevealSucceeds (
355
+ user1,
356
+ provider1,
357
+ s1,
358
+ 1 ,
359
+ provider1Proofs[s1],
360
+ ALL_ZEROS
361
+ );
305
362
assertInvariants ();
306
363
307
- assertRevealSucceeds (provider1, s2, 2 , provider1Proofs[s2], ALL_ZEROS);
364
+ assertRevealSucceeds (
365
+ user2,
366
+ provider1,
367
+ s2,
368
+ 2 ,
369
+ provider1Proofs[s2],
370
+ ALL_ZEROS
371
+ );
308
372
assertInvariants ();
309
373
310
- assertRevealSucceeds (provider1, s5, 5 , provider1Proofs[s5], ALL_ZEROS);
374
+ assertRevealSucceeds (
375
+ user1,
376
+ provider1,
377
+ s5,
378
+ 5 ,
379
+ provider1Proofs[s5],
380
+ ALL_ZEROS
381
+ );
311
382
assertInvariants ();
312
383
}
313
384
@@ -321,21 +392,13 @@ contract EntropyTest is Test, EntropyTestUtils {
321
392
);
322
393
323
394
assertRevealSucceeds (
395
+ user2,
324
396
provider1,
325
397
sequenceNumber,
326
398
42 ,
327
399
provider1Proofs[sequenceNumber],
328
400
blockhash (1234 )
329
401
);
330
-
331
- // You can only reveal the random number once. This isn't a feature of the contract per se, but it is
332
- // the expected behavior.
333
- assertRevealReverts (
334
- provider1,
335
- sequenceNumber,
336
- 42 ,
337
- provider1Proofs[sequenceNumber]
338
- );
339
402
}
340
403
341
404
function testProviderCommitmentRotation () public {
@@ -371,13 +434,15 @@ contract EntropyTest is Test, EntropyTestUtils {
371
434
// Requests that were in-flight at the time of rotation use the commitment from the time of request
372
435
for (uint256 i = 0 ; i < 10 ; i++ ) {
373
436
assertRevealReverts (
437
+ user2,
374
438
provider1,
375
439
sequenceNumber1,
376
440
userRandom,
377
441
newHashChain[i]
378
442
);
379
443
}
380
444
assertRevealSucceeds (
445
+ user2,
381
446
provider1,
382
447
sequenceNumber1,
383
448
userRandom,
@@ -388,12 +453,14 @@ contract EntropyTest is Test, EntropyTestUtils {
388
453
389
454
// Requests after the rotation use the new commitment
390
455
assertRevealReverts (
456
+ user2,
391
457
provider1,
392
458
sequenceNumber3,
393
459
userRandom,
394
460
provider1Proofs[sequenceNumber3]
395
461
);
396
462
assertRevealSucceeds (
463
+ user2,
397
464
provider1,
398
465
sequenceNumber3,
399
466
userRandom,
0 commit comments