@xyo-network/crypto-nft-collection-diviner-score-plugin 2.70.12 → 2.70.13
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/cjs/lib/rating/analyzeNftCollection.js.map +1 -1
- package/dist/cjs/lib/rating/criteria/index.js +2 -34
- package/dist/cjs/lib/rating/criteria/index.js.map +1 -1
- package/dist/cjs/lib/rating/criteria/scoring/index.js +6 -0
- package/dist/cjs/lib/rating/criteria/scoring/index.js.map +1 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/index.js +5 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/index.js.map +1 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/metadata.js +11 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/metadata.js.map +1 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.js +20 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.js.map +1 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.js +16 -0
- package/dist/cjs/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.js.map +1 -0
- package/dist/cjs/lib/rating/criteria/scoring/total.js +36 -0
- package/dist/cjs/lib/rating/criteria/scoring/total.js.map +1 -0
- package/dist/docs.json +161 -23
- package/dist/esm/lib/rating/analyzeNftCollection.js.map +1 -1
- package/dist/esm/lib/rating/criteria/index.js +3 -31
- package/dist/esm/lib/rating/criteria/index.js.map +1 -1
- package/dist/esm/lib/rating/criteria/scoring/index.js +3 -0
- package/dist/esm/lib/rating/criteria/scoring/index.js.map +1 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/index.js +2 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/index.js.map +1 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/metadata.js +10 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/metadata.js.map +1 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.js +16 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.js.map +1 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.js +12 -0
- package/dist/esm/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.js.map +1 -0
- package/dist/esm/lib/rating/criteria/scoring/total.js +32 -0
- package/dist/esm/lib/rating/criteria/scoring/total.js.map +1 -0
- package/dist/types/lib/rating/analyzeNftCollection.d.ts +2 -2
- package/dist/types/lib/rating/analyzeNftCollection.d.ts.map +1 -1
- package/dist/types/lib/rating/criteria/index.d.ts +3 -6
- package/dist/types/lib/rating/criteria/index.d.ts.map +1 -1
- package/dist/types/lib/rating/criteria/scoring/index.d.ts +3 -0
- package/dist/types/lib/rating/criteria/scoring/index.d.ts.map +1 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/index.d.ts +2 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/index.d.ts.map +1 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/metadata.d.ts +9 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/metadata.d.ts.map +1 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.d.ts +4 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.d.ts.map +1 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.d.ts +4 -0
- package/dist/types/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.d.ts.map +1 -0
- package/dist/types/lib/rating/criteria/scoring/total.d.ts +4 -0
- package/dist/types/lib/rating/criteria/scoring/total.d.ts.map +1 -0
- package/package.json +10 -10
- package/src/lib/rating/analyzeNftCollection.ts +2 -2
- package/src/lib/rating/criteria/index.ts +6 -36
- package/src/lib/rating/criteria/scoring/index.ts +2 -0
- package/src/lib/rating/criteria/scoring/metadata/index.ts +1 -0
- package/src/lib/rating/criteria/scoring/metadata/metadata.ts +14 -0
- package/src/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.ts +18 -0
- package/src/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.ts +14 -0
- package/src/lib/rating/criteria/scoring/total.ts +36 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeNftCollection.js","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":";;;;AAGA,yCAA4C;AAQrC,MAAM,oBAAoB,GAAG;AAClC;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"analyzeNftCollection.js","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":";;;;AAGA,yCAA4C;AAQrC,MAAM,oBAAoB,GAAG;AAClC;;GAEG;AACH,GAA6B,EACG,EAAE;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC,GAAG,CAAC,CAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAU,CAAA;QACzD,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAU,CAAA;IACjC,CAAC,CAAA,CAAC,CACH,CACuB,CAAA;IAC1B,OAAO,MAAM,CAAA;AACf,CAAC,CAAA,CAAA;AAhBY,QAAA,oBAAoB,wBAgBhC"}
|
|
@@ -1,38 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.scoringCriteria = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const defaultMu = Math.log(median);
|
|
7
|
-
const defaultSigma = 2;
|
|
8
|
-
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
9
|
-
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2));
|
|
10
|
-
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
11
|
-
/**
|
|
12
|
-
* Calculates the log-normal probability density
|
|
13
|
-
* @param x the value at which you want to calculate the probability density
|
|
14
|
-
* @param mu mean of the associated normal distribution
|
|
15
|
-
* @param sigma standard deviation of the associated normal distribution
|
|
16
|
-
* @returns
|
|
17
|
-
*/
|
|
18
|
-
const logNormalProbabilityDensity = (x, mu = defaultMu, sigma = defaultSigma) => {
|
|
19
|
-
if (x <= 0)
|
|
20
|
-
return 0;
|
|
21
|
-
const logX = Math.log(x);
|
|
22
|
-
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2));
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* For a lognormal distribution, the peak of the distribution is the mode
|
|
26
|
-
*/
|
|
27
|
-
const maxProbabilityDensity = logNormalProbabilityDensity(mode);
|
|
28
|
-
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
29
|
-
const scoreTotal = (nft) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
-
const density = logNormalProbabilityDensity(nft.total);
|
|
31
|
-
const normalized = density / maxProbabilityDensity;
|
|
32
|
-
const score = Math.min(Math.floor(normalized * 100), 100);
|
|
33
|
-
return yield Promise.resolve([score, 100]);
|
|
34
|
-
});
|
|
35
|
-
exports.scoringCriteria = {
|
|
36
|
-
total: { score: scoreTotal, weight: 1 },
|
|
37
|
-
};
|
|
4
|
+
const scoring_1 = require("./scoring");
|
|
5
|
+
exports.scoringCriteria = Object.assign(Object.assign({}, scoring_1.scoreMetadata), { Total: { score: scoring_1.scoreTotal, weight: 1 } });
|
|
38
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":";;;AAGA,uCAAqD;AAExC,QAAA,eAAe,mCACvB,uBAAa,KAChB,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAU,EAAE,MAAM,EAAE,CAAC,EAAE,IACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B;AAC1B,kDAAuB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/index.ts"],"names":[],"mappings":";;;AAAA,qDAA0B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scoreMetadata = exports.attributeScoringCriteria = void 0;
|
|
4
|
+
const scoreIndividualAttributes_1 = require("./scoreIndividualAttributes");
|
|
5
|
+
const scoreTotalAttributes_1 = require("./scoreTotalAttributes");
|
|
6
|
+
exports.attributeScoringCriteria = {
|
|
7
|
+
'Metadata Attributes Individual': { score: scoreIndividualAttributes_1.scoreIndividualAttributes, weight: 2 },
|
|
8
|
+
'Metadata Attributes Total': { score: scoreTotalAttributes_1.scoreTotalAttributes, weight: 2 },
|
|
9
|
+
};
|
|
10
|
+
exports.scoreMetadata = Object.assign({}, exports.attributeScoringCriteria);
|
|
11
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/metadata.ts"],"names":[],"mappings":";;;AAGA,2EAAuE;AACvE,iEAA6D;AAEhD,QAAA,wBAAwB,GAAyE;IAC5G,gCAAgC,EAAE,EAAE,KAAK,EAAE,qDAAyB,EAAE,MAAM,EAAE,CAAC,EAAE;IACjF,2BAA2B,EAAE,EAAE,KAAK,EAAE,2CAAoB,EAAE,MAAM,EAAE,CAAC,EAAE;CACxE,CAAA;AAEY,QAAA,aAAa,qBACrB,gCAAwB,EAC5B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scoreIndividualAttributes = void 0;
|
|
4
|
+
const crypto_nft_score_model_1 = require("@xyo-network/crypto-nft-score-model");
|
|
5
|
+
const maxScore = 10;
|
|
6
|
+
const scoreIndividualAttributes = (info) => {
|
|
7
|
+
const { attributes } = info.metrics.metadata;
|
|
8
|
+
const scores = Object.entries(attributes)
|
|
9
|
+
.map(([_trait, { values }]) => {
|
|
10
|
+
return Object.entries(values).map(([_traitValue, metrics]) => {
|
|
11
|
+
const rarity = Math.min(Math.round((1 - metrics.binomial.p) * maxScore), maxScore);
|
|
12
|
+
return [rarity, maxScore];
|
|
13
|
+
});
|
|
14
|
+
})
|
|
15
|
+
.flat();
|
|
16
|
+
const total = scores.reduce(([a, b], [c, d]) => [a + c, b + d], [0, 0]);
|
|
17
|
+
return (0, crypto_nft_score_model_1.normalize)(total, maxScore);
|
|
18
|
+
};
|
|
19
|
+
exports.scoreIndividualAttributes = scoreIndividualAttributes;
|
|
20
|
+
//# sourceMappingURL=scoreIndividualAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreIndividualAttributes.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.ts"],"names":[],"mappings":";;;AACA,gFAAsE;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEZ,MAAM,yBAAyB,GAAG,CAAC,IAAmC,EAAS,EAAE;IACtF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAQ,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;YAClF,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC;SACD,IAAI,EAAE,CAAA;IACT,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,OAAO,IAAA,kCAAS,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA;AAZY,QAAA,yBAAyB,6BAYrC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scoreTotalAttributes = void 0;
|
|
4
|
+
const crypto_nft_score_model_1 = require("@xyo-network/crypto-nft-score-model");
|
|
5
|
+
const maxScore = 10;
|
|
6
|
+
const scoreTotalAttributes = (info) => {
|
|
7
|
+
const { attributes } = info.metrics.metadata;
|
|
8
|
+
const scores = Object.entries(attributes).map(([_trait, { metrics }]) => {
|
|
9
|
+
const rarity = Math.floor((1 - metrics.binomial.p) * 100);
|
|
10
|
+
return [rarity, 100];
|
|
11
|
+
});
|
|
12
|
+
const total = scores.reduce(([a, b], [c, d]) => [a + c, b + d], [0, 0]);
|
|
13
|
+
return (0, crypto_nft_score_model_1.normalize)(total, maxScore);
|
|
14
|
+
};
|
|
15
|
+
exports.scoreTotalAttributes = scoreTotalAttributes;
|
|
16
|
+
//# sourceMappingURL=scoreTotalAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreTotalAttributes.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.ts"],"names":[],"mappings":";;;AACA,gFAAsE;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEZ,MAAM,oBAAoB,GAAG,CAAC,IAAmC,EAAS,EAAE;IACjF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;QACzD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,OAAO,IAAA,kCAAS,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA;AARY,QAAA,oBAAoB,wBAQhC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scoreTotal = void 0;
|
|
4
|
+
const crypto_nft_score_model_1 = require("@xyo-network/crypto-nft-score-model");
|
|
5
|
+
const median = 100000;
|
|
6
|
+
const defaultMu = Math.log(median);
|
|
7
|
+
const defaultSigma = 2;
|
|
8
|
+
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
9
|
+
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2));
|
|
10
|
+
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
11
|
+
/**
|
|
12
|
+
* Calculates the log-normal probability density
|
|
13
|
+
* @param x the value at which you want to calculate the probability density
|
|
14
|
+
* @param mu mean of the associated normal distribution
|
|
15
|
+
* @param sigma standard deviation of the associated normal distribution
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
const logNormalProbabilityDensity = (x, mu = defaultMu, sigma = defaultSigma) => {
|
|
19
|
+
if (x <= 0)
|
|
20
|
+
return 0;
|
|
21
|
+
const logX = Math.log(x);
|
|
22
|
+
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2));
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* For a lognormal distribution, the peak of the distribution is the mode
|
|
26
|
+
*/
|
|
27
|
+
const maxProbabilityDensity = logNormalProbabilityDensity(mode);
|
|
28
|
+
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
29
|
+
const maxScore = 10;
|
|
30
|
+
const scoreTotal = (nft) => {
|
|
31
|
+
const density = logNormalProbabilityDensity(nft.total);
|
|
32
|
+
const score = [density, maxProbabilityDensity];
|
|
33
|
+
return (0, crypto_nft_score_model_1.normalize)(score, maxScore);
|
|
34
|
+
};
|
|
35
|
+
exports.scoreTotal = scoreTotal;
|
|
36
|
+
//# sourceMappingURL=total.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"total.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/total.ts"],"names":[],"mappings":";;;AACA,gFAAsE;AAEtE,MAAM,MAAM,GAAG,MAAM,CAAA;AACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAClC,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,mEAAmE;AACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AAC5D,+DAA+D;AAE/D;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,CAAS,EAAE,KAAa,SAAS,EAAE,QAAgB,YAAY,EAAU,EAAE;IAC9G,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AACvG,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAA;AAC/D,oEAAoE;AAEpE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEZ,MAAM,UAAU,GAAG,CAAC,GAAsB,EAAS,EAAE;IAC1D,MAAM,OAAO,GAAG,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtD,MAAM,KAAK,GAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IACrD,OAAO,IAAA,kCAAS,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA;AAJY,QAAA,UAAU,cAItB"}
|
package/dist/docs.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"flags": {},
|
|
7
7
|
"children": [
|
|
8
8
|
{
|
|
9
|
-
"id":
|
|
9
|
+
"id": 593,
|
|
10
10
|
"name": "default",
|
|
11
11
|
"variant": "reference",
|
|
12
12
|
"kind": 8388608,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/index.ts",
|
|
17
17
|
"line": 9,
|
|
18
18
|
"character": 0,
|
|
19
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
19
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/index.ts#L9"
|
|
20
20
|
}
|
|
21
21
|
],
|
|
22
22
|
"target": 1
|
|
@@ -3966,7 +3966,7 @@
|
|
|
3966
3966
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
3967
3967
|
"line": 27,
|
|
3968
3968
|
"character": 18,
|
|
3969
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
3969
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L27"
|
|
3970
3970
|
}
|
|
3971
3971
|
],
|
|
3972
3972
|
"type": {
|
|
@@ -7567,7 +7567,7 @@
|
|
|
7567
7567
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
7568
7568
|
"line": 29,
|
|
7569
7569
|
"character": 21,
|
|
7570
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
7570
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L29"
|
|
7571
7571
|
}
|
|
7572
7572
|
],
|
|
7573
7573
|
"signatures": [
|
|
@@ -7582,7 +7582,7 @@
|
|
|
7582
7582
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
7583
7583
|
"line": 29,
|
|
7584
7584
|
"character": 37,
|
|
7585
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
7585
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L29"
|
|
7586
7586
|
}
|
|
7587
7587
|
],
|
|
7588
7588
|
"parameters": [
|
|
@@ -16213,7 +16213,7 @@
|
|
|
16213
16213
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
16214
16214
|
"line": 24,
|
|
16215
16215
|
"character": 13,
|
|
16216
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16216
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L24"
|
|
16217
16217
|
}
|
|
16218
16218
|
],
|
|
16219
16219
|
"typeParameters": [
|
|
@@ -16268,7 +16268,7 @@
|
|
|
16268
16268
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts",
|
|
16269
16269
|
"line": 8,
|
|
16270
16270
|
"character": 12,
|
|
16271
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16271
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts#L8"
|
|
16272
16272
|
}
|
|
16273
16273
|
],
|
|
16274
16274
|
"type": {
|
|
@@ -16302,7 +16302,7 @@
|
|
|
16302
16302
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
16303
16303
|
"line": 16,
|
|
16304
16304
|
"character": 12,
|
|
16305
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16305
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L16"
|
|
16306
16306
|
}
|
|
16307
16307
|
],
|
|
16308
16308
|
"type": {
|
|
@@ -16348,7 +16348,7 @@
|
|
|
16348
16348
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts",
|
|
16349
16349
|
"line": 6,
|
|
16350
16350
|
"character": 12,
|
|
16351
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16351
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts#L6"
|
|
16352
16352
|
}
|
|
16353
16353
|
],
|
|
16354
16354
|
"type": {
|
|
@@ -16393,7 +16393,7 @@
|
|
|
16393
16393
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Plugin.ts",
|
|
16394
16394
|
"line": 7,
|
|
16395
16395
|
"character": 13,
|
|
16396
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16396
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Plugin.ts#L7"
|
|
16397
16397
|
}
|
|
16398
16398
|
],
|
|
16399
16399
|
"signatures": [
|
|
@@ -16408,7 +16408,7 @@
|
|
|
16408
16408
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Plugin.ts",
|
|
16409
16409
|
"line": 7,
|
|
16410
16410
|
"character": 47,
|
|
16411
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
16411
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Plugin.ts#L7"
|
|
16412
16412
|
}
|
|
16413
16413
|
],
|
|
16414
16414
|
"type": {
|
|
@@ -17983,7 +17983,7 @@
|
|
|
17983
17983
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts",
|
|
17984
17984
|
"line": 12,
|
|
17985
17985
|
"character": 13,
|
|
17986
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
17986
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts#L12"
|
|
17987
17987
|
}
|
|
17988
17988
|
],
|
|
17989
17989
|
"signatures": [
|
|
@@ -17998,7 +17998,7 @@
|
|
|
17998
17998
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts",
|
|
17999
17999
|
"line": 12,
|
|
18000
18000
|
"character": 36,
|
|
18001
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
18001
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/lib/rating/analyzeNftCollection.ts#L12"
|
|
18002
18002
|
}
|
|
18003
18003
|
],
|
|
18004
18004
|
"parameters": [
|
|
@@ -18017,13 +18017,135 @@
|
|
|
18017
18017
|
]
|
|
18018
18018
|
},
|
|
18019
18019
|
"type": {
|
|
18020
|
-
"type": "
|
|
18021
|
-
"
|
|
18022
|
-
|
|
18023
|
-
|
|
18024
|
-
|
|
18025
|
-
|
|
18026
|
-
|
|
18020
|
+
"type": "intersection",
|
|
18021
|
+
"types": [
|
|
18022
|
+
{
|
|
18023
|
+
"type": "reference",
|
|
18024
|
+
"target": {
|
|
18025
|
+
"sourceFileName": "../../../../../../../../../../protocol/packages/payload/packages/model/src/Payload.ts",
|
|
18026
|
+
"qualifiedName": "SchemaFields"
|
|
18027
|
+
},
|
|
18028
|
+
"name": "SchemaFields",
|
|
18029
|
+
"package": "@xyo-network/payload-model"
|
|
18030
|
+
},
|
|
18031
|
+
{
|
|
18032
|
+
"type": "reference",
|
|
18033
|
+
"target": {
|
|
18034
|
+
"sourceFileName": "../../../../../../../../../../protocol/packages/payload/packages/model/src/Payload.ts",
|
|
18035
|
+
"qualifiedName": "PayloadFields"
|
|
18036
|
+
},
|
|
18037
|
+
"name": "PayloadFields",
|
|
18038
|
+
"package": "@xyo-network/payload-model"
|
|
18039
|
+
},
|
|
18040
|
+
{
|
|
18041
|
+
"type": "reference",
|
|
18042
|
+
"target": {
|
|
18043
|
+
"sourceFileName": "../../../../../../../../payload/packages/crypto/packages/nft/packages/collection/src/Payload/NftCollectionInfo.ts",
|
|
18044
|
+
"qualifiedName": "NftCollectionInfo"
|
|
18045
|
+
},
|
|
18046
|
+
"name": "NftCollectionInfo",
|
|
18047
|
+
"package": "@xyo-network/crypto-nft-collection-payload-plugin"
|
|
18048
|
+
},
|
|
18049
|
+
{
|
|
18050
|
+
"type": "reference",
|
|
18051
|
+
"target": {
|
|
18052
|
+
"sourceFileName": "../../../../../../../../payload/packages/crypto/packages/nft/packages/collection/src/Payload/NftCollectionAttributeMetrics.ts",
|
|
18053
|
+
"qualifiedName": "NftCollectionAttributeMetrics"
|
|
18054
|
+
},
|
|
18055
|
+
"name": "NftCollectionAttributeMetrics",
|
|
18056
|
+
"package": "@xyo-network/crypto-nft-collection-payload-plugin"
|
|
18057
|
+
},
|
|
18058
|
+
{
|
|
18059
|
+
"type": "reflection",
|
|
18060
|
+
"declaration": {
|
|
18061
|
+
"id": 589,
|
|
18062
|
+
"name": "__type",
|
|
18063
|
+
"variant": "declaration",
|
|
18064
|
+
"kind": 65536,
|
|
18065
|
+
"flags": {},
|
|
18066
|
+
"children": [
|
|
18067
|
+
{
|
|
18068
|
+
"id": 590,
|
|
18069
|
+
"name": "schema",
|
|
18070
|
+
"variant": "declaration",
|
|
18071
|
+
"kind": 1024,
|
|
18072
|
+
"flags": {},
|
|
18073
|
+
"sources": [
|
|
18074
|
+
{
|
|
18075
|
+
"fileName": "plugins/packages/payload/packages/crypto/packages/nft/packages/collection/dist/types/Payload/Payload.d.ts",
|
|
18076
|
+
"line": 6,
|
|
18077
|
+
"character": 4
|
|
18078
|
+
}
|
|
18079
|
+
],
|
|
18080
|
+
"type": {
|
|
18081
|
+
"type": "literal",
|
|
18082
|
+
"value": "network.xyo.crypto.nft.collection"
|
|
18083
|
+
}
|
|
18084
|
+
}
|
|
18085
|
+
],
|
|
18086
|
+
"groups": [
|
|
18087
|
+
{
|
|
18088
|
+
"title": "Properties",
|
|
18089
|
+
"children": [
|
|
18090
|
+
590
|
|
18091
|
+
]
|
|
18092
|
+
}
|
|
18093
|
+
],
|
|
18094
|
+
"sources": [
|
|
18095
|
+
{
|
|
18096
|
+
"fileName": "plugins/packages/payload/packages/crypto/packages/nft/packages/collection/dist/types/Payload/Payload.d.ts",
|
|
18097
|
+
"line": 5,
|
|
18098
|
+
"character": 99
|
|
18099
|
+
}
|
|
18100
|
+
]
|
|
18101
|
+
}
|
|
18102
|
+
},
|
|
18103
|
+
{
|
|
18104
|
+
"type": "reflection",
|
|
18105
|
+
"declaration": {
|
|
18106
|
+
"id": 591,
|
|
18107
|
+
"name": "__type",
|
|
18108
|
+
"variant": "declaration",
|
|
18109
|
+
"kind": 65536,
|
|
18110
|
+
"flags": {},
|
|
18111
|
+
"children": [
|
|
18112
|
+
{
|
|
18113
|
+
"id": 592,
|
|
18114
|
+
"name": "schema",
|
|
18115
|
+
"variant": "declaration",
|
|
18116
|
+
"kind": 1024,
|
|
18117
|
+
"flags": {},
|
|
18118
|
+
"sources": [
|
|
18119
|
+
{
|
|
18120
|
+
"fileName": "protocol/packages/payload/packages/model/dist/types/Payload.d.ts",
|
|
18121
|
+
"line": 17,
|
|
18122
|
+
"character": 4
|
|
18123
|
+
}
|
|
18124
|
+
],
|
|
18125
|
+
"type": {
|
|
18126
|
+
"type": "literal",
|
|
18127
|
+
"value": "network.xyo.crypto.nft.collection"
|
|
18128
|
+
}
|
|
18129
|
+
}
|
|
18130
|
+
],
|
|
18131
|
+
"groups": [
|
|
18132
|
+
{
|
|
18133
|
+
"title": "Properties",
|
|
18134
|
+
"children": [
|
|
18135
|
+
592
|
|
18136
|
+
]
|
|
18137
|
+
}
|
|
18138
|
+
],
|
|
18139
|
+
"sources": [
|
|
18140
|
+
{
|
|
18141
|
+
"fileName": "protocol/packages/payload/packages/model/dist/types/Payload.d.ts",
|
|
18142
|
+
"line": 16,
|
|
18143
|
+
"character": 178
|
|
18144
|
+
}
|
|
18145
|
+
]
|
|
18146
|
+
}
|
|
18147
|
+
}
|
|
18148
|
+
]
|
|
18027
18149
|
}
|
|
18028
18150
|
}
|
|
18029
18151
|
],
|
|
@@ -18058,7 +18180,7 @@
|
|
|
18058
18180
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
18059
18181
|
"line": 22,
|
|
18060
18182
|
"character": 13,
|
|
18061
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
18183
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L22"
|
|
18062
18184
|
}
|
|
18063
18185
|
],
|
|
18064
18186
|
"signatures": [
|
|
@@ -18073,7 +18195,7 @@
|
|
|
18073
18195
|
"fileName": "plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts",
|
|
18074
18196
|
"line": 22,
|
|
18075
18197
|
"character": 43,
|
|
18076
|
-
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/
|
|
18198
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/blob/7eef214713/packages/plugins/packages/payloadset/packages/crypto/packages/nft/packages/collection/diviner/src/Diviner.ts#L22"
|
|
18077
18199
|
}
|
|
18078
18200
|
],
|
|
18079
18201
|
"parameters": [
|
|
@@ -18314,7 +18436,7 @@
|
|
|
18314
18436
|
{
|
|
18315
18437
|
"title": "References",
|
|
18316
18438
|
"children": [
|
|
18317
|
-
|
|
18439
|
+
593
|
|
18318
18440
|
]
|
|
18319
18441
|
},
|
|
18320
18442
|
{
|
|
@@ -20705,6 +20827,22 @@
|
|
|
20705
20827
|
"qualifiedName": "nft"
|
|
20706
20828
|
},
|
|
20707
20829
|
"589": {
|
|
20830
|
+
"sourceFileName": "../../../../../../../../payload/packages/crypto/packages/nft/packages/collection/src/Payload/Payload.ts",
|
|
20831
|
+
"qualifiedName": "__type"
|
|
20832
|
+
},
|
|
20833
|
+
"590": {
|
|
20834
|
+
"sourceFileName": "../../../../../../../../payload/packages/crypto/packages/nft/packages/collection/src/Payload/Payload.ts",
|
|
20835
|
+
"qualifiedName": "__type.schema"
|
|
20836
|
+
},
|
|
20837
|
+
"591": {
|
|
20838
|
+
"sourceFileName": "../../../../../../../../../../protocol/packages/payload/packages/model/src/Payload.ts",
|
|
20839
|
+
"qualifiedName": "__type"
|
|
20840
|
+
},
|
|
20841
|
+
"592": {
|
|
20842
|
+
"sourceFileName": "../../../../../../../../../../protocol/packages/payload/packages/model/src/Payload.ts",
|
|
20843
|
+
"qualifiedName": "__type.schema"
|
|
20844
|
+
},
|
|
20845
|
+
"593": {
|
|
20708
20846
|
"sourceFileName": "src/index.ts",
|
|
20709
20847
|
"qualifiedName": "default"
|
|
20710
20848
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeNftCollection.js","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK;AACvC;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"analyzeNftCollection.js","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK;AACvC;;GAEG;AACH,GAA6B,EACG,EAAE;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAU,CAAA;QACzD,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAU,CAAA;IACjC,CAAC,CAAC,CACH,CACuB,CAAA;IAC1B,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -1,34 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
const defaultMu = Math.log(median);
|
|
3
|
-
const defaultSigma = 2;
|
|
4
|
-
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
5
|
-
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2));
|
|
6
|
-
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
7
|
-
/**
|
|
8
|
-
* Calculates the log-normal probability density
|
|
9
|
-
* @param x the value at which you want to calculate the probability density
|
|
10
|
-
* @param mu mean of the associated normal distribution
|
|
11
|
-
* @param sigma standard deviation of the associated normal distribution
|
|
12
|
-
* @returns
|
|
13
|
-
*/
|
|
14
|
-
const logNormalProbabilityDensity = (x, mu = defaultMu, sigma = defaultSigma) => {
|
|
15
|
-
if (x <= 0)
|
|
16
|
-
return 0;
|
|
17
|
-
const logX = Math.log(x);
|
|
18
|
-
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2));
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* For a lognormal distribution, the peak of the distribution is the mode
|
|
22
|
-
*/
|
|
23
|
-
const maxProbabilityDensity = logNormalProbabilityDensity(mode);
|
|
24
|
-
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
25
|
-
const scoreTotal = async (nft) => {
|
|
26
|
-
const density = logNormalProbabilityDensity(nft.total);
|
|
27
|
-
const normalized = density / maxProbabilityDensity;
|
|
28
|
-
const score = Math.min(Math.floor(normalized * 100), 100);
|
|
29
|
-
return await Promise.resolve([score, 100]);
|
|
30
|
-
};
|
|
1
|
+
import { scoreMetadata, scoreTotal } from './scoring';
|
|
31
2
|
export const scoringCriteria = {
|
|
32
|
-
|
|
3
|
+
...scoreMetadata,
|
|
4
|
+
Total: { score: scoreTotal, weight: 1 },
|
|
33
5
|
};
|
|
34
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAErD,MAAM,CAAC,MAAM,eAAe,GAAyE;IACnG,GAAG,aAAa;IAChB,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;CACxC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { scoreIndividualAttributes } from './scoreIndividualAttributes';
|
|
2
|
+
import { scoreTotalAttributes } from './scoreTotalAttributes';
|
|
3
|
+
export const attributeScoringCriteria = {
|
|
4
|
+
'Metadata Attributes Individual': { score: scoreIndividualAttributes, weight: 2 },
|
|
5
|
+
'Metadata Attributes Total': { score: scoreTotalAttributes, weight: 2 },
|
|
6
|
+
};
|
|
7
|
+
export const scoreMetadata = {
|
|
8
|
+
...attributeScoringCriteria,
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,MAAM,CAAC,MAAM,wBAAwB,GAAyE;IAC5G,gCAAgC,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,EAAE;IACjF,2BAA2B,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,EAAE;CACxE,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAyE;IACjG,GAAG,wBAAwB;CAC5B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { normalize } from '@xyo-network/crypto-nft-score-model';
|
|
2
|
+
const maxScore = 10;
|
|
3
|
+
export const scoreIndividualAttributes = (info) => {
|
|
4
|
+
const { attributes } = info.metrics.metadata;
|
|
5
|
+
const scores = Object.entries(attributes)
|
|
6
|
+
.map(([_trait, { values }]) => {
|
|
7
|
+
return Object.entries(values).map(([_traitValue, metrics]) => {
|
|
8
|
+
const rarity = Math.min(Math.round((1 - metrics.binomial.p) * maxScore), maxScore);
|
|
9
|
+
return [rarity, maxScore];
|
|
10
|
+
});
|
|
11
|
+
})
|
|
12
|
+
.flat();
|
|
13
|
+
const total = scores.reduce(([a, b], [c, d]) => [a + c, b + d], [0, 0]);
|
|
14
|
+
return normalize(total, maxScore);
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=scoreIndividualAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreIndividualAttributes.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAS,MAAM,qCAAqC,CAAA;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAmC,EAAS,EAAE;IACtF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAQ,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;YAClF,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC;SACD,IAAI,EAAE,CAAA;IACT,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { normalize } from '@xyo-network/crypto-nft-score-model';
|
|
2
|
+
const maxScore = 10;
|
|
3
|
+
export const scoreTotalAttributes = (info) => {
|
|
4
|
+
const { attributes } = info.metrics.metadata;
|
|
5
|
+
const scores = Object.entries(attributes).map(([_trait, { metrics }]) => {
|
|
6
|
+
const rarity = Math.floor((1 - metrics.binomial.p) * 100);
|
|
7
|
+
return [rarity, 100];
|
|
8
|
+
});
|
|
9
|
+
const total = scores.reduce(([a, b], [c, d]) => [a + c, b + d], [0, 0]);
|
|
10
|
+
return normalize(total, maxScore);
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=scoreTotalAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreTotalAttributes.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAS,MAAM,qCAAqC,CAAA;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAmC,EAAS,EAAE;IACjF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;QACzD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9E,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { normalize } from '@xyo-network/crypto-nft-score-model';
|
|
2
|
+
const median = 100000;
|
|
3
|
+
const defaultMu = Math.log(median);
|
|
4
|
+
const defaultSigma = 2;
|
|
5
|
+
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
6
|
+
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2));
|
|
7
|
+
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
8
|
+
/**
|
|
9
|
+
* Calculates the log-normal probability density
|
|
10
|
+
* @param x the value at which you want to calculate the probability density
|
|
11
|
+
* @param mu mean of the associated normal distribution
|
|
12
|
+
* @param sigma standard deviation of the associated normal distribution
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
const logNormalProbabilityDensity = (x, mu = defaultMu, sigma = defaultSigma) => {
|
|
16
|
+
if (x <= 0)
|
|
17
|
+
return 0;
|
|
18
|
+
const logX = Math.log(x);
|
|
19
|
+
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2));
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* For a lognormal distribution, the peak of the distribution is the mode
|
|
23
|
+
*/
|
|
24
|
+
const maxProbabilityDensity = logNormalProbabilityDensity(mode);
|
|
25
|
+
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
26
|
+
const maxScore = 10;
|
|
27
|
+
export const scoreTotal = (nft) => {
|
|
28
|
+
const density = logNormalProbabilityDensity(nft.total);
|
|
29
|
+
const score = [density, maxProbabilityDensity];
|
|
30
|
+
return normalize(score, maxScore);
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=total.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"total.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/total.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAS,MAAM,qCAAqC,CAAA;AAEtE,MAAM,MAAM,GAAG,MAAM,CAAA;AACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAClC,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,mEAAmE;AACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AAC5D,+DAA+D;AAE/D;;;;;;GAMG;AACH,MAAM,2BAA2B,GAAG,CAAC,CAAS,EAAE,KAAa,SAAS,EAAE,QAAgB,YAAY,EAAU,EAAE;IAC9G,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AACvG,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAA;AAC/D,oEAAoE;AAEpE,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAsB,EAAS,EAAE;IAC1D,MAAM,OAAO,GAAG,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtD,MAAM,KAAK,GAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IACrD,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin';
|
|
2
2
|
import { Score } from '@xyo-network/crypto-nft-score-model';
|
|
3
3
|
import { scoringCriteria } from './criteria';
|
|
4
4
|
export type ScoringCriteriaKey = keyof typeof scoringCriteria & PropertyKey;
|
|
5
5
|
export type NftCollectionAnalysis = {
|
|
6
6
|
[key in ScoringCriteriaKey]: Score;
|
|
7
7
|
};
|
|
8
|
-
export declare const analyzeNftCollection: (nft:
|
|
8
|
+
export declare const analyzeNftCollection: (nft: NftCollectionInfoPayload) => Promise<NftCollectionAnalysis>;
|
|
9
9
|
//# sourceMappingURL=analyzeNftCollection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeNftCollection.d.ts","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"analyzeNftCollection.d.ts","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNftCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,eAAe,GAAG,WAAW,CAAA;AAE3E,MAAM,MAAM,qBAAqB,GAAG;KACjC,GAAG,IAAI,kBAAkB,GAAG,KAAK;CACnC,CAAA;AAED,eAAO,MAAM,oBAAoB,QAI1B,wBAAwB,KAC5B,QAAQ,qBAAqB,CAW/B,CAAA"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin';
|
|
2
|
+
import { WeightedScoringCriteria } from '@xyo-network/crypto-nft-score-model';
|
|
3
3
|
export declare const scoringCriteria: {
|
|
4
|
-
|
|
5
|
-
score: (nft: NftCollectionInfo) => Promise<Score>;
|
|
6
|
-
weight: number;
|
|
7
|
-
};
|
|
4
|
+
[key: string]: WeightedScoringCriteria<NftCollectionInfoPayload>;
|
|
8
5
|
};
|
|
9
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAI7E,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,CAAA;CAG/F,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin';
|
|
2
|
+
import { WeightedScoringCriteria } from '@xyo-network/crypto-nft-score-model';
|
|
3
|
+
export declare const attributeScoringCriteria: {
|
|
4
|
+
[key: string]: WeightedScoringCriteria<NftCollectionInfoPayload>;
|
|
5
|
+
};
|
|
6
|
+
export declare const scoreMetadata: {
|
|
7
|
+
[key: string]: WeightedScoringCriteria<NftCollectionInfoPayload>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAK7E,eAAO,MAAM,wBAAwB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,CAAA;CAGxG,CAAA;AAED,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,CAAA;CAE7F,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NftCollectionAttributeMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin';
|
|
2
|
+
import { Score } from '@xyo-network/crypto-nft-score-model';
|
|
3
|
+
export declare const scoreIndividualAttributes: (info: NftCollectionAttributeMetrics) => Score;
|
|
4
|
+
//# sourceMappingURL=scoreIndividualAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreIndividualAttributes.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreIndividualAttributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AACjG,OAAO,EAAa,KAAK,EAAE,MAAM,qCAAqC,CAAA;AAItE,eAAO,MAAM,yBAAyB,SAAU,6BAA6B,KAAG,KAY/E,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { NftCollectionAttributeMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin';
|
|
2
|
+
import { Score } from '@xyo-network/crypto-nft-score-model';
|
|
3
|
+
export declare const scoreTotalAttributes: (info: NftCollectionAttributeMetrics) => Score;
|
|
4
|
+
//# sourceMappingURL=scoreTotalAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoreTotalAttributes.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/scoreTotalAttributes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAA;AACjG,OAAO,EAAa,KAAK,EAAE,MAAM,qCAAqC,CAAA;AAItE,eAAO,MAAM,oBAAoB,SAAU,6BAA6B,KAAG,KAQ1E,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"total.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/total.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AACrF,OAAO,EAAa,KAAK,EAAE,MAAM,qCAAqC,CAAA;AA8BtE,eAAO,MAAM,UAAU,QAAS,iBAAiB,KAAG,KAInD,CAAA"}
|
package/package.json
CHANGED
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xyo-network/abstract-diviner": "~2.70.
|
|
14
|
-
"@xyo-network/core": "~2.70.
|
|
15
|
-
"@xyo-network/crypto-nft-collection-payload-plugin": "~2.70.
|
|
16
|
-
"@xyo-network/crypto-nft-payload-plugin": "~2.70.
|
|
17
|
-
"@xyo-network/crypto-nft-score-model": "~2.70.
|
|
18
|
-
"@xyo-network/diviner-model": "~2.70.
|
|
19
|
-
"@xyo-network/module": "~2.70.
|
|
20
|
-
"@xyo-network/payload-model": "~2.70.
|
|
21
|
-
"@xyo-network/payloadset-plugin": "~2.70.
|
|
13
|
+
"@xyo-network/abstract-diviner": "~2.70.13",
|
|
14
|
+
"@xyo-network/core": "~2.70.13",
|
|
15
|
+
"@xyo-network/crypto-nft-collection-payload-plugin": "~2.70.13",
|
|
16
|
+
"@xyo-network/crypto-nft-payload-plugin": "~2.70.13",
|
|
17
|
+
"@xyo-network/crypto-nft-score-model": "~2.70.13",
|
|
18
|
+
"@xyo-network/diviner-model": "~2.70.13",
|
|
19
|
+
"@xyo-network/module": "~2.70.13",
|
|
20
|
+
"@xyo-network/payload-model": "~2.70.13",
|
|
21
|
+
"@xyo-network/payloadset-plugin": "~2.70.13"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@xylabs/jest-helpers": "^2.9.3",
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
},
|
|
62
62
|
"sideEffects": false,
|
|
63
63
|
"types": "dist/types/index.d.ts",
|
|
64
|
-
"version": "2.70.
|
|
64
|
+
"version": "2.70.13"
|
|
65
65
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
2
|
import { Score } from '@xyo-network/crypto-nft-score-model'
|
|
3
3
|
|
|
4
4
|
import { scoringCriteria } from './criteria'
|
|
@@ -13,7 +13,7 @@ export const analyzeNftCollection = async (
|
|
|
13
13
|
/**
|
|
14
14
|
* The NFT to evaluate
|
|
15
15
|
*/
|
|
16
|
-
nft:
|
|
16
|
+
nft: NftCollectionInfoPayload,
|
|
17
17
|
): Promise<NftCollectionAnalysis> => {
|
|
18
18
|
const result = Object.fromEntries(
|
|
19
19
|
await Promise.all(
|
|
@@ -1,39 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
|
+
import { WeightedScoringCriteria } from '@xyo-network/crypto-nft-score-model'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
const defaultMu = Math.log(median)
|
|
6
|
-
const defaultSigma = 2
|
|
7
|
-
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
8
|
-
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2))
|
|
9
|
-
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
4
|
+
import { scoreMetadata, scoreTotal } from './scoring'
|
|
10
5
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* @param mu mean of the associated normal distribution
|
|
15
|
-
* @param sigma standard deviation of the associated normal distribution
|
|
16
|
-
* @returns
|
|
17
|
-
*/
|
|
18
|
-
const logNormalProbabilityDensity = (x: number, mu: number = defaultMu, sigma: number = defaultSigma): number => {
|
|
19
|
-
if (x <= 0) return 0
|
|
20
|
-
const logX = Math.log(x)
|
|
21
|
-
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2))
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* For a lognormal distribution, the peak of the distribution is the mode
|
|
26
|
-
*/
|
|
27
|
-
const maxProbabilityDensity = logNormalProbabilityDensity(mode)
|
|
28
|
-
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
29
|
-
|
|
30
|
-
const scoreTotal = async (nft: NftCollectionInfo): Promise<Score> => {
|
|
31
|
-
const density = logNormalProbabilityDensity(nft.total)
|
|
32
|
-
const normalized = density / maxProbabilityDensity
|
|
33
|
-
const score = Math.min(Math.floor(normalized * 100), 100)
|
|
34
|
-
return await Promise.resolve([score, 100])
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const scoringCriteria = {
|
|
38
|
-
total: { score: scoreTotal, weight: 1 },
|
|
6
|
+
export const scoringCriteria: { [key: string]: WeightedScoringCriteria<NftCollectionInfoPayload> } = {
|
|
7
|
+
...scoreMetadata,
|
|
8
|
+
Total: { score: scoreTotal, weight: 1 },
|
|
39
9
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './metadata'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NftCollectionInfoPayload } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
|
+
import { WeightedScoringCriteria } from '@xyo-network/crypto-nft-score-model'
|
|
3
|
+
|
|
4
|
+
import { scoreIndividualAttributes } from './scoreIndividualAttributes'
|
|
5
|
+
import { scoreTotalAttributes } from './scoreTotalAttributes'
|
|
6
|
+
|
|
7
|
+
export const attributeScoringCriteria: { [key: string]: WeightedScoringCriteria<NftCollectionInfoPayload> } = {
|
|
8
|
+
'Metadata Attributes Individual': { score: scoreIndividualAttributes, weight: 2 },
|
|
9
|
+
'Metadata Attributes Total': { score: scoreTotalAttributes, weight: 2 },
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const scoreMetadata: { [key: string]: WeightedScoringCriteria<NftCollectionInfoPayload> } = {
|
|
13
|
+
...attributeScoringCriteria,
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NftCollectionAttributeMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
|
+
import { normalize, Score } from '@xyo-network/crypto-nft-score-model'
|
|
3
|
+
|
|
4
|
+
const maxScore = 10
|
|
5
|
+
|
|
6
|
+
export const scoreIndividualAttributes = (info: NftCollectionAttributeMetrics): Score => {
|
|
7
|
+
const { attributes } = info.metrics.metadata
|
|
8
|
+
const scores = Object.entries(attributes)
|
|
9
|
+
.map(([_trait, { values }]) => {
|
|
10
|
+
return Object.entries(values).map<Score>(([_traitValue, metrics]) => {
|
|
11
|
+
const rarity = Math.min(Math.round((1 - metrics.binomial.p) * maxScore), maxScore)
|
|
12
|
+
return [rarity, maxScore]
|
|
13
|
+
})
|
|
14
|
+
})
|
|
15
|
+
.flat()
|
|
16
|
+
const total = scores.reduce<Score>(([a, b], [c, d]) => [a + c, b + d], [0, 0])
|
|
17
|
+
return normalize(total, maxScore)
|
|
18
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NftCollectionAttributeMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
|
+
import { normalize, Score } from '@xyo-network/crypto-nft-score-model'
|
|
3
|
+
|
|
4
|
+
const maxScore = 10
|
|
5
|
+
|
|
6
|
+
export const scoreTotalAttributes = (info: NftCollectionAttributeMetrics): Score => {
|
|
7
|
+
const { attributes } = info.metrics.metadata
|
|
8
|
+
const scores = Object.entries(attributes).map<Score>(([_trait, { metrics }]) => {
|
|
9
|
+
const rarity = Math.floor((1 - metrics.binomial.p) * 100)
|
|
10
|
+
return [rarity, 100]
|
|
11
|
+
})
|
|
12
|
+
const total = scores.reduce<Score>(([a, b], [c, d]) => [a + c, b + d], [0, 0])
|
|
13
|
+
return normalize(total, maxScore)
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { NftCollectionInfo } from '@xyo-network/crypto-nft-collection-payload-plugin'
|
|
2
|
+
import { normalize, Score } from '@xyo-network/crypto-nft-score-model'
|
|
3
|
+
|
|
4
|
+
const median = 100000
|
|
5
|
+
const defaultMu = Math.log(median)
|
|
6
|
+
const defaultSigma = 2
|
|
7
|
+
// const mean = Math.exp(defaultMu + Math.pow(defaultSigma, 2) / 2)
|
|
8
|
+
const mode = Math.exp(defaultMu - Math.pow(defaultSigma, 2))
|
|
9
|
+
// console.log(`mean: ${mean} median: ${median} mode: ${mode}`)
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Calculates the log-normal probability density
|
|
13
|
+
* @param x the value at which you want to calculate the probability density
|
|
14
|
+
* @param mu mean of the associated normal distribution
|
|
15
|
+
* @param sigma standard deviation of the associated normal distribution
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
const logNormalProbabilityDensity = (x: number, mu: number = defaultMu, sigma: number = defaultSigma): number => {
|
|
19
|
+
if (x <= 0) return 0
|
|
20
|
+
const logX = Math.log(x)
|
|
21
|
+
return (1 / (x * sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-0.5 * Math.pow((logX - mu) / sigma, 2))
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* For a lognormal distribution, the peak of the distribution is the mode
|
|
26
|
+
*/
|
|
27
|
+
const maxProbabilityDensity = logNormalProbabilityDensity(mode)
|
|
28
|
+
// console.log(`mode: ${mode} maxDensity: ${maxProbabilityDensity}`)
|
|
29
|
+
|
|
30
|
+
const maxScore = 10
|
|
31
|
+
|
|
32
|
+
export const scoreTotal = (nft: NftCollectionInfo): Score => {
|
|
33
|
+
const density = logNormalProbabilityDensity(nft.total)
|
|
34
|
+
const score: Score = [density, maxProbabilityDensity]
|
|
35
|
+
return normalize(score, maxScore)
|
|
36
|
+
}
|