Skip to content

Commit 4b2497c

Browse files
authored
fix: use assertDatasetDealCompatibility new PoCo method (#313)
1 parent 52c35c3 commit 4b2497c

File tree

3 files changed

+13
-26
lines changed

3 files changed

+13
-26
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# x-release-please-start-version
22
version=9.2.0
33
# x-release-please-end
4-
iexecCommonsPocoVersion=5.2.0
4+
iexecCommonsPocoVersion=5.3.0
55
iexecCommonVersion=9.2.0
66

77
nexusUser

src/main/java/com/iexec/sms/tee/session/base/SecretSessionBaseService.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
import com.iexec.commons.poco.chain.ChainDataset;
2222
import com.iexec.commons.poco.chain.DealParams;
2323
import com.iexec.commons.poco.order.DatasetOrder;
24-
import com.iexec.commons.poco.security.Signature;
2524
import com.iexec.commons.poco.task.TaskDescription;
2625
import com.iexec.commons.poco.tee.TeeEnclaveConfiguration;
27-
import com.iexec.commons.poco.utils.SignatureUtils;
2826
import com.iexec.sms.chain.IexecHubService;
2927
import com.iexec.sms.secret.compute.*;
3028
import 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
}

src/test/java/com/iexec/sms/tee/session/base/SecretSessionBaseServiceTests.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.web3j.crypto.Credentials;
5858
import org.web3j.crypto.Hash;
5959
import org.web3j.crypto.Keys;
60+
import org.web3j.protocol.exceptions.JsonRpcError;
6061

6162
import java.math.BigInteger;
6263
import java.security.GeneralSecurityException;
@@ -280,9 +281,7 @@ void shouldGetPreComputeBulkProcessingTokensForInvalidOrder() throws Exception {
280281
when(ipfsClient.readBulkCid("bulkCid")).thenReturn(List.of("ordersCid"));
281282
when(ipfsClient.readOrders("ordersCid")).thenReturn(List.of(signedDatasetOrder));
282283
when(iexecHubService.getChainDataset(datasetAddress)).thenReturn(Optional.of(ChainDataset.builder().chainDatasetId(datasetAddress).build()));
283-
when(iexecHubService.getOrdersDomain()).thenReturn(pocoDomain);
284-
when(iexecHubService.getOwner(datasetAddress)).thenReturn(createEthereumAddress());
285-
when(iexecHubService.viewConsumed(signedDatasetOrder.computeHash(pocoDomain))).thenReturn(BigInteger.ONE);
284+
doThrow(JsonRpcError.class).when(iexecHubService).assertDatasetDealCompatibility(signedDatasetOrder, DEAL_ID);
286285

287286
final SecretEnclaveBase enclaveBase = teeSecretsService.getPreComputeTokens(
288287
request,
@@ -322,9 +321,7 @@ void shouldGetPreComputeBulkProcessingTokensForValidOrder() throws Exception {
322321
when(ipfsClient.readBulkCid("bulkCid")).thenReturn(List.of("ordersCid"));
323322
when(ipfsClient.readOrders("ordersCid")).thenReturn(List.of(signedDatasetOrder));
324323
when(iexecHubService.getChainDataset(datasetAddress)).thenReturn(Optional.of(chainDataset));
325-
when(iexecHubService.getOrdersDomain()).thenReturn(pocoDomain);
326-
when(iexecHubService.getOwner(datasetAddress)).thenReturn(credentials.getAddress());
327-
when(iexecHubService.viewConsumed(signedDatasetOrder.computeHash(pocoDomain))).thenReturn(BigInteger.ZERO);
324+
doNothing().when(iexecHubService).assertDatasetDealCompatibility(signedDatasetOrder, DEAL_ID);
328325
when(web3SecretService.getDecryptedValue(datasetAddress)).thenReturn(Optional.of(DATASET_KEY));
329326

330327
final SecretEnclaveBase enclaveBase = teeSecretsService.getPreComputeTokens(

0 commit comments

Comments
 (0)