Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/common/execution/order-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
import { resolveTeeFrameworkFromApp, showApp } from '../protocol/registries.js';

export const resolveTeeFrameworkFromTag = async (tag) => {
const vTag = await tagSchema().validate(tag);
const vTag = await tagSchema({ allowAgnosticTee: true }).validate(tag);
if (checkActiveBitInTag(vTag, TAG_MAP[TEE_FRAMEWORKS.SCONE])) {
return TEE_FRAMEWORKS.SCONE;
}
Expand Down
2 changes: 1 addition & 1 deletion src/common/market/order.js
Original file line number Diff line number Diff line change
Expand Up @@ -1129,7 +1129,7 @@ export const createDatasetorder = async (
.validate(dataset),
datasetprice: await nRlcAmountSchema().validate(datasetprice),
volume: await uint256Schema().validate(volume),
tag: await tagSchema().validate(tag),
tag: await tagSchema({ allowAgnosticTee: true }).validate(tag),
apprestrict: await addressSchema({
ethProvider: contracts.provider,
}).validate(apprestrict),
Expand Down
6 changes: 3 additions & 3 deletions src/common/utils/validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ export const paramsSchema = () =>
},
);

export const tagSchema = () =>
export const tagSchema = ({ allowAgnosticTee = false } = {}) =>
mixed()
.transform((value) => {
if (Array.isArray(value)) {
Expand Down Expand Up @@ -424,7 +424,7 @@ export const tagSchema = () =>
);
try {
if (isTee) {
if (teeFrameworks.length < 1) {
if (!allowAgnosticTee && teeFrameworks.length < 1) {
throw new Error(
`'tee' tag must be used with a tee framework (${Object.values(
TEE_FRAMEWORKS,
Expand Down Expand Up @@ -486,7 +486,7 @@ export const datasetorderSchema = (opt) =>
dataset: addressSchema(opt).required(),
datasetprice: nRlcAmountSchema().required(),
volume: uint256Schema().required(),
tag: tagSchema().required(),
tag: tagSchema({ allowAgnosticTee: true }).required(),
apprestrict: addressSchema(opt).required(),
workerpoolrestrict: addressSchema(opt).required(),
requesterrestrict: addressSchema(opt).required(),
Expand Down
25 changes: 14 additions & 11 deletions test/lib/e2e/IExecOrderModule.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,15 +113,15 @@ describe('order', () => {
apprestrict,
workerpoolrestrict,
requesterrestrict,
tag: ['tee', 'scone'],
tag: ['tee'],
volume: 100,
});
expect(order).toEqual({
dataset,
datasetprice: '1000000000',
apprestrict,
requesterrestrict,
tag: '0x0000000000000000000000000000000000000000000000000000000000000003',
tag: '0x0000000000000000000000000000000000000000000000000000000000000001',
volume: '100',
workerpoolrestrict,
});
Expand Down Expand Up @@ -384,6 +384,13 @@ describe('signDatasetorder()', () => {
const order = await iexec.order.createDatasetorder({
dataset: address,
});
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['tee'] }),
).rejects.toThrow(
new Error(
`Dataset encryption key is not set for dataset ${address} in the SMS. Dataset decryption will fail.`,
),
);
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['tee', 'scone'] }),
).rejects.toThrow(
Expand All @@ -395,6 +402,9 @@ describe('signDatasetorder()', () => {
address,
iexec.dataset.generateEncryptionKey(),
);
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['tee'] }),
).resolves.toBeDefined();
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['tee', 'scone'] }),
).resolves.toBeDefined();
Expand All @@ -412,13 +422,6 @@ describe('signDatasetorder()', () => {
const order = await iexec.order.createDatasetorder({
dataset: getRandomAddress(),
});
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['tee'] }),
).rejects.toThrow(
new Error(
"'tee' tag must be used with a tee framework ('scone'|'gramine')",
),
);
await expect(
iexec.order.signDatasetorder({ ...order, tag: ['scone'] }),
).rejects.toThrow(Error("'scone' tag must be used with 'tee' tag"));
Expand Down Expand Up @@ -883,7 +886,7 @@ describe('publish...order()', () => {
test('preflightChecks dataset secret exists for tee tag', async () => {
const { iexec } = getTestConfig(iexecTestChain)();
const datasetorder = await deployAndGetDatasetorder(iexec, {
tag: ['tee', 'scone'],
tag: ['tee'],
});
const datasetAddress = datasetorder.dataset;
await expect(
Expand Down Expand Up @@ -2456,7 +2459,7 @@ describe('matchOrders()', () => {
});
const teeDatasetorder = await deployAndGetDatasetorder(
iexecResourcesProvider,
{ tag: ['tee', 'scone'] },
{ tag: ['tee'] },
);
const teeWorkerpoolorder = await deployAndGetWorkerpoolorder(
iexecResourcesProvider,
Expand Down
6 changes: 6 additions & 0 deletions test/lib/unit/validator.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,12 @@ describe('[tagSchema]', () => {
).rejects.toThrow(
new ValidationError("'gramine' tag must be used with 'tee' tag"),
);
const agnosticTeeTag = await tagSchema({ allowAgnosticTee: true }).validate(
['tee'],
);
expect(agnosticTeeTag).toBe(
'0x0000000000000000000000000000000000000000000000000000000000000001',
);
await expect(tagSchema().validate('tee,gramine,scone')).rejects.toThrow(
new ValidationError(
"tee framework tags are exclusive ('scone'|'gramine')",
Expand Down
Loading