Skip to content

Commit 06d8406

Browse files
fix: allow (DATASET_INFINITE_VOLUME - 1) in bulk datasetorders for compatibility with already signed orders (#487)
Due to a communication error, some users have signed datasetorders with volume `9007199254740990` instead of `9007199254740991` to represent infinite volume suitable for bulk processing. To address compatibility with these orders, a decision has been made to accept datasetorders with volume greater than or equal to `9007199254740990` in bulk processing.
1 parent 5bab174 commit 06d8406

File tree

2 files changed

+92
-3
lines changed

2 files changed

+92
-3
lines changed

src/common/utils/validator.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,10 +527,19 @@ export const signedDatasetorderBulkSchema = () =>
527527
object(
528528
{
529529
dataset: addressSchema().required(),
530-
datasetprice: nRlcAmountSchema().oneOf(['0']).required(), // price must be 0 in bulk
530+
datasetprice: nRlcAmountSchema()
531+
.oneOf(
532+
['0'],
533+
'${path} (${originalValue}) is not valid for bulk datasetorder expected 0',
534+
)
535+
.required(), // price must be 0 in bulk
531536
volume: uint256Schema()
532-
.oneOf([DATASET_INFINITE_VOLUME.toString()])
533-
.required(), // volume must be infinite in bulk
537+
.test(
538+
'is-infinite-volume',
539+
'${path} (${originalValue}) is not valid for bulk datasetorder expected DATASET_INFINITE_VOLUME (9007199254740991)',
540+
(value) => parseInt(value) >= DATASET_INFINITE_VOLUME - 1, // (DATASET_INFINITE_VOLUME - 1) is accepted for compatibility with already created orders
541+
)
542+
.required(),
534543
tag: tagSchema().required(),
535544
apprestrict: addressSchema().required(),
536545
workerpoolrestrict: addressSchema().required(),

test/lib/unit/validator.test.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ import {
3131
smsUrlOrMapSchema,
3232
teeFrameworkSchema,
3333
addressOrAnySchema,
34+
signedDatasetorderBulkSchema,
3435
} from '../../../src/common/utils/validator.js';
3536
import { errors } from '../../../src/lib/index.js';
37+
import { DATASET_INFINITE_VOLUME } from '../../../src/lib/utils.js';
3638

3739
const { ValidationError } = errors;
3840

@@ -1482,3 +1484,81 @@ describe('[teeFrameworkSchema]', () => {
14821484
);
14831485
});
14841486
});
1487+
1488+
describe('[signedDatasetorderBulkSchema]', () => {
1489+
test('valid order', async () => {
1490+
const datasetorder = {
1491+
dataset: '0x607F4C5BB672230e8672085532f7e901544a7375',
1492+
volume: DATASET_INFINITE_VOLUME.toString(),
1493+
tag: '0x0000000000000000000000000000000000000000000000000000000000000000',
1494+
datasetprice: '0',
1495+
workerpoolrestrict: '0x0000000000000000000000000000000000000000',
1496+
requesterrestrict: '0x0000000000000000000000000000000000000000',
1497+
apprestrict: '0x0000000000000000000000000000000000000000',
1498+
salt: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
1499+
sign: '0x1b8e3f4f5c3e2e8f4d5c6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f9fa0b1c2d3e4f5061b',
1500+
};
1501+
await expect(
1502+
signedDatasetorderBulkSchema().validate(datasetorder),
1503+
).resolves.toStrictEqual(datasetorder);
1504+
});
1505+
1506+
test('valid order (INFINITE_VOLUME - 1) compatibility', async () => {
1507+
const datasetorder = {
1508+
dataset: '0x607F4C5BB672230e8672085532f7e901544a7375',
1509+
volume: (DATASET_INFINITE_VOLUME - 1).toString(),
1510+
tag: '0x0000000000000000000000000000000000000000000000000000000000000000',
1511+
datasetprice: '0',
1512+
workerpoolrestrict: '0x0000000000000000000000000000000000000000',
1513+
requesterrestrict: '0x0000000000000000000000000000000000000000',
1514+
apprestrict: '0x0000000000000000000000000000000000000000',
1515+
salt: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
1516+
sign: '0x1b8e3f4f5c3e2e8f4d5c6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f9fa0b1c2d3e4f5061b',
1517+
};
1518+
await expect(
1519+
signedDatasetorderBulkSchema().validate(datasetorder),
1520+
).resolves.toStrictEqual(datasetorder);
1521+
});
1522+
1523+
test('invalid order - volume too low', async () => {
1524+
const datasetorder = {
1525+
dataset: '0x607F4C5BB672230e8672085532f7e901544a7375',
1526+
volume: (DATASET_INFINITE_VOLUME - 2).toString(),
1527+
tag: '0x0000000000000000000000000000000000000000000000000000000000000000',
1528+
datasetprice: '0',
1529+
workerpoolrestrict: '0x0000000000000000000000000000000000000000',
1530+
requesterrestrict: '0x0000000000000000000000000000000000000000',
1531+
apprestrict: '0x0000000000000000000000000000000000000000',
1532+
salt: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
1533+
sign: '0x1b8e3f4f5c3e2e8f4d5c6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f9fa0b1c2d3e4f5061b',
1534+
};
1535+
await expect(
1536+
signedDatasetorderBulkSchema().validate(datasetorder),
1537+
).rejects.toThrow(
1538+
new ValidationError(
1539+
'volume (9007199254740989) is not valid for bulk datasetorder expected DATASET_INFINITE_VOLUME (9007199254740991)',
1540+
),
1541+
);
1542+
});
1543+
1544+
test('invalid order - price not 0', async () => {
1545+
const datasetorder = {
1546+
dataset: '0x607F4C5BB672230e8672085532f7e901544a7375',
1547+
volume: DATASET_INFINITE_VOLUME.toString(),
1548+
tag: '0x0000000000000000000000000000000000000000000000000000000000000000',
1549+
datasetprice: '1',
1550+
workerpoolrestrict: '0x0000000000000000000000000000000000000000',
1551+
requesterrestrict: '0x0000000000000000000000000000000000000000',
1552+
apprestrict: '0x0000000000000000000000000000000000000000',
1553+
salt: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
1554+
sign: '0x1b8e3f4f5c3e2e8f4d5c6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f9fa0b1c2d3e4f5061b',
1555+
};
1556+
await expect(
1557+
signedDatasetorderBulkSchema().validate(datasetorder),
1558+
).rejects.toThrow(
1559+
new ValidationError(
1560+
'datasetprice (1) is not valid for bulk datasetorder expected 0',
1561+
),
1562+
);
1563+
});
1564+
});

0 commit comments

Comments
 (0)