2121import com .iexec .commons .poco .chain .ChainDataset ;
2222import com .iexec .commons .poco .chain .DealParams ;
2323import com .iexec .commons .poco .order .DatasetOrder ;
24- import com .iexec .commons .poco .security .Signature ;
2524import com .iexec .commons .poco .task .TaskDescription ;
2625import com .iexec .commons .poco .tee .TeeEnclaveConfiguration ;
27- import com .iexec .commons .poco .utils .SignatureUtils ;
2826import com .iexec .sms .chain .IexecHubService ;
2927import com .iexec .sms .secret .compute .*;
3028import com .iexec .sms .secret .web2 .Web2Secret ;
@@ -178,7 +176,7 @@ Map<String, String> getSignTokens(final TeeSessionRequest request) throws TeeSes
178176 private List <DatasetOrder > fetchDatasetOrders (final TaskDescription taskDescription ) {
179177 try {
180178 final String bulkCid = taskDescription .getDealParams ().getBulkCid ();
181- final int bulkSliceIndex = taskDescription .getBotIndex () - taskDescription . getBotFirstIndex () ;
179+ final int bulkSliceIndex = taskDescription .getBotIndex ();
182180 log .info ("Fetching dataset orders for a bulk slice [chainTaskId:{}, bulkCid:{}, bulkSliceIndex:{}]" ,
183181 taskDescription .getChainTaskId (), bulkCid , bulkSliceIndex );
184182 final List <String > bulkSlices = ipfsClient .readBulkCid (bulkCid );
@@ -195,7 +193,7 @@ private Map<String, Object> getBulkDatasetTokens(final int index,
195193 final DatasetOrder datasetOrder ) {
196194 final String prefix = IEXEC_DATASET_PREFIX + (index + 1 );
197195 final ChainDataset dataset = iexecHubService .getChainDataset (datasetOrder .getDataset ()).orElse (null );
198- if (isBulkDatasetOrderValid ( taskDescription , datasetOrder ) && dataset != null ) {
196+ if (dataset != null && isBulkDatasetOrderCompatibleWithDeal ( datasetOrder , taskDescription ) ) {
199197 final String datasetKey = web3SecretService .getDecryptedValue (datasetOrder .getDataset ()).orElse ("" );
200198 return Map .of (
201199 prefix + IEXEC_DATASET_URL_SUFFIX , dataset .getMultiaddr (),
@@ -213,23 +211,15 @@ private Map<String, Object> getBulkDatasetTokens(final int index,
213211 }
214212 }
215213
216- boolean isBulkDatasetOrderValid (final TaskDescription taskDescription , final DatasetOrder datasetOrder ) {
214+ boolean isBulkDatasetOrderCompatibleWithDeal (final DatasetOrder datasetOrder , final TaskDescription taskDescription ) {
217215 try {
218- final Signature signature = new Signature (datasetOrder .getSign ());
219- final String orderHash = datasetOrder .computeHash (iexecHubService .getOrdersDomain ());
220- final String owner = iexecHubService .getOwner (datasetOrder .getDataset ());
221- final boolean isSignedByOwner = SignatureUtils .doesSignatureMatchesAddress (
222- signature .getR (), signature .getS (), orderHash , owner );
223- final BigInteger consumedVolume = iexecHubService .viewConsumed (orderHash );
224- final boolean isVolumeValid = BULK_DATASET_VOLUME .equals (datasetOrder .getVolume ());
225- final boolean isOrderNotFullyConsumed = !BULK_DATASET_VOLUME .equals (consumedVolume );
226- final boolean isTagValid = taskDescription .getTag ().equals (datasetOrder .getTag ());
227- log .info ("Check bulk dataset order [chainTaskId:{}, dataset:{}, owner:{}, isSignedByOwner:{}, isVolumeValid:{}, isOrderNotFullyConsumed:{}, isTagValid:{}]" ,
228- taskDescription .getChainTaskId (), datasetOrder .getDataset (), owner , isSignedByOwner , isVolumeValid , isOrderNotFullyConsumed , isTagValid );
229- return isSignedByOwner && isVolumeValid && isOrderNotFullyConsumed && isTagValid ;
216+ log .debug ("Check dataset order against deal [chainTaskId:{}, deal:{}, dataset:{}" ,
217+ taskDescription .getChainTaskId (), taskDescription .getChainDealId (), datasetOrder .getDataset ());
218+ iexecHubService .assertDatasetDealCompatibility (datasetOrder , taskDescription .getChainDealId ());
219+ return true ;
230220 } catch (Exception e ) {
231- log .error ("Failed to perform all checks on dataset [chainTaskId:{}, dataset:{}]" ,
232- taskDescription .getChainTaskId (), datasetOrder .getDataset ());
221+ log .error ("Failed to perform all checks on dataset [chainTaskId:{}, dataset:{}, error:{} ]" ,
222+ taskDescription .getChainTaskId (), datasetOrder .getDataset (), e . getMessage () );
233223 return false ;
234224 }
235225 }
0 commit comments