@@ -37,6 +37,8 @@ const teeDealTag = '0x0000000000000000000000000000000000000000000000000000000000
3737const standardDealTag = HashZero ;
3838const emptyEnclaveAddress = AddressZero ;
3939const emptyEnclaveSignature = '0x' ;
40+ const noCallbackData = '0x' ;
41+ const noResultsData = '0x' ;
4042const { results, resultDigest } = buildUtf8ResultAndDigest ( 'result' ) ;
4143
4244let proxyAddress : string ;
@@ -125,20 +127,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
125127 worker ,
126128 ) ;
127129 const contributeAndFinalizeBlockTimestamp = await setNextBlockTimestamp ( ) ;
128- const contributeAndFinalizeTx = await iexecPoco . connect ( worker ) . contributeAndFinalize (
129- taskId ,
130- resultsCallbackDigest ,
131- '0x' , // Result data
132- resultsCallback ,
133- enclave . address ,
134- await buildAndSignPocoClassicEnclaveMessage ( resultHash , resultSeal , enclave ) ,
135- await buildAndSignContributionAuthorizationMessage (
136- worker . address ,
130+ const contributeAndFinalizeTx = await iexecPoco
131+ . connect ( worker )
132+ . contributeAndFinalize (
137133 taskId ,
134+ resultsCallbackDigest ,
135+ noResultsData ,
136+ resultsCallback ,
138137 enclave . address ,
139- sms ,
140- ) ,
141- ) ;
138+ await buildAndSignPocoClassicEnclaveMessage ( resultHash , resultSeal , enclave ) ,
139+ await buildAndSignContributionAuthorizationMessage (
140+ worker . address ,
141+ taskId ,
142+ enclave . address ,
143+ sms ,
144+ ) ,
145+ ) ;
142146 await contributeAndFinalizeTx . wait ( ) ;
143147 // Check state.
144148 const deal = await iexecPoco . viewDeal ( dealId ) ;
@@ -156,7 +160,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
156160 expect ( task . revealCounter ) . to . equal ( 1 ) ;
157161 expect ( task . winnerCounter ) . to . equal ( 1 ) ;
158162 expect ( task . resultDigest ) . to . equal ( resultsCallbackDigest ) ;
159- expect ( task . results ) . to . equal ( '0x' ) ;
163+ expect ( task . results ) . to . equal ( noResultsData ) ;
160164 expect ( task . resultsCallback ) . to . equal ( resultsCallback ) ;
161165 expect ( task . contributors . length ) . to . equal ( 1 ) ;
162166 expect ( task . contributors [ 0 ] ) . to . equal ( worker . address ) ;
@@ -225,7 +229,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
225229 . to . emit ( iexecPoco , 'TaskReveal' )
226230 . withArgs ( taskId , worker . address , resultsCallbackDigest )
227231 . to . emit ( iexecPoco , 'TaskFinalize' )
228- . withArgs ( taskId , '0x' ) ;
232+ . withArgs ( taskId , noResultsData ) ;
229233 // Callback events.
230234 await expect ( contributeAndFinalizeTx )
231235 . to . emit ( callbackConsumer , 'GotResult' )
@@ -247,20 +251,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
247251 await iexecPoco . initialize ( dealId , taskIndex ) . then ( ( tx ) => tx . wait ( ) ) ;
248252 // Run contributeAndFinalize.
249253 const { resultHash } = buildResultHashAndResultSeal ( taskId , resultDigest , worker ) ;
250- const contributeAndFinalizeTx = await iexecPoco . connect ( worker ) . contributeAndFinalize (
251- taskId ,
252- resultDigest ,
253- results ,
254- '0x' , // callback data
255- emptyEnclaveAddress ,
256- emptyEnclaveSignature ,
257- await buildAndSignContributionAuthorizationMessage (
258- worker . address ,
254+ const contributeAndFinalizeTx = await iexecPoco
255+ . connect ( worker )
256+ . contributeAndFinalize (
259257 taskId ,
258+ resultDigest ,
259+ results ,
260+ noCallbackData ,
260261 emptyEnclaveAddress ,
261- scheduler ,
262- ) ,
263- ) ;
262+ emptyEnclaveSignature ,
263+ await buildAndSignContributionAuthorizationMessage (
264+ worker . address ,
265+ taskId ,
266+ emptyEnclaveAddress ,
267+ scheduler ,
268+ ) ,
269+ ) ;
264270 await contributeAndFinalizeTx . wait ( ) ;
265271 // Check relevant state.
266272 const deal = await iexecPoco . viewDeal ( dealId ) ;
@@ -269,7 +275,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
269275 expect ( task . status ) . to . equal ( TaskStatusEnum . COMPLETED ) ;
270276 expect ( task . resultDigest ) . to . equal ( resultDigest ) ;
271277 expect ( task . results ) . to . equal ( ethers . utils . hexlify ( results ) ) ;
272- expect ( task . resultsCallback ) . to . equal ( '0x' ) ;
278+ expect ( task . resultsCallback ) . to . equal ( noCallbackData ) ;
273279 // Check events.
274280 await expect ( contributeAndFinalizeTx )
275281 . to . emit ( iexecPoco , 'TaskContribute' )
@@ -296,20 +302,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
296302 ) ;
297303 // No initialize.
298304 await expect (
299- iexecPoco . connect ( worker ) . contributeAndFinalize (
300- taskId ,
301- resultDigest ,
302- results ,
303- '0x' , // callback data
304- emptyEnclaveAddress ,
305- emptyEnclaveSignature ,
306- await buildAndSignContributionAuthorizationMessage (
307- worker . address ,
305+ iexecPoco
306+ . connect ( worker )
307+ . contributeAndFinalize (
308308 taskId ,
309+ resultDigest ,
310+ results ,
311+ noCallbackData ,
309312 emptyEnclaveAddress ,
310- scheduler ,
313+ emptyEnclaveSignature ,
314+ await buildAndSignContributionAuthorizationMessage (
315+ worker . address ,
316+ taskId ,
317+ emptyEnclaveAddress ,
318+ scheduler ,
319+ ) ,
311320 ) ,
312- ) ,
313321 ) . to . be . revertedWithoutReason ( ) ; // require#1
314322 } ) ;
315323
@@ -330,20 +338,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
330338 await time . setNextBlockTimestamp ( task . contributionDeadline ) ;
331339 // Task is active but after deadline.
332340 await expect (
333- iexecPoco . connect ( worker ) . contributeAndFinalize (
334- taskId ,
335- resultDigest ,
336- results ,
337- '0x' , // callback data
338- emptyEnclaveAddress ,
339- emptyEnclaveSignature ,
340- await buildAndSignContributionAuthorizationMessage (
341- worker . address ,
341+ iexecPoco
342+ . connect ( worker )
343+ . contributeAndFinalize (
342344 taskId ,
345+ resultDigest ,
346+ results ,
347+ noCallbackData ,
343348 emptyEnclaveAddress ,
344- scheduler ,
349+ emptyEnclaveSignature ,
350+ await buildAndSignContributionAuthorizationMessage (
351+ worker . address ,
352+ taskId ,
353+ emptyEnclaveAddress ,
354+ scheduler ,
355+ ) ,
345356 ) ,
346- ) ,
347357 ) . to . be . revertedWithoutReason ( ) ; // require#2
348358 } ) ;
349359
@@ -365,20 +375,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
365375 await iexecPoco . initialize ( dealId , taskIndex ) . then ( ( tx ) => tx . wait ( ) ) ;
366376 // Task active, before deadline, but bad trust.
367377 await expect (
368- iexecPoco . connect ( worker ) . contributeAndFinalize (
369- taskId ,
370- resultDigest ,
371- results ,
372- '0x' , // callback data
373- emptyEnclaveAddress ,
374- emptyEnclaveSignature ,
375- await buildAndSignContributionAuthorizationMessage (
376- worker . address ,
378+ iexecPoco
379+ . connect ( worker )
380+ . contributeAndFinalize (
377381 taskId ,
382+ resultDigest ,
383+ results ,
384+ noCallbackData ,
378385 emptyEnclaveAddress ,
379- scheduler ,
386+ emptyEnclaveSignature ,
387+ await buildAndSignContributionAuthorizationMessage (
388+ worker . address ,
389+ taskId ,
390+ emptyEnclaveAddress ,
391+ scheduler ,
392+ ) ,
380393 ) ,
381- ) ,
382394 ) . to . be . revertedWithoutReason ( ) ; // require#4
383395 } ) ;
384396
@@ -399,28 +411,114 @@ describe('IexecPoco2#contributeAndFinalize', () => {
399411 // Task active, before deadline, good trust, but missing callback data.
400412 const { callbackResultDigest : resultsCallbackDigest } =
401413 buildResultCallbackAndDigest ( 123 ) ;
414+ await expect (
415+ iexecPoco
416+ . connect ( worker )
417+ . contributeAndFinalize (
418+ taskId ,
419+ resultsCallbackDigest ,
420+ noResultsData ,
421+ noCallbackData ,
422+ emptyEnclaveAddress ,
423+ emptyEnclaveSignature ,
424+ await buildAndSignContributionAuthorizationMessage (
425+ worker . address ,
426+ taskId ,
427+ emptyEnclaveAddress ,
428+ scheduler ,
429+ ) ,
430+ ) ,
431+ ) . to . be . revertedWithoutReason ( ) ; // require#5
432+ } ) ;
433+
434+ it ( 'Should not contributeAndFinalize when enclave challenge is missing (TEE)' , async ( ) => {
435+ const { dealId, taskIndex, taskId } = await iexecWrapper . signAndMatchOrders (
436+ ...buildOrders ( {
437+ assets : ordersAssets ,
438+ requester : requester . address ,
439+ prices : ordersPrices ,
440+ volume,
441+ trust,
442+ tag : teeDealTag ,
443+ } ) . toArray ( ) ,
444+ ) ;
445+ await iexecPoco . initialize ( dealId , taskIndex ) . then ( ( tx ) => tx . wait ( ) ) ;
446+ // Task active, before deadline, good trust, but missing enclave challenge.
447+ await expect (
448+ iexecPoco
449+ . connect ( worker )
450+ . contributeAndFinalize (
451+ taskId ,
452+ resultDigest ,
453+ results ,
454+ noCallbackData ,
455+ emptyEnclaveAddress ,
456+ emptyEnclaveSignature ,
457+ await buildAndSignContributionAuthorizationMessage (
458+ worker . address ,
459+ taskId ,
460+ emptyEnclaveAddress ,
461+ scheduler ,
462+ ) ,
463+ ) ,
464+ ) . to . be . revertedWithoutReason ( ) ; // require#6
465+ } ) ;
466+
467+ it ( 'Should not contributeAndFinalize when scheduler signature is invalid' , async ( ) => {
468+ const { dealId, taskIndex, taskId } = await iexecWrapper . signAndMatchOrders (
469+ ...buildOrders ( {
470+ assets : ordersAssets ,
471+ requester : requester . address ,
472+ prices : ordersPrices ,
473+ volume,
474+ trust,
475+ tag : standardDealTag ,
476+ } ) . toArray ( ) ,
477+ ) ;
478+ await iexecPoco . initialize ( dealId , taskIndex ) . then ( ( tx ) => tx . wait ( ) ) ;
479+ // Task active, before deadline, good trust, but invalid scheduler signature.
402480 await expect (
403481 iexecPoco . connect ( worker ) . contributeAndFinalize (
404482 taskId ,
405- resultsCallbackDigest ,
406- '0x' , // Results
407- '0x' , // No callback data
483+ resultDigest ,
484+ results ,
485+ noCallbackData ,
408486 emptyEnclaveAddress ,
409487 emptyEnclaveSignature ,
488+ '0xbadd' , // Bad scheduler signature
489+ ) ,
490+ ) . to . be . revertedWith ( 'invalid-signature-format' ) ; // require#7
491+ } ) ;
492+
493+ it ( 'Should not contributeAndFinalize when enclave signature is invalid (TEE)' , async ( ) => {
494+ const { dealId, taskIndex, taskId } = await iexecWrapper . signAndMatchOrders (
495+ ...buildOrders ( {
496+ assets : ordersAssets ,
497+ requester : requester . address ,
498+ prices : ordersPrices ,
499+ volume,
500+ trust,
501+ tag : teeDealTag ,
502+ } ) . toArray ( ) ,
503+ ) ;
504+ await iexecPoco . initialize ( dealId , taskIndex ) . then ( ( tx ) => tx . wait ( ) ) ;
505+ // Task active, before deadline, good trust, good enclave challenge, but invalid enclave signature.
506+ await expect (
507+ iexecPoco . connect ( worker ) . contributeAndFinalize (
508+ taskId ,
509+ resultDigest ,
510+ results ,
511+ noCallbackData ,
512+ enclave . address ,
513+ '0xbadd' , // Bad enclave signature
410514 await buildAndSignContributionAuthorizationMessage (
411515 worker . address ,
412516 taskId ,
413- emptyEnclaveAddress ,
517+ enclave . address ,
414518 scheduler ,
415519 ) ,
416520 ) ,
417- ) . to . be . revertedWithoutReason ( ) ; // require#5
521+ ) . to . be . revertedWith ( 'invalid-signature-format' ) ; // require#8
418522 } ) ;
419-
420- it ( 'Should not contributeAndFinalize when enclave challenge for TEE task is missing' , async ( ) => { } ) ;
421-
422- it ( 'Should not contributeAndFinalize when scheduler signature is invalid' , async ( ) => { } ) ;
423-
424- it ( 'Should not contributeAndFinalize when enclave signature is invalid' , async ( ) => { } ) ;
425523 } ) ;
426524} ) ;
0 commit comments