@dcl/content-validator 2.1.1-20220621133633.commit-24da31f → 2.1.1-20220623134639.commit-ca80e03
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/content-validator.api.json +104 -217
- package/dist/the-graph-client/the-graph-client.d.ts.map +1 -1
- package/dist/the-graph-client/the-graph-client.js +7 -13
- package/dist/the-graph-client/the-graph-client.js.map +1 -1
- package/dist/types.d.ts +11 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -16
- package/dist/types.js.map +1 -1
- package/dist/validations/ADR51.d.ts +3 -5
- package/dist/validations/ADR51.d.ts.map +1 -1
- package/dist/validations/ADR51.js +4 -0
- package/dist/validations/ADR51.js.map +1 -1
- package/dist/validations/access-checker/access.d.ts.map +1 -1
- package/dist/validations/access-checker/access.js +5 -3
- package/dist/validations/access-checker/access.js.map +1 -1
- package/dist/validations/access-checker/emotes.d.ts +3 -0
- package/dist/validations/access-checker/emotes.d.ts.map +1 -0
- package/dist/validations/access-checker/emotes.js +13 -0
- package/dist/validations/access-checker/emotes.js.map +1 -0
- package/dist/validations/access-checker/items/collection-asset.d.ts +15 -0
- package/dist/validations/access-checker/items/collection-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/collection-asset.js +133 -0
- package/dist/validations/access-checker/items/collection-asset.js.map +1 -0
- package/dist/validations/access-checker/items/items.d.ts +13 -0
- package/dist/validations/access-checker/items/items.d.ts.map +1 -0
- package/dist/validations/access-checker/items/items.js +68 -0
- package/dist/validations/access-checker/items/items.js.map +1 -0
- package/dist/validations/access-checker/items/off-chain-asset.d.ts +3 -0
- package/dist/validations/access-checker/items/off-chain-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/off-chain-asset.js +17 -0
- package/dist/validations/access-checker/items/off-chain-asset.js.map +1 -0
- package/dist/validations/access-checker/items/third-party-asset.d.ts +3 -0
- package/dist/validations/access-checker/items/third-party-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/third-party-asset.js +107 -0
- package/dist/validations/access-checker/items/third-party-asset.js.map +1 -0
- package/dist/validations/access-checker/profiles.d.ts.map +1 -1
- package/dist/validations/access-checker/profiles.js +3 -3
- package/dist/validations/access-checker/profiles.js.map +1 -1
- package/dist/validations/access-checker/scenes.d.ts.map +1 -1
- package/dist/validations/access-checker/scenes.js +3 -3
- package/dist/validations/access-checker/scenes.js.map +1 -1
- package/dist/validations/access-checker/wearables.d.ts +0 -18
- package/dist/validations/access-checker/wearables.d.ts.map +1 -1
- package/dist/validations/access-checker/wearables.js +9 -308
- package/dist/validations/access-checker/wearables.js.map +1 -1
- package/dist/validations/content.d.ts +3 -0
- package/dist/validations/content.d.ts.map +1 -1
- package/dist/validations/content.js +30 -17
- package/dist/validations/content.js.map +1 -1
- package/dist/validations/index.d.ts +4 -23
- package/dist/validations/index.d.ts.map +1 -1
- package/dist/validations/index.js +4 -31
- package/dist/validations/index.js.map +1 -1
- package/dist/validations/ipfs-hashing.d.ts.map +1 -1
- package/dist/validations/ipfs-hashing.js +3 -6
- package/dist/validations/ipfs-hashing.js.map +1 -1
- package/dist/validations/items/emotes.d.ts +5 -0
- package/dist/validations/items/emotes.d.ts.map +1 -0
- package/dist/validations/items/emotes.js +35 -0
- package/dist/validations/items/emotes.js.map +1 -0
- package/dist/validations/items/items.d.ts +10 -0
- package/dist/validations/items/items.d.ts.map +1 -0
- package/dist/validations/items/items.js +79 -0
- package/dist/validations/items/items.js.map +1 -0
- package/dist/validations/{wearable.d.ts → items/wearables.d.ts} +2 -5
- package/dist/validations/items/wearables.d.ts.map +1 -0
- package/dist/validations/items/wearables.js +32 -0
- package/dist/validations/items/wearables.js.map +1 -0
- package/dist/validations/metadata-schema.d.ts +2 -5
- package/dist/validations/metadata-schema.d.ts.map +1 -1
- package/dist/validations/metadata-schema.js +37 -7
- package/dist/validations/metadata-schema.js.map +1 -1
- package/dist/validations/profile.d.ts.map +1 -1
- package/dist/validations/profile.js +8 -18
- package/dist/validations/profile.js.map +1 -1
- package/dist/validations/size.d.ts.map +1 -1
- package/dist/validations/size.js +4 -3
- package/dist/validations/size.js.map +1 -1
- package/dist/validations/timestamps.d.ts +21 -0
- package/dist/validations/timestamps.d.ts.map +1 -0
- package/dist/validations/timestamps.js +24 -0
- package/dist/validations/timestamps.js.map +1 -0
- package/dist/validations/validations.d.ts +9 -0
- package/dist/validations/validations.d.ts.map +1 -0
- package/dist/validations/validations.js +47 -0
- package/dist/validations/validations.js.map +1 -0
- package/package.json +4 -3
- package/dist/validations/wearable.d.ts.map +0 -1
- package/dist/validations/wearable.js +0 -110
- package/dist/validations/wearable.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.thirdPartyAssetValidation = void 0;
|
|
4
|
+
const content_hash_tree_1 = require("@dcl/content-hash-tree");
|
|
5
|
+
const hashing_1 = require("@dcl/hashing");
|
|
6
|
+
const schemas_1 = require("@dcl/schemas");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
function toHexBuffer(value) {
|
|
9
|
+
if (value.startsWith('0x')) {
|
|
10
|
+
return Buffer.from(value.substring(2), 'hex'); // removing first 2 characters (0x)
|
|
11
|
+
}
|
|
12
|
+
return Buffer.from(value, 'hex');
|
|
13
|
+
}
|
|
14
|
+
function getThirdPartyId(urn) {
|
|
15
|
+
return `urn:decentraland:${urn.network}:collections-thirdparty:${urn.thirdPartyName}`;
|
|
16
|
+
}
|
|
17
|
+
async function verifyHash(metadata, merkleRoot, logger) {
|
|
18
|
+
if (!schemas_1.MerkleProof.validate(metadata.merkleProof)) {
|
|
19
|
+
logger.debug('Merkle proof is not valid', {
|
|
20
|
+
merkleProof: metadata.merkleProof
|
|
21
|
+
});
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const merkleProof = metadata.merkleProof;
|
|
25
|
+
const generatedCrcHash = (0, hashing_1.keccak256Hash)(metadata, metadata.merkleProof.hashingKeys);
|
|
26
|
+
// The hash provided in the merkleProof for the entity MUST match the hash generated by the validator.
|
|
27
|
+
if (metadata.merkleProof.entityHash !== generatedCrcHash) {
|
|
28
|
+
logger.debug(`The hash provided in the merkleProof doesn't match the one generated by the validator`, {
|
|
29
|
+
generatedCrcHash,
|
|
30
|
+
entityHash: metadata.merkleProof.entityHash
|
|
31
|
+
});
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
// Verify if the entity belongs to the Merkle Tree.
|
|
35
|
+
const bufferedProofs = merkleProof.proof.map((value) => toHexBuffer(value));
|
|
36
|
+
const bufferedMerkleRoot = toHexBuffer(merkleRoot);
|
|
37
|
+
return (0, content_hash_tree_1.verifyProof)(merkleProof.index, merkleProof.entityHash, bufferedProofs, bufferedMerkleRoot);
|
|
38
|
+
}
|
|
39
|
+
async function getMerkleRoot(components, block, thirdPartyId) {
|
|
40
|
+
const query = `
|
|
41
|
+
query MerkleRoot($id: String!, $block: Int!) {
|
|
42
|
+
thirdParties(where: { id: $id, isApproved: true }, block: { number: $block }, first: 1) {
|
|
43
|
+
root
|
|
44
|
+
}
|
|
45
|
+
}`;
|
|
46
|
+
const result = await components.externalCalls.subgraphs.L2.thirdPartyRegistry.query(query, {
|
|
47
|
+
id: thirdPartyId,
|
|
48
|
+
block
|
|
49
|
+
});
|
|
50
|
+
if (!result.thirdParties || result.thirdParties.length < 1)
|
|
51
|
+
return;
|
|
52
|
+
return result.thirdParties[0]?.root;
|
|
53
|
+
}
|
|
54
|
+
async function verifyMerkleProofedEntity(components, urn, deployment, logger) {
|
|
55
|
+
// do merkle proofed entity validation, required keys are defined by the Catalyst and must be a subset of the hashingKeys from the MerkleProof to succeed
|
|
56
|
+
const metadata = deployment.entity.metadata;
|
|
57
|
+
if (!(0, schemas_1.isThirdParty)(deployment.entity.metadata)) {
|
|
58
|
+
// This should never happen as the metadata validation ran before
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const thirdPartyId = getThirdPartyId(urn);
|
|
62
|
+
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await components.theGraphClient.findBlocksForTimestamp(components.externalCalls.subgraphs.L2.blocks, deployment.entity.timestamp);
|
|
63
|
+
const merkleRoots = [];
|
|
64
|
+
const hasPermissionOnBlock = async (blockNumber) => {
|
|
65
|
+
try {
|
|
66
|
+
if (!blockNumber)
|
|
67
|
+
return false;
|
|
68
|
+
const merkleRoot = await getMerkleRoot(components, blockNumber, thirdPartyId);
|
|
69
|
+
if (!merkleRoot) {
|
|
70
|
+
logger.debug(`Merkle proof not found for given block and third party ID`, { blockNumber, thirdPartyId });
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
merkleRoots.push(merkleRoot);
|
|
74
|
+
return await verifyHash(metadata, merkleRoot, logger);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
const error = e?.message;
|
|
78
|
+
logger.debug(error);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const validMerkleProofedEntity = (await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
83
|
+
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment));
|
|
84
|
+
if (!validMerkleProofedEntity) {
|
|
85
|
+
logger.debug(`Merkle Tree based verifications failed:`, {
|
|
86
|
+
merkleProof: JSON.stringify(metadata.merkleProof),
|
|
87
|
+
merkleRoots: JSON.stringify(merkleRoots),
|
|
88
|
+
blocks: JSON.stringify([blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment])
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return validMerkleProofedEntity;
|
|
92
|
+
}
|
|
93
|
+
exports.thirdPartyAssetValidation = {
|
|
94
|
+
async validateAsset(components, asset, deployment) {
|
|
95
|
+
const logger = components.logs.getLogger('collection asset access validation');
|
|
96
|
+
// Third Party wearables are validated doing merkle tree based verification proof
|
|
97
|
+
const verified = await verifyMerkleProofedEntity(components, asset, deployment, logger);
|
|
98
|
+
if (!verified) {
|
|
99
|
+
return (0, types_1.validationFailed)(`Couldn't verify merkle proofed entity`);
|
|
100
|
+
}
|
|
101
|
+
return types_1.OK;
|
|
102
|
+
},
|
|
103
|
+
canValidate(asset) {
|
|
104
|
+
return asset.type === 'blockchain-collection-third-party';
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=third-party-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"third-party-asset.js","sourceRoot":"","sources":["../../../../src/validations/access-checker/items/third-party-asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAAoB,MAAM,aAAa,CAAA;AAI9D;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,UAoDtB,CAAA"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.profiles = void 0;
|
|
4
4
|
const schemas_1 = require("@dcl/schemas");
|
|
5
|
-
const types_1 = require("../../types");
|
|
6
5
|
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
7
|
-
const
|
|
6
|
+
const types_1 = require("../../types");
|
|
8
7
|
const profile_1 = require("../profile");
|
|
8
|
+
const timestamps_1 = require("../timestamps");
|
|
9
9
|
/**
|
|
10
10
|
* Validate that the pointers are valid, and that the Ethereum address has write access to them
|
|
11
11
|
* @public
|
|
@@ -27,7 +27,7 @@ exports.profiles = {
|
|
|
27
27
|
else if (pointer !== ethAddress.toLowerCase()) {
|
|
28
28
|
return (0, types_1.validationFailed)(`You can only alter your own profile. The pointer address and the signer address are different (pointer:${pointer} signer: ${ethAddress.toLowerCase()}).`);
|
|
29
29
|
}
|
|
30
|
-
if (deployment.entity.timestamp <
|
|
30
|
+
if (deployment.entity.timestamp < timestamps_1.ADR_75_TIMESTAMP)
|
|
31
31
|
return types_1.OK;
|
|
32
32
|
const names = allClaimedNames(deployment.entity);
|
|
33
33
|
const namesCheckResult = await theGraphClient.checkForNamesOwnershipWithTimestamp(ethAddress, names, deployment.entity.timestamp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenes.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/scenes.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,UAAU,EAAE,MAAM,aAAa,CAAA;AAgCnE;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"scenes.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/scenes.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,UAAU,EAAE,MAAM,aAAa,CAAA;AAgCnE;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,UAsSpB,CAAA"}
|
|
@@ -35,7 +35,7 @@ exports.scenes = {
|
|
|
35
35
|
timestamp: Math.floor(timestamp / 1000) // js(ms) -> UNIX(s)
|
|
36
36
|
};
|
|
37
37
|
try {
|
|
38
|
-
return (await externalCalls.
|
|
38
|
+
return (await externalCalls.subgraphs.L1.landManager.query(query, variables)).authorizations;
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
41
41
|
logger.error(`Error fetching authorizations for ${owner}`);
|
|
@@ -83,7 +83,7 @@ exports.scenes = {
|
|
|
83
83
|
timestamp: Math.floor(timestamp / 1000) // UNIX
|
|
84
84
|
};
|
|
85
85
|
try {
|
|
86
|
-
return (await externalCalls.
|
|
86
|
+
return (await externalCalls.subgraphs.L1.landManager.query(query, variables)).estates[0];
|
|
87
87
|
}
|
|
88
88
|
catch (error) {
|
|
89
89
|
logger.error(`Error fetching estate (${estateId})`);
|
|
@@ -139,7 +139,7 @@ exports.scenes = {
|
|
|
139
139
|
timestamp: Math.floor(timestamp / 1000) // UNIX
|
|
140
140
|
};
|
|
141
141
|
try {
|
|
142
|
-
const r = await externalCalls.
|
|
142
|
+
const r = await externalCalls.subgraphs.L1.landManager.query(query, variables);
|
|
143
143
|
if (r.parcels && r.parcels.length)
|
|
144
144
|
return r.parcels[0];
|
|
145
145
|
logger.error(`Error fetching parcel (${x}, ${y}, ${timestamp}): ${JSON.stringify(r)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenes.js","sourceRoot":"","sources":["../../../src/validations/access-checker/scenes.ts"],"names":[],"mappings":";;;;;;AACA,4CAAmB;AACnB,uCAAmE;AAgCnE;;;GAGG;AACU,QAAA,MAAM,GAAe;IAChC,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QACxD,MAAM,iBAAiB,GAAG,KAAK,EAC7B,KAAiB,EACjB,QAAoB,EACpB,SAAoB,EACM,EAAE;YAC5B,MAAM,KAAK,GAAG;;;;;;;;;;;;;;cAcN,CAAA;YAER,MAAM,SAAS,GAAG;gBAChB,KAAK;gBACL,QAAQ;gBACR,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,oBAAoB;aAC7D,CAAA;YAED,IAAI;gBACF,OAAO,CACL,MAAM,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"scenes.js","sourceRoot":"","sources":["../../../src/validations/access-checker/scenes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,3 @@
|
|
|
1
1
|
import { Validation } from '../../types';
|
|
2
|
-
export declare const MERKLE_PROOF_REQUIRED_KEYS: readonly ["id", "name", "description", "i18n", "image", "thumbnail", "data", "content"];
|
|
3
|
-
export declare type WearableCollection = {
|
|
4
|
-
creator: string;
|
|
5
|
-
managers: string[];
|
|
6
|
-
isApproved: boolean;
|
|
7
|
-
isCompleted: boolean;
|
|
8
|
-
items: WearableCollectionItem[];
|
|
9
|
-
};
|
|
10
|
-
declare type WearableCollectionItem = {
|
|
11
|
-
managers: string[];
|
|
12
|
-
contentHash: string;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Given the pointers (URNs), determine which layer should be used to check the access.
|
|
16
|
-
* Checks if the ethereum address has access to the collection.
|
|
17
|
-
* @public
|
|
18
|
-
*/
|
|
19
2
|
export declare const wearables: Validation;
|
|
20
|
-
export {};
|
|
21
3
|
//# sourceMappingURL=wearables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wearables.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wearables.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,UAAU,EAAE,MAAM,aAAa,CAAA;AAGpE,eAAO,MAAM,SAAS,EAAE,UAYvB,CAAA"}
|
|
@@ -1,314 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.wearables =
|
|
4
|
-
const
|
|
5
|
-
const hashing_1 = require("@dcl/hashing");
|
|
6
|
-
const schemas_1 = require("@dcl/schemas");
|
|
7
|
-
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
8
|
-
const types_1 = require("../../types");
|
|
9
|
-
const L1_NETWORKS = ['mainnet', 'ropsten', 'kovan', 'rinkeby', 'goerli'];
|
|
10
|
-
const L2_NETWORKS = ['matic', 'mumbai'];
|
|
11
|
-
// These keys are required by the protocol to be a subset and present in the merkle proof hashing keys.
|
|
12
|
-
// Note: deletions would not be a problem, but in case of adding a key here,
|
|
13
|
-
// you MUST review the validation in order to not break the sync between catalysts (aka failed deployments)
|
|
14
|
-
exports.MERKLE_PROOF_REQUIRED_KEYS = [
|
|
15
|
-
'id',
|
|
16
|
-
'name',
|
|
17
|
-
'description',
|
|
18
|
-
'i18n',
|
|
19
|
-
'image',
|
|
20
|
-
'thumbnail',
|
|
21
|
-
'data',
|
|
22
|
-
'content'
|
|
23
|
-
];
|
|
24
|
-
const validUrnTypes = [
|
|
25
|
-
'off-chain',
|
|
26
|
-
'blockchain-collection-v1-asset',
|
|
27
|
-
'blockchain-collection-v2-asset',
|
|
28
|
-
'blockchain-collection-third-party'
|
|
29
|
-
];
|
|
30
|
-
const alreadySeen = (resolvedPointers, parsed) => {
|
|
31
|
-
return resolvedPointers.some((alreadyResolved) => resolveSameUrn(alreadyResolved, parsed));
|
|
32
|
-
};
|
|
33
|
-
const resolveSameUrn = (alreadyParsed, parsed) => {
|
|
34
|
-
const alreadyParsedCopy = Object.assign({}, alreadyParsed);
|
|
35
|
-
const parsedCopy = Object.assign({}, parsed);
|
|
36
|
-
alreadyParsedCopy.uri = new URL('urn:same');
|
|
37
|
-
parsedCopy.uri = new URL('urn:same');
|
|
38
|
-
return JSON.stringify(alreadyParsedCopy) == JSON.stringify(parsedCopy);
|
|
39
|
-
};
|
|
40
|
-
const parseUrnNoFail = async (urn) => {
|
|
41
|
-
try {
|
|
42
|
-
const parsed = await (0, urn_resolver_1.parseUrn)(urn);
|
|
43
|
-
if (parsed?.type === 'blockchain-collection-v1-asset') {
|
|
44
|
-
return parsed;
|
|
45
|
-
}
|
|
46
|
-
if (parsed?.type === 'blockchain-collection-v2-asset') {
|
|
47
|
-
return parsed;
|
|
48
|
-
}
|
|
49
|
-
if (parsed?.type === 'off-chain') {
|
|
50
|
-
return parsed;
|
|
51
|
-
}
|
|
52
|
-
if (parsed?.type === 'blockchain-collection-third-party') {
|
|
53
|
-
return parsed;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch { }
|
|
57
|
-
return null;
|
|
58
|
-
};
|
|
59
|
-
const toHexBuffer = (value) => {
|
|
60
|
-
if (value.startsWith('0x')) {
|
|
61
|
-
return Buffer.from(value.substring(2), 'hex'); // removing first 2 characters (0x)
|
|
62
|
-
}
|
|
63
|
-
return Buffer.from(value, 'hex');
|
|
64
|
-
};
|
|
65
|
-
const getThirdPartyId = (urn) => `urn:decentraland:${urn.network}:collections-thirdparty:${urn.thirdPartyName}`;
|
|
66
|
-
/**
|
|
67
|
-
* Given the pointers (URNs), determine which layer should be used to check the access.
|
|
68
|
-
* Checks if the ethereum address has access to the collection.
|
|
69
|
-
* @public
|
|
70
|
-
*/
|
|
3
|
+
exports.wearables = void 0;
|
|
4
|
+
const items_1 = require("./items/items");
|
|
71
5
|
exports.wearables = {
|
|
72
|
-
validate: async (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!!permissions.contentHash) {
|
|
80
|
-
const deployedByCommittee = permissions.committee.includes(ethAddressLowercase);
|
|
81
|
-
const calculateHashes = () => {
|
|
82
|
-
// Compare both by key and hash
|
|
83
|
-
const compare = (a, b) => {
|
|
84
|
-
if (a.hash > b.hash)
|
|
85
|
-
return 1;
|
|
86
|
-
else if (a.hash < b.hash)
|
|
87
|
-
return -1;
|
|
88
|
-
else
|
|
89
|
-
return a.key > b.key ? 1 : -1;
|
|
90
|
-
};
|
|
91
|
-
const contentAsJson = (content ?? []).map(({ file, hash }) => ({ key: file, hash })).sort(compare);
|
|
92
|
-
const buffer = Buffer.from(JSON.stringify({ content: contentAsJson, metadata }));
|
|
93
|
-
return Promise.all([(0, hashing_1.hashV0)(buffer), (0, hashing_1.hashV1)(buffer)]);
|
|
94
|
-
};
|
|
95
|
-
return deployedByCommittee && (await calculateHashes()).includes(permissions.contentHash);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
const addressHasAccess = (permissions.collectionCreator && permissions.collectionCreator === ethAddressLowercase) ||
|
|
99
|
-
(permissions.collectionManagers && permissions.collectionManagers.includes(ethAddressLowercase)) ||
|
|
100
|
-
(permissions.itemManagers && permissions.itemManagers.includes(ethAddressLowercase));
|
|
101
|
-
// Deployments to the content server are made after the collection is completed, so that the committee can then approve it.
|
|
102
|
-
// That's why isCompleted must be true, but isApproved must be false. After the committee approves the wearable, there can't be any more changes
|
|
103
|
-
const isCollectionValid = !permissions.isApproved && permissions.isCompleted;
|
|
104
|
-
return addressHasAccess && isCollectionValid;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
logger.error(`Error checking permission for (${collection}-${itemId}) at block ${block}`);
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
const getCollectionItems = async (subgraphUrl, collection, itemId, block) => {
|
|
113
|
-
const query = `
|
|
114
|
-
query getCollectionRoles($collection: String!, $itemId: String!, $block: Int!) {
|
|
115
|
-
collections(where:{ id: $collection }, block: { number: $block }) {
|
|
116
|
-
creator
|
|
117
|
-
managers
|
|
118
|
-
isApproved
|
|
119
|
-
isCompleted
|
|
120
|
-
items(where:{ id: $itemId }) {
|
|
121
|
-
managers
|
|
122
|
-
contentHash
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
accounts(where:{ isCommitteeMember: true }, block: { number: $block }) {
|
|
127
|
-
id
|
|
128
|
-
}
|
|
129
|
-
}`;
|
|
130
|
-
const result = await externalCalls.queryGraph(subgraphUrl, query, {
|
|
131
|
-
collection,
|
|
132
|
-
itemId: `${collection}-${itemId}`,
|
|
133
|
-
block
|
|
134
|
-
});
|
|
135
|
-
const collectionResult = result.collections[0];
|
|
136
|
-
const itemResult = collectionResult?.items[0];
|
|
137
|
-
return {
|
|
138
|
-
collectionCreator: collectionResult?.creator,
|
|
139
|
-
collectionManagers: collectionResult?.managers,
|
|
140
|
-
isApproved: collectionResult?.isApproved,
|
|
141
|
-
isCompleted: collectionResult?.isCompleted,
|
|
142
|
-
itemManagers: itemResult?.managers,
|
|
143
|
-
contentHash: itemResult?.contentHash,
|
|
144
|
-
committee: result.accounts.map(({ id }) => id.toLowerCase())
|
|
145
|
-
};
|
|
146
|
-
};
|
|
147
|
-
const checkCollectionAccess = async (blocksSubgraphUrl, collectionsSubgraphUrl, collection, itemId, entity) => {
|
|
148
|
-
const { timestamp } = entity;
|
|
149
|
-
try {
|
|
150
|
-
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await theGraphClient.findBlocksForTimestamp(blocksSubgraphUrl, timestamp);
|
|
151
|
-
// It could happen that the subgraph hasn't synced yet, so someone who just lost access still managed to make a deployment. The problem would be that when other catalysts perform
|
|
152
|
-
// the same check, the subgraph might have synced and the deployment is no longer valid. So, in order to prevent inconsistencies between catalysts, we will allow all deployments that
|
|
153
|
-
// have access now, or had access 5 minutes ago.
|
|
154
|
-
const hasPermissionOnBlock = async (blockNumber) => !!blockNumber && (await hasPermission(collectionsSubgraphUrl, collection, itemId, blockNumber, entity));
|
|
155
|
-
return ((await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
156
|
-
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment)));
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
logger.error(`Error checking wearable access (${collection}, ${itemId}, ${entity.ethAddress}, ${timestamp}, ${blocksSubgraphUrl}).`);
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
const getMerkleRoot = async ({ block, thirdPartyId }) => {
|
|
164
|
-
const query = `
|
|
165
|
-
query MerkleRoot($id: String!, $block: Int!) {
|
|
166
|
-
thirdParties(where: { id: $id, isApproved: true }, block: { number: $block }, first: 1) {
|
|
167
|
-
root
|
|
168
|
-
}
|
|
169
|
-
}`;
|
|
170
|
-
const result = await externalCalls.queryGraph(externalCalls.subgraphs.L2.thirdPartyRegistry, query, {
|
|
171
|
-
id: thirdPartyId,
|
|
172
|
-
block
|
|
173
|
-
});
|
|
174
|
-
if (!result.thirdParties || result.thirdParties.length < 1)
|
|
175
|
-
return;
|
|
176
|
-
return result.thirdParties[0]?.root;
|
|
177
|
-
};
|
|
178
|
-
const verifyHash = async (metadata, merkleRoot) => {
|
|
179
|
-
// Validate merkle proof data is valid
|
|
180
|
-
if (!schemas_1.MerkleProof.validate(metadata.merkleProof)) {
|
|
181
|
-
logger.debug('Merkle proof is not valid', {
|
|
182
|
-
merkleProof: metadata.merkleProof
|
|
183
|
-
});
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
const merkleProof = metadata.merkleProof;
|
|
187
|
-
// The keys used to create the hash MUST be present if they're required.
|
|
188
|
-
if (!exports.MERKLE_PROOF_REQUIRED_KEYS.every((key) => merkleProof.hashingKeys.includes(key))) {
|
|
189
|
-
logger.debug(`Merkle proof hashing keys don't satisfy the required keys`, {
|
|
190
|
-
requiredKeys: JSON.stringify(exports.MERKLE_PROOF_REQUIRED_KEYS),
|
|
191
|
-
hashingKeys: JSON.stringify(merkleProof.hashingKeys)
|
|
192
|
-
});
|
|
193
|
-
return false;
|
|
194
|
-
}
|
|
195
|
-
const generatedCrcHash = (0, hashing_1.keccak256Hash)(metadata, metadata.merkleProof.hashingKeys);
|
|
196
|
-
// The hash provided in the merkleProof for the entity MUST match the hash generated by the validator.
|
|
197
|
-
if (metadata.merkleProof.entityHash !== generatedCrcHash) {
|
|
198
|
-
logger.debug(`The hash provided in the merkleProof doesn't match with the generated by the validator`, {
|
|
199
|
-
generatedCrcHash,
|
|
200
|
-
entityHash: metadata.merkleProof.entityHash
|
|
201
|
-
});
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
// Verify if the entity belongs to the Merkle Tree.
|
|
205
|
-
const bufferedProofs = merkleProof.proof.map((value) => toHexBuffer(value));
|
|
206
|
-
const bufferedMerkleRoot = toHexBuffer(merkleRoot);
|
|
207
|
-
return (0, content_hash_tree_1.verifyProof)(merkleProof.index, merkleProof.entityHash, bufferedProofs, bufferedMerkleRoot);
|
|
208
|
-
};
|
|
209
|
-
/**
|
|
210
|
-
* Verifies Third Party Wearable access by doing a Merkle Tree based verification, where the merkle root is stored in the blockchain
|
|
211
|
-
* and the proofs come in the wearable metadata.
|
|
212
|
-
* It also does a CRC using the metadata and some hashing keys:
|
|
213
|
-
* - Hashing keys must contain all required keys defined in MERKLE_PROOF_REQUIRED_KEYS
|
|
214
|
-
*
|
|
215
|
-
* This checks are verified using blocks in a 5 minutes window from the deployment timestamp
|
|
216
|
-
*/
|
|
217
|
-
const verifyMerkleProofedEntity = async (urn) => {
|
|
218
|
-
// do merkle proofed entity validation, required keys are defined by the Catalyst and must be a subset of the hashingKeys from the MerkleProof to succeed
|
|
219
|
-
const metadata = deployment.entity.metadata;
|
|
220
|
-
const thirdPartyId = getThirdPartyId(urn);
|
|
221
|
-
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await theGraphClient.findBlocksForTimestamp('maticBlocksSubgraph', deployment.entity.timestamp);
|
|
222
|
-
const merkleRoots = [];
|
|
223
|
-
const hasPermissionOnBlock = async (blockNumber) => {
|
|
224
|
-
try {
|
|
225
|
-
if (!blockNumber)
|
|
226
|
-
return false;
|
|
227
|
-
const merkleRoot = await getMerkleRoot({
|
|
228
|
-
block: blockNumber,
|
|
229
|
-
thirdPartyId
|
|
230
|
-
});
|
|
231
|
-
if (!merkleRoot) {
|
|
232
|
-
logger.debug(`Merkle proof not found for given block and third party ID`, { blockNumber, thirdPartyId });
|
|
233
|
-
return false;
|
|
234
|
-
}
|
|
235
|
-
merkleRoots.push(merkleRoot);
|
|
236
|
-
return await verifyHash(metadata, merkleRoot);
|
|
237
|
-
}
|
|
238
|
-
catch (e) {
|
|
239
|
-
const error = e?.message;
|
|
240
|
-
logger.debug(error);
|
|
241
|
-
return false;
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
const validMerkleProofedEntity = (await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
245
|
-
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment));
|
|
246
|
-
if (!validMerkleProofedEntity) {
|
|
247
|
-
logger.debug(`Merkle Tree based verifications failed:`, {
|
|
248
|
-
merkleProof: JSON.stringify(metadata.merkleProof),
|
|
249
|
-
merkleRoots: JSON.stringify(merkleRoots),
|
|
250
|
-
blocks: JSON.stringify([blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment])
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
return validMerkleProofedEntity;
|
|
254
|
-
};
|
|
255
|
-
const { pointers } = deployment.entity;
|
|
256
|
-
const ethAddress = externalCalls.ownerAddress(deployment.auditInfo);
|
|
257
|
-
const resolvedPointers = [];
|
|
258
|
-
// deduplicate pointer resolution
|
|
259
|
-
for (const pointer of pointers) {
|
|
260
|
-
const parsed = await parseUrnNoFail(pointer);
|
|
261
|
-
if (!parsed)
|
|
262
|
-
return (0, types_1.validationFailed)(`Wearable pointers should be a urn, for example (urn:decentraland:{protocol}:collections-v2:{contract(0x[a-fA-F0-9]+)}:{name}). Invalid pointer: (${pointer})`);
|
|
263
|
-
if (!alreadySeen(resolvedPointers, parsed))
|
|
264
|
-
resolvedPointers.push(parsed);
|
|
265
|
-
}
|
|
266
|
-
if (resolvedPointers.length > 1)
|
|
267
|
-
return (0, types_1.validationFailed)(`Only one pointer is allowed when you create a Wearable. Received: ${pointers}`);
|
|
268
|
-
const parsed = resolvedPointers[0];
|
|
269
|
-
if (!validUrnTypes.includes(parsed.type)) {
|
|
270
|
-
return (0, types_1.validationFailed)(`Could not resolve the contractAddress of the urn ${parsed}`);
|
|
271
|
-
}
|
|
272
|
-
if (parsed.type === 'off-chain') {
|
|
273
|
-
// Validate Off Chain Asset
|
|
274
|
-
if (!externalCalls.isAddressOwnedByDecentraland(ethAddress))
|
|
275
|
-
return (0, types_1.validationFailed)(`The provided Eth Address '${ethAddress}' does not have access to the following wearable: '${parsed.uri}'`);
|
|
276
|
-
}
|
|
277
|
-
else if (parsed?.type === 'blockchain-collection-v1-asset' || parsed?.type === 'blockchain-collection-v2-asset') {
|
|
278
|
-
// L1 or L2 so contractAddress is present
|
|
279
|
-
const collection = parsed.contractAddress;
|
|
280
|
-
const network = parsed.network;
|
|
281
|
-
const isL1 = L1_NETWORKS.includes(network);
|
|
282
|
-
const isL2 = L2_NETWORKS.includes(network);
|
|
283
|
-
if (!isL1 && !isL2)
|
|
284
|
-
return (0, types_1.validationFailed)(`Found an unknown network on the urn '${network}'`);
|
|
285
|
-
const blocksSubgraphUrl = isL1 ? 'blocksSubgraph' : 'maticBlocksSubgraph';
|
|
286
|
-
const collectionsSubgraphUrl = isL1
|
|
287
|
-
? externalCalls.subgraphs.L1.collections
|
|
288
|
-
: externalCalls.subgraphs.L2.collections;
|
|
289
|
-
const hasAccess = await checkCollectionAccess(blocksSubgraphUrl, collectionsSubgraphUrl, collection, parsed.id, {
|
|
290
|
-
...deployment.entity,
|
|
291
|
-
ethAddress
|
|
292
|
-
});
|
|
293
|
-
if (!hasAccess) {
|
|
294
|
-
if (isL2)
|
|
295
|
-
return (0, types_1.validationFailed)(`The provided Eth Address does not have access to the following wearable: (${parsed.contractAddress}, ${parsed.id})`);
|
|
296
|
-
// Some L1 collections are deployed by Decentraland Address
|
|
297
|
-
// Maybe this is not necessary as we already know that it's a 'blockchain-collection-v1-asset'
|
|
298
|
-
const isAllowlistedCollection = parsed.uri.toString().startsWith('urn:decentraland:ethereum:collections-v1');
|
|
299
|
-
if (!externalCalls.isAddressOwnedByDecentraland(ethAddress) || !isAllowlistedCollection) {
|
|
300
|
-
return (0, types_1.validationFailed)(`The provided Eth Address '${ethAddress}' does not have access to the following wearable: '${parsed.uri}'`);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
else if (parsed?.type === 'blockchain-collection-third-party') {
|
|
305
|
-
// Third Party wearables are validated doing merkle tree based verification proof
|
|
306
|
-
const verified = await verifyMerkleProofedEntity(parsed);
|
|
307
|
-
if (!verified) {
|
|
308
|
-
return (0, types_1.validationFailed)(`Couldn't verify merkle proofed entity`);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return types_1.OK;
|
|
6
|
+
validate: async (components, deployment) => {
|
|
7
|
+
return items_1.itemsValidation.validate(components, deployment, [
|
|
8
|
+
'off-chain',
|
|
9
|
+
'blockchain-collection-v1-asset',
|
|
10
|
+
'blockchain-collection-v2-asset',
|
|
11
|
+
'blockchain-collection-third-party'
|
|
12
|
+
]);
|
|
312
13
|
}
|
|
313
14
|
};
|
|
314
15
|
//# sourceMappingURL=wearables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wearables.js","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wearables.js","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":";;;AACA,yCAA+C;AAElC,QAAA,SAAS,GAAe;IACnC,QAAQ,EAAE,KAAK,EACb,UAAyF,EACzF,UAAU,EACV,EAAE;QACF,OAAO,uBAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE;YACtD,WAAW;YACX,gCAAgC;YAChC,gCAAgC;YAChC,mCAAmC;SACpC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { Validation } from '../types';
|
|
2
|
+
export declare const allHashesWereUploadedOrStored: Validation;
|
|
3
|
+
export declare const allHashesInUploadedFilesAreReportedInTheEntity: Validation;
|
|
4
|
+
export declare const allContentFilesCorrespondToAtLeastOneAvatarSnapshotAfterADR45: Validation;
|
|
2
5
|
/**
|
|
3
6
|
* Validate that uploaded and reported hashes are corrects and files corresponds to snapshots
|
|
4
7
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAA;AAYjD,eAAO,MAAM,6BAA6B,EAAE,UAkB3C,CAAA;AAED,eAAO,MAAM,8CAA8C,EAAE,UAa5D,CAAA;AAED,eAAO,MAAM,6DAA6D,EAAE,UAgB1E,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,UAIrB,CAAA"}
|