@xyo-network/crypto-nft-collection-witness-plugin 2.99.5 → 3.0.0
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/browser/index.d.ts +27 -4
- package/dist/browser/index.mjs +132 -178
- package/dist/browser/index.mjs.map +1 -1
- package/dist/neutral/index.d.ts +27 -4
- package/dist/neutral/index.mjs +132 -178
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/index.d.ts +27 -4
- package/dist/node/index.mjs +137 -191
- package/dist/node/index.mjs.map +1 -1
- package/package.json +26 -44
- package/src/index.ts +1 -1
- package/dist/browser/Plugin.d.cts +0 -4
- package/dist/browser/Plugin.d.cts.map +0 -1
- package/dist/browser/Plugin.d.mts +0 -4
- package/dist/browser/Plugin.d.mts.map +0 -1
- package/dist/browser/Plugin.d.ts +0 -4
- package/dist/browser/Plugin.d.ts.map +0 -1
- package/dist/browser/Witness.d.cts +0 -10
- package/dist/browser/Witness.d.cts.map +0 -1
- package/dist/browser/Witness.d.mts +0 -10
- package/dist/browser/Witness.d.mts.map +0 -1
- package/dist/browser/Witness.d.ts +0 -10
- package/dist/browser/Witness.d.ts.map +0 -1
- package/dist/browser/index.cjs +0 -346
- package/dist/browser/index.cjs.map +0 -1
- package/dist/browser/index.d.cts +0 -4
- package/dist/browser/index.d.cts.map +0 -1
- package/dist/browser/index.d.mts +0 -4
- package/dist/browser/index.d.mts.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
- package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/index.d.cts +0 -2
- package/dist/browser/lib/collectionMetrics/index.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/index.d.mts +0 -2
- package/dist/browser/lib/collectionMetrics/index.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/index.d.ts +0 -2
- package/dist/browser/lib/collectionMetrics/index.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.cts +0 -6
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.mts +0 -6
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.ts +0 -6
- package/dist/browser/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/index.d.cts +0 -4
- package/dist/browser/lib/collectionMetrics/lib/index.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/index.d.mts +0 -4
- package/dist/browser/lib/collectionMetrics/lib/index.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/index.d.ts +0 -4
- package/dist/browser/lib/collectionMetrics/lib/index.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
- package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
- package/dist/browser/lib/contractHasFunctions.d.cts +0 -3
- package/dist/browser/lib/contractHasFunctions.d.cts.map +0 -1
- package/dist/browser/lib/contractHasFunctions.d.mts +0 -3
- package/dist/browser/lib/contractHasFunctions.d.mts.map +0 -1
- package/dist/browser/lib/contractHasFunctions.d.ts +0 -3
- package/dist/browser/lib/contractHasFunctions.d.ts.map +0 -1
- package/dist/browser/lib/getNftCollectionNfts.d.cts +0 -4
- package/dist/browser/lib/getNftCollectionNfts.d.cts.map +0 -1
- package/dist/browser/lib/getNftCollectionNfts.d.mts +0 -4
- package/dist/browser/lib/getNftCollectionNfts.d.mts.map +0 -1
- package/dist/browser/lib/getNftCollectionNfts.d.ts +0 -4
- package/dist/browser/lib/getNftCollectionNfts.d.ts.map +0 -1
- package/dist/browser/lib/index.d.cts +0 -5
- package/dist/browser/lib/index.d.cts.map +0 -1
- package/dist/browser/lib/index.d.mts +0 -5
- package/dist/browser/lib/index.d.mts.map +0 -1
- package/dist/browser/lib/index.d.ts +0 -5
- package/dist/browser/lib/index.d.ts.map +0 -1
- package/dist/browser/lib/nonEvaluableContractAddresses.d.cts +0 -2
- package/dist/browser/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
- package/dist/browser/lib/nonEvaluableContractAddresses.d.mts +0 -2
- package/dist/browser/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
- package/dist/browser/lib/nonEvaluableContractAddresses.d.ts +0 -2
- package/dist/browser/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
- package/dist/browser/lib/tokenTypes.d.cts +0 -6
- package/dist/browser/lib/tokenTypes.d.cts.map +0 -1
- package/dist/browser/lib/tokenTypes.d.mts +0 -6
- package/dist/browser/lib/tokenTypes.d.mts.map +0 -1
- package/dist/browser/lib/tokenTypes.d.ts +0 -6
- package/dist/browser/lib/tokenTypes.d.ts.map +0 -1
- package/dist/browser/lib/tryCall.d.cts +0 -2
- package/dist/browser/lib/tryCall.d.cts.map +0 -1
- package/dist/browser/lib/tryCall.d.mts +0 -2
- package/dist/browser/lib/tryCall.d.mts.map +0 -1
- package/dist/browser/lib/tryCall.d.ts +0 -2
- package/dist/browser/lib/tryCall.d.ts.map +0 -1
- package/dist/neutral/Plugin.d.cts +0 -4
- package/dist/neutral/Plugin.d.cts.map +0 -1
- package/dist/neutral/Plugin.d.mts +0 -4
- package/dist/neutral/Plugin.d.mts.map +0 -1
- package/dist/neutral/Plugin.d.ts +0 -4
- package/dist/neutral/Plugin.d.ts.map +0 -1
- package/dist/neutral/Witness.d.cts +0 -10
- package/dist/neutral/Witness.d.cts.map +0 -1
- package/dist/neutral/Witness.d.mts +0 -10
- package/dist/neutral/Witness.d.mts.map +0 -1
- package/dist/neutral/Witness.d.ts +0 -10
- package/dist/neutral/Witness.d.ts.map +0 -1
- package/dist/neutral/index.cjs +0 -346
- package/dist/neutral/index.cjs.map +0 -1
- package/dist/neutral/index.d.cts +0 -4
- package/dist/neutral/index.d.cts.map +0 -1
- package/dist/neutral/index.d.mts +0 -4
- package/dist/neutral/index.d.mts.map +0 -1
- package/dist/neutral/index.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
- package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/index.d.cts +0 -2
- package/dist/neutral/lib/collectionMetrics/index.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/index.d.mts +0 -2
- package/dist/neutral/lib/collectionMetrics/index.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/index.d.ts +0 -2
- package/dist/neutral/lib/collectionMetrics/index.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.cts +0 -6
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.mts +0 -6
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.ts +0 -6
- package/dist/neutral/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/index.d.cts +0 -4
- package/dist/neutral/lib/collectionMetrics/lib/index.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/index.d.mts +0 -4
- package/dist/neutral/lib/collectionMetrics/lib/index.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/index.d.ts +0 -4
- package/dist/neutral/lib/collectionMetrics/lib/index.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
- package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
- package/dist/neutral/lib/contractHasFunctions.d.cts +0 -3
- package/dist/neutral/lib/contractHasFunctions.d.cts.map +0 -1
- package/dist/neutral/lib/contractHasFunctions.d.mts +0 -3
- package/dist/neutral/lib/contractHasFunctions.d.mts.map +0 -1
- package/dist/neutral/lib/contractHasFunctions.d.ts +0 -3
- package/dist/neutral/lib/contractHasFunctions.d.ts.map +0 -1
- package/dist/neutral/lib/getNftCollectionNfts.d.cts +0 -4
- package/dist/neutral/lib/getNftCollectionNfts.d.cts.map +0 -1
- package/dist/neutral/lib/getNftCollectionNfts.d.mts +0 -4
- package/dist/neutral/lib/getNftCollectionNfts.d.mts.map +0 -1
- package/dist/neutral/lib/getNftCollectionNfts.d.ts +0 -4
- package/dist/neutral/lib/getNftCollectionNfts.d.ts.map +0 -1
- package/dist/neutral/lib/index.d.cts +0 -5
- package/dist/neutral/lib/index.d.cts.map +0 -1
- package/dist/neutral/lib/index.d.mts +0 -5
- package/dist/neutral/lib/index.d.mts.map +0 -1
- package/dist/neutral/lib/index.d.ts +0 -5
- package/dist/neutral/lib/index.d.ts.map +0 -1
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.cts +0 -2
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.mts +0 -2
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.ts +0 -2
- package/dist/neutral/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
- package/dist/neutral/lib/tokenTypes.d.cts +0 -6
- package/dist/neutral/lib/tokenTypes.d.cts.map +0 -1
- package/dist/neutral/lib/tokenTypes.d.mts +0 -6
- package/dist/neutral/lib/tokenTypes.d.mts.map +0 -1
- package/dist/neutral/lib/tokenTypes.d.ts +0 -6
- package/dist/neutral/lib/tokenTypes.d.ts.map +0 -1
- package/dist/neutral/lib/tryCall.d.cts +0 -2
- package/dist/neutral/lib/tryCall.d.cts.map +0 -1
- package/dist/neutral/lib/tryCall.d.mts +0 -2
- package/dist/neutral/lib/tryCall.d.mts.map +0 -1
- package/dist/neutral/lib/tryCall.d.ts +0 -2
- package/dist/neutral/lib/tryCall.d.ts.map +0 -1
- package/dist/node/Plugin.d.cts +0 -4
- package/dist/node/Plugin.d.cts.map +0 -1
- package/dist/node/Plugin.d.mts +0 -4
- package/dist/node/Plugin.d.mts.map +0 -1
- package/dist/node/Plugin.d.ts +0 -4
- package/dist/node/Plugin.d.ts.map +0 -1
- package/dist/node/Witness.d.cts +0 -10
- package/dist/node/Witness.d.cts.map +0 -1
- package/dist/node/Witness.d.mts +0 -10
- package/dist/node/Witness.d.mts.map +0 -1
- package/dist/node/Witness.d.ts +0 -10
- package/dist/node/Witness.d.ts.map +0 -1
- package/dist/node/index.cjs +0 -365
- package/dist/node/index.cjs.map +0 -1
- package/dist/node/index.d.cts +0 -4
- package/dist/node/index.d.cts.map +0 -1
- package/dist/node/index.d.mts +0 -4
- package/dist/node/index.d.mts.map +0 -1
- package/dist/node/index.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
- package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/index.d.cts +0 -2
- package/dist/node/lib/collectionMetrics/index.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/index.d.mts +0 -2
- package/dist/node/lib/collectionMetrics/index.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/index.d.ts +0 -2
- package/dist/node/lib/collectionMetrics/index.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
- package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/distribution.d.cts +0 -6
- package/dist/node/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/distribution.d.mts +0 -6
- package/dist/node/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/distribution.d.ts +0 -6
- package/dist/node/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/index.d.cts +0 -4
- package/dist/node/lib/collectionMetrics/lib/index.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/index.d.mts +0 -4
- package/dist/node/lib/collectionMetrics/lib/index.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/index.d.ts +0 -4
- package/dist/node/lib/collectionMetrics/lib/index.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
- package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
- package/dist/node/lib/contractHasFunctions.d.cts +0 -3
- package/dist/node/lib/contractHasFunctions.d.cts.map +0 -1
- package/dist/node/lib/contractHasFunctions.d.mts +0 -3
- package/dist/node/lib/contractHasFunctions.d.mts.map +0 -1
- package/dist/node/lib/contractHasFunctions.d.ts +0 -3
- package/dist/node/lib/contractHasFunctions.d.ts.map +0 -1
- package/dist/node/lib/getNftCollectionNfts.d.cts +0 -4
- package/dist/node/lib/getNftCollectionNfts.d.cts.map +0 -1
- package/dist/node/lib/getNftCollectionNfts.d.mts +0 -4
- package/dist/node/lib/getNftCollectionNfts.d.mts.map +0 -1
- package/dist/node/lib/getNftCollectionNfts.d.ts +0 -4
- package/dist/node/lib/getNftCollectionNfts.d.ts.map +0 -1
- package/dist/node/lib/index.d.cts +0 -5
- package/dist/node/lib/index.d.cts.map +0 -1
- package/dist/node/lib/index.d.mts +0 -5
- package/dist/node/lib/index.d.mts.map +0 -1
- package/dist/node/lib/index.d.ts +0 -5
- package/dist/node/lib/index.d.ts.map +0 -1
- package/dist/node/lib/nonEvaluableContractAddresses.d.cts +0 -2
- package/dist/node/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
- package/dist/node/lib/nonEvaluableContractAddresses.d.mts +0 -2
- package/dist/node/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
- package/dist/node/lib/nonEvaluableContractAddresses.d.ts +0 -2
- package/dist/node/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
- package/dist/node/lib/tokenTypes.d.cts +0 -6
- package/dist/node/lib/tokenTypes.d.cts.map +0 -1
- package/dist/node/lib/tokenTypes.d.mts +0 -6
- package/dist/node/lib/tokenTypes.d.mts.map +0 -1
- package/dist/node/lib/tokenTypes.d.ts +0 -6
- package/dist/node/lib/tokenTypes.d.ts.map +0 -1
- package/dist/node/lib/tryCall.d.cts +0 -2
- package/dist/node/lib/tryCall.d.cts.map +0 -1
- package/dist/node/lib/tryCall.d.mts +0 -2
- package/dist/node/lib/tryCall.d.mts.map +0 -1
- package/dist/node/lib/tryCall.d.ts +0 -2
- package/dist/node/lib/tryCall.d.ts.map +0 -1
package/dist/node/index.mjs
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
-
var __reflectGet = Reflect.get;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
8
|
-
|
|
9
1
|
// src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts
|
|
10
|
-
var calculateAllPropertiesDistribution =
|
|
2
|
+
var calculateAllPropertiesDistribution = (array) => {
|
|
11
3
|
const distribution = {};
|
|
12
4
|
for (const item of array) {
|
|
13
5
|
for (const property in item) {
|
|
@@ -16,12 +8,12 @@ var calculateAllPropertiesDistribution = /* @__PURE__ */ __name((array) => {
|
|
|
16
8
|
if (value !== void 0 && value !== null) {
|
|
17
9
|
const valueString = value.toString();
|
|
18
10
|
if (!distribution[property]) {
|
|
19
|
-
distribution[property] = {
|
|
20
|
-
[valueString]: 1
|
|
21
|
-
};
|
|
11
|
+
distribution[property] = { [valueString]: 1 };
|
|
22
12
|
} else if (distribution[property][valueString]) {
|
|
13
|
+
;
|
|
23
14
|
distribution[property][valueString] += 1;
|
|
24
15
|
} else {
|
|
16
|
+
;
|
|
25
17
|
distribution[property][valueString] = 1;
|
|
26
18
|
}
|
|
27
19
|
}
|
|
@@ -29,78 +21,47 @@ var calculateAllPropertiesDistribution = /* @__PURE__ */ __name((array) => {
|
|
|
29
21
|
}
|
|
30
22
|
}
|
|
31
23
|
return distribution;
|
|
32
|
-
}
|
|
24
|
+
};
|
|
33
25
|
|
|
34
26
|
// src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts
|
|
35
|
-
var calculateBinomialParamsFromProbability =
|
|
27
|
+
var calculateBinomialParamsFromProbability = (n, p) => {
|
|
36
28
|
const mean = n * p;
|
|
37
29
|
const variance = n * p * (1 - p);
|
|
38
30
|
const stdDev = Math.sqrt(variance);
|
|
39
|
-
return {
|
|
40
|
-
|
|
41
|
-
p,
|
|
42
|
-
stdDev,
|
|
43
|
-
variance
|
|
44
|
-
};
|
|
45
|
-
}, "calculateBinomialParamsFromProbability");
|
|
31
|
+
return { mean, p, stdDev, variance };
|
|
32
|
+
};
|
|
46
33
|
|
|
47
34
|
// src/lib/collectionMetrics/getNftCollectionMetrics.ts
|
|
48
|
-
var getNftCollectionMetrics =
|
|
49
|
-
const traits = nfts.map((nft) => {
|
|
50
|
-
|
|
51
|
-
return (_a = nft == null ? void 0 : nft.metadata) == null ? void 0 : _a.attributes;
|
|
52
|
-
}).filter((v) => v !== void 0).map((attributes2) => {
|
|
53
|
-
return Object.fromEntries(attributes2.map((attribute) => [
|
|
54
|
-
attribute.trait_type,
|
|
55
|
-
attribute.value
|
|
56
|
-
]));
|
|
35
|
+
var getNftCollectionMetrics = (nfts) => {
|
|
36
|
+
const traits = nfts.map((nft) => nft?.metadata?.attributes).filter((v) => v !== void 0).map((attributes2) => {
|
|
37
|
+
return Object.fromEntries(attributes2.map((attribute) => [attribute.trait_type, attribute.value]));
|
|
57
38
|
});
|
|
58
39
|
const distribution = calculateAllPropertiesDistribution(traits);
|
|
59
40
|
const n = nfts.length;
|
|
60
|
-
const attributes = Object.fromEntries(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
p: p2
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return [
|
|
77
|
-
trait,
|
|
78
|
-
{
|
|
79
|
-
metrics: {
|
|
80
|
-
binomial: {
|
|
81
|
-
p
|
|
82
|
-
},
|
|
83
|
-
count: traitCount
|
|
84
|
-
},
|
|
85
|
-
values
|
|
86
|
-
}
|
|
87
|
-
];
|
|
88
|
-
}));
|
|
89
|
-
return {
|
|
90
|
-
metadata: {
|
|
91
|
-
attributes
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}, "getNftCollectionMetrics");
|
|
41
|
+
const attributes = Object.fromEntries(
|
|
42
|
+
Object.entries(distribution).filter((v) => v[1] !== void 0).map(([trait, entries]) => {
|
|
43
|
+
const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0);
|
|
44
|
+
const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n);
|
|
45
|
+
const values = Object.fromEntries(
|
|
46
|
+
Object.entries(entries).map(([value, traitValueCount]) => {
|
|
47
|
+
const { p: p2 } = calculateBinomialParamsFromProbability(n, traitValueCount / n);
|
|
48
|
+
const metrics = { binomial: { p: p2 }, count: traitValueCount };
|
|
49
|
+
return [value, metrics];
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
return [trait, { metrics: { binomial: { p }, count: traitCount }, values }];
|
|
53
|
+
})
|
|
54
|
+
);
|
|
55
|
+
return { metadata: { attributes } };
|
|
56
|
+
};
|
|
95
57
|
|
|
96
58
|
// src/lib/contractHasFunctions.ts
|
|
97
59
|
import { assertEx } from "@xylabs/assert";
|
|
98
|
-
var contractHasFunctions =
|
|
99
|
-
var _a;
|
|
60
|
+
var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
|
|
100
61
|
try {
|
|
101
62
|
const bytecode = await provider.getCode(address, "latest");
|
|
102
63
|
for (const functionName of functionNames) {
|
|
103
|
-
const selector = assertEx(
|
|
64
|
+
const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => "Function not found on interface");
|
|
104
65
|
if (!bytecode.includes(selector.slice(2))) {
|
|
105
66
|
return false;
|
|
106
67
|
}
|
|
@@ -112,7 +73,7 @@ var contractHasFunctions = /* @__PURE__ */ __name(async (provider, address, cont
|
|
|
112
73
|
console.log(error);
|
|
113
74
|
return false;
|
|
114
75
|
}
|
|
115
|
-
}
|
|
76
|
+
};
|
|
116
77
|
|
|
117
78
|
// src/lib/getNftCollectionNfts.ts
|
|
118
79
|
import { AxiosJson } from "@xylabs/axios";
|
|
@@ -126,23 +87,14 @@ import { checkIpfsUrl } from "@xyo-network/witness-blockchain-abstract";
|
|
|
126
87
|
|
|
127
88
|
// src/lib/tokenTypes.ts
|
|
128
89
|
import { ERC721__factory, ERC1155URIStorage__factory } from "@xyo-network/open-zeppelin-typechain";
|
|
129
|
-
var isErc1155 =
|
|
130
|
-
return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), [
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
"symbol",
|
|
138
|
-
"tokenURI"
|
|
139
|
-
]);
|
|
140
|
-
}, "isErc721");
|
|
141
|
-
var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
|
|
142
|
-
const [erc721, erc1155] = await Promise.all([
|
|
143
|
-
isErc721(provider, address),
|
|
144
|
-
isErc1155(provider, address)
|
|
145
|
-
]);
|
|
90
|
+
var isErc1155 = async (provider, address) => {
|
|
91
|
+
return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ["uri"]);
|
|
92
|
+
};
|
|
93
|
+
var isErc721 = async (provider, address) => {
|
|
94
|
+
return await contractHasFunctions(provider, address, ERC721__factory.createInterface(), ["name", "symbol", "tokenURI"]);
|
|
95
|
+
};
|
|
96
|
+
var tokenTypes = async (provider, address) => {
|
|
97
|
+
const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)]);
|
|
146
98
|
const result = [];
|
|
147
99
|
if (erc721) {
|
|
148
100
|
result.push("ERC721");
|
|
@@ -151,10 +103,10 @@ var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
|
|
|
151
103
|
result.push("ERC1155");
|
|
152
104
|
}
|
|
153
105
|
return result;
|
|
154
|
-
}
|
|
106
|
+
};
|
|
155
107
|
|
|
156
108
|
// src/lib/tryCall.ts
|
|
157
|
-
var tryCall =
|
|
109
|
+
var tryCall = async (func, name) => {
|
|
158
110
|
try {
|
|
159
111
|
return await func();
|
|
160
112
|
} catch (ex) {
|
|
@@ -164,66 +116,59 @@ var tryCall = /* @__PURE__ */ __name(async (func, name) => {
|
|
|
164
116
|
}
|
|
165
117
|
return void 0;
|
|
166
118
|
}
|
|
167
|
-
}
|
|
119
|
+
};
|
|
168
120
|
|
|
169
121
|
// src/lib/getNftCollectionNfts.ts
|
|
170
122
|
var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
|
|
171
123
|
function range(size, startAt = 0) {
|
|
172
|
-
return [
|
|
173
|
-
...Array(size).keys()
|
|
174
|
-
].map((i) => i + startAt);
|
|
124
|
+
return [...Array(size).keys()].map((i) => i + startAt);
|
|
175
125
|
}
|
|
176
|
-
|
|
177
|
-
var getNftCollectionNfts = /* @__PURE__ */ __name(async (contractAddress, provider, types, maxNfts = 100) => {
|
|
126
|
+
var getNftCollectionNfts = async (contractAddress, provider, types, maxNfts = 100) => {
|
|
178
127
|
try {
|
|
179
128
|
const block = await provider.getBlockNumber();
|
|
180
129
|
const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block);
|
|
181
130
|
const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block);
|
|
182
131
|
const implementation = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation;
|
|
183
|
-
const axios = new AxiosJson({
|
|
184
|
-
timeout: 2e3
|
|
185
|
-
});
|
|
132
|
+
const axios = new AxiosJson({ timeout: 2e3 });
|
|
186
133
|
const enumerable = ERC721Enumerable__factory.connect(implementation, provider);
|
|
187
134
|
const storage = ERC721URIStorage__factory.connect(implementation, provider);
|
|
188
135
|
const supply1155 = ERC1155Supply__factory.connect(implementation, provider);
|
|
189
136
|
const finalTypes = types ?? await tokenTypes(provider, implementation);
|
|
190
137
|
const maxNftsArray = range(maxNfts);
|
|
191
|
-
const result = (await Promise.all(
|
|
192
|
-
|
|
193
|
-
blockTag: block
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const error = ex;
|
|
207
|
-
console.error(`Get Metadata failed: ${error.message}`);
|
|
138
|
+
const result = (await Promise.all(
|
|
139
|
+
maxNftsArray.map(async (_value, i) => {
|
|
140
|
+
const tokenId = await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block })) ?? BigInt(i);
|
|
141
|
+
if (tokenId !== void 0) {
|
|
142
|
+
const supply = finalTypes.includes(toTokenType("ERC1155")) ? await tryCall(async () => await supply1155["totalSupply(uint256)"](tokenId)) ?? "0x01" : "0x01";
|
|
143
|
+
const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }));
|
|
144
|
+
const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : void 0;
|
|
145
|
+
let metadata;
|
|
146
|
+
if (checkedMetaDataUri !== void 0) {
|
|
147
|
+
try {
|
|
148
|
+
metadata = (await axios.get(checkedMetaDataUri)).data;
|
|
149
|
+
} catch (ex) {
|
|
150
|
+
const error = ex;
|
|
151
|
+
console.error(`Get Metadata failed: ${error.message}`);
|
|
152
|
+
}
|
|
208
153
|
}
|
|
154
|
+
const info = {
|
|
155
|
+
address: contractAddress,
|
|
156
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
157
|
+
metadata,
|
|
158
|
+
metadataUri,
|
|
159
|
+
schema: NftSchema,
|
|
160
|
+
supply: `0x${supply.toString(16)}`,
|
|
161
|
+
tokenId: `0x${tokenId.toString(16)}`,
|
|
162
|
+
type: finalTypes.at(0),
|
|
163
|
+
types: finalTypes
|
|
164
|
+
};
|
|
165
|
+
if (implementation !== contractAddress) {
|
|
166
|
+
info.implementation = implementation;
|
|
167
|
+
}
|
|
168
|
+
return info;
|
|
209
169
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
chainId: Number((await provider.getNetwork()).chainId),
|
|
213
|
-
metadata,
|
|
214
|
-
metadataUri,
|
|
215
|
-
schema: NftSchema,
|
|
216
|
-
supply: `0x${supply.toString(16)}`,
|
|
217
|
-
tokenId: `0x${tokenId.toString(16)}`,
|
|
218
|
-
type: finalTypes.at(0),
|
|
219
|
-
types: finalTypes
|
|
220
|
-
};
|
|
221
|
-
if (implementation !== contractAddress) {
|
|
222
|
-
info.implementation = implementation;
|
|
223
|
-
}
|
|
224
|
-
return info;
|
|
225
|
-
}
|
|
226
|
-
}))).filter(exists);
|
|
170
|
+
})
|
|
171
|
+
)).filter(exists);
|
|
227
172
|
return result;
|
|
228
173
|
} catch (ex) {
|
|
229
174
|
const error = ex;
|
|
@@ -231,7 +176,7 @@ var getNftCollectionNfts = /* @__PURE__ */ __name(async (contractAddress, provid
|
|
|
231
176
|
console.log(error.stack);
|
|
232
177
|
return [];
|
|
233
178
|
}
|
|
234
|
-
}
|
|
179
|
+
};
|
|
235
180
|
|
|
236
181
|
// src/Plugin.ts
|
|
237
182
|
import { NftSchema as NftSchema2 } from "@xyo-network/crypto-nft-payload-plugin";
|
|
@@ -241,7 +186,11 @@ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
|
|
|
241
186
|
// src/Witness.ts
|
|
242
187
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
243
188
|
import { EthAddress } from "@xylabs/eth-address";
|
|
244
|
-
import {
|
|
189
|
+
import {
|
|
190
|
+
isNftCollectionWitnessQuery,
|
|
191
|
+
NftCollectionSchema,
|
|
192
|
+
NftCollectionWitnessConfigSchema
|
|
193
|
+
} from "@xyo-network/crypto-nft-collection-payload-plugin";
|
|
245
194
|
import { ERC721Enumerable__factory as ERC721Enumerable__factory2 } from "@xyo-network/open-zeppelin-typechain";
|
|
246
195
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
247
196
|
import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
|
|
@@ -253,72 +202,69 @@ function resolvedValue(settled, assert) {
|
|
|
253
202
|
}
|
|
254
203
|
return settled.status === "fulfilled" ? settled.value : void 0;
|
|
255
204
|
}
|
|
256
|
-
|
|
257
|
-
|
|
205
|
+
var CryptoNftCollectionWitness = class extends AbstractEvmWitness {
|
|
206
|
+
static configSchemas = [...super.configSchemas, NftCollectionWitnessConfigSchema];
|
|
207
|
+
static defaultConfigSchema = NftCollectionWitnessConfigSchema;
|
|
258
208
|
async observeHandler(payloads) {
|
|
259
209
|
await this.started("throw");
|
|
260
210
|
await this.getProviders();
|
|
261
|
-
const queries =
|
|
262
|
-
const observations = await Promise.all(
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
erc721Enumerable.
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
211
|
+
const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? [];
|
|
212
|
+
const observations = await Promise.all(
|
|
213
|
+
queries.map(async (query) => {
|
|
214
|
+
const chainId = assertEx2(query?.chainId || this.config.chainId, () => "params.chainId is required");
|
|
215
|
+
const provider = await this.getProvider(true, true);
|
|
216
|
+
const address = assertEx2(
|
|
217
|
+
EthAddress.parse(assertEx2(query?.address || this.config.address, () => "params.address is required")),
|
|
218
|
+
() => "Failed to parse params.address"
|
|
219
|
+
).toString();
|
|
220
|
+
const erc721Enumerable = ERC721Enumerable__factory2.connect(address, provider);
|
|
221
|
+
const maxNfts = query?.maxNfts || defaultMaxNfts;
|
|
222
|
+
const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([
|
|
223
|
+
erc721Enumerable.name(),
|
|
224
|
+
erc721Enumerable.symbol(),
|
|
225
|
+
erc721Enumerable.totalSupply(),
|
|
226
|
+
tokenTypes(provider, address),
|
|
227
|
+
this.archivistInstance()
|
|
228
|
+
]);
|
|
229
|
+
const types = resolvedValue(typesSettled, true);
|
|
230
|
+
const nfts = await getNftCollectionNfts(address, provider, types, maxNfts);
|
|
231
|
+
const metrics = getNftCollectionMetrics(nfts);
|
|
232
|
+
const archivist = resolvedValue(archivistSettled);
|
|
233
|
+
const [sources] = await Promise.all([
|
|
234
|
+
// Hash all the payloads
|
|
235
|
+
Promise.all(nfts.map((nft) => PayloadBuilder.dataHash(nft))),
|
|
236
|
+
// Insert them into the archivist if we have one
|
|
237
|
+
archivist ? archivist.insert(nfts) : NoOp
|
|
238
|
+
]);
|
|
239
|
+
const payload = {
|
|
240
|
+
address,
|
|
241
|
+
chainId,
|
|
242
|
+
metrics,
|
|
243
|
+
name: resolvedValue(name, true),
|
|
244
|
+
schema: NftCollectionSchema,
|
|
245
|
+
sources,
|
|
246
|
+
symbol: resolvedValue(symbol, true),
|
|
247
|
+
total: Number(resolvedValue(total, true)),
|
|
248
|
+
type: types.at(0),
|
|
249
|
+
types
|
|
250
|
+
};
|
|
251
|
+
return payload;
|
|
252
|
+
})
|
|
253
|
+
);
|
|
299
254
|
return observations.flat();
|
|
300
255
|
}
|
|
301
256
|
};
|
|
302
|
-
__name(_CryptoNftCollectionWitness, "CryptoNftCollectionWitness");
|
|
303
|
-
__publicField(_CryptoNftCollectionWitness, "configSchemas", [
|
|
304
|
-
...__superGet(_CryptoNftCollectionWitness, _CryptoNftCollectionWitness, "configSchemas"),
|
|
305
|
-
NftCollectionWitnessConfigSchema
|
|
306
|
-
]);
|
|
307
|
-
__publicField(_CryptoNftCollectionWitness, "defaultConfigSchema", NftCollectionWitnessConfigSchema);
|
|
308
|
-
var CryptoNftCollectionWitness = _CryptoNftCollectionWitness;
|
|
309
257
|
|
|
310
258
|
// src/Plugin.ts
|
|
311
|
-
var CryptoNftCollectionWitnessPlugin =
|
|
312
|
-
required: {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}, "witness")
|
|
321
|
-
}), "CryptoNftCollectionWitnessPlugin");
|
|
259
|
+
var CryptoNftCollectionWitnessPlugin = () => createPayloadSetWitnessPlugin(
|
|
260
|
+
{ required: { [NftSchema2]: 1 }, schema: PayloadSetSchema },
|
|
261
|
+
{
|
|
262
|
+
witness: async (params) => {
|
|
263
|
+
const result = await CryptoNftCollectionWitness.create(params);
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
);
|
|
322
268
|
export {
|
|
323
269
|
CryptoNftCollectionWitness,
|
|
324
270
|
CryptoNftCollectionWitnessPlugin,
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts","../../src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts","../../src/lib/collectionMetrics/getNftCollectionMetrics.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftCollectionNfts.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { Distribution } from './distribution.ts'\n\nexport const calculateAllPropertiesDistribution = <T>(array: T[]): Distribution<T> => {\n const distribution: Distribution<T> = {}\n\n for (const item of array) {\n for (const property in item) {\n if (Object.prototype.hasOwnProperty.call(item, property)) {\n const value = item[property as keyof T]\n if (value !== undefined && value !== null) {\n const valueString = value.toString()\n if (!distribution[property]) {\n distribution[property] = { [valueString]: 1 }\n } else if (distribution[property]![valueString]) {\n ;(distribution[property] as Record<string, number>)[valueString] += 1\n } else {\n ;(distribution[property] as Record<string, number>)[valueString] = 1\n }\n }\n }\n }\n }\n\n return distribution\n}\n","import { BinomialDistributionParameters } from '@xyo-network/crypto-nft-collection-payload-plugin'\n\n/**\n * Calculates the parameters of a binomial distribution given the number of trials and success probability\n * @param n Number of trials\n * @param p Success probability\n * @returns The binomial distribution parameters\n */\nexport const calculateBinomialParamsFromProbability = (n: number, p: number): BinomialDistributionParameters => {\n // Mean (µ)\n const mean = n * p\n\n // Variance (σ^2)\n const variance = n * p * (1 - p)\n\n // Standard Deviation (σ)\n const stdDev = Math.sqrt(variance)\n\n return { mean, p, stdDev, variance }\n}\n","import { NftCollectionMetrics, NftTraitMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { NftInfoFields, OpenSeaNftAttribute } from '@xyo-network/crypto-nft-payload-plugin'\n\nimport { calculateAllPropertiesDistribution, calculateBinomialParamsFromProbability } from './lib/index.ts'\n\ntype TraitDistributionEntry = [string, { [key: string]: number }]\n\nexport const getNftCollectionMetrics = (nfts: NftInfoFields[]): NftCollectionMetrics => {\n const traits = nfts\n .map(nft => nft?.metadata?.attributes as OpenSeaNftAttribute[] | undefined)\n .filter((v): v is OpenSeaNftAttribute[] => v !== undefined)\n .map((attributes) => {\n return Object.fromEntries(attributes.map(attribute => [attribute.trait_type, attribute.value]))\n })\n const distribution = calculateAllPropertiesDistribution(traits)\n const n = nfts.length\n const attributes = Object.fromEntries(\n Object.entries(distribution)\n .filter((v): v is TraitDistributionEntry => v[1] !== undefined)\n .map(([trait, entries]) => {\n const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0)\n const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n)\n const values = Object.fromEntries(\n Object.entries(entries).map(([value, traitValueCount]) => {\n const { p } = calculateBinomialParamsFromProbability(n, traitValueCount / n)\n const metrics: NftTraitMetrics = { binomial: { p }, count: traitValueCount }\n return [value, metrics]\n }),\n )\n return [trait, { metrics: { binomial: { p }, count: traitCount }, values }]\n }),\n )\n return { metadata: { attributes } }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Interface, Provider } from 'ethers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (const functionName of functionNames) {\n const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => 'Function not found on interface')\n if (!bytecode.includes(selector.slice(2))) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { isHexZero } from '@xylabs/hex'\nimport { NftInfo, NftMetadata, NftSchema, TokenType, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\n\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nfunction range(size: number, startAt: number = 0): ReadonlyArray<number> {\n return [...Array(size).keys()].map(i => i + startAt)\n}\n\nexport const getNftCollectionNfts = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: Provider,\n types?: TokenType[],\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n maxNfts = 100,\n): Promise<NftInfo[]> => {\n try {\n const block = await provider.getBlockNumber()\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block)\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable = ERC721Enumerable__factory.connect(implementation, provider)\n const storage = ERC721URIStorage__factory.connect(implementation, provider)\n const supply1155 = ERC1155Supply__factory.connect(implementation, provider)\n const finalTypes = types ?? (await tokenTypes(provider, implementation))\n\n const maxNftsArray = range(maxNfts)\n\n const result: NftInfo[] = (\n await Promise.all(\n maxNftsArray.map(async (_value, i) => {\n const tokenId = (await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block }))) ?? BigInt(i)\n if (tokenId !== undefined) {\n const supply\n = finalTypes.includes(toTokenType('ERC1155'))\n ? ((await tryCall(async () => await supply1155['totalSupply(uint256)'](tokenId))) ?? '0x01')\n : '0x01'\n const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }))\n const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : undefined\n let metadata: NftMetadata | undefined\n if (checkedMetaDataUri !== undefined) {\n try {\n metadata = (await axios.get(checkedMetaDataUri)).data\n } catch (ex) {\n const error = ex as Error\n console.error(`Get Metadata failed: ${error.message}`)\n }\n }\n\n const info: NftInfo = {\n address: contractAddress,\n chainId: Number((await provider.getNetwork()).chainId),\n metadata,\n metadataUri,\n schema: NftSchema,\n supply: `0x${supply.toString(16)}`,\n tokenId: `0x${tokenId.toString(16)}`,\n type: finalTypes.at(0),\n types: finalTypes,\n }\n if (implementation !== contractAddress) {\n info.implementation = implementation\n }\n return info\n }\n }),\n )\n ).filter(exists)\n return result\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionNfts failed: [${error.name}] ${error.message}`)\n console.log(error.stack)\n return []\n }\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\n\nimport { contractHasFunctions } from './contractHasFunctions.ts'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC721__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin, PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoNftCollectionWitness } from './Witness.ts'\n\nexport const CryptoNftCollectionWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoNftCollectionWitness> =>\n createPayloadSetWitnessPlugin<CryptoNftCollectionWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoNftCollectionWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n isNftCollectionWitnessQuery,\n NftCollectionInfo,\n NftCollectionSchema,\n NftCollectionWitnessConfig,\n NftCollectionWitnessConfigSchema,\n NftCollectionWitnessQuery,\n} from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftCollectionMetrics, getNftCollectionNfts, tokenTypes } from './lib/index.ts'\n\nexport type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>\n\nconst defaultMaxNfts = 100\n\n/**\n * A \"no operation\" Promise to be used\n * when no action is desired but a Promise\n * is required to be returned\n */\nconst NoOp = Promise.resolve()\n\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert: true): T\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: false): T | undefined\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: boolean) {\n if (assert && settled.status === 'rejected') {\n throw settled.reason\n }\n return settled.status === 'fulfilled' ? settled.value : undefined\n}\n\nexport class CryptoNftCollectionWitness<\n TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams,\n> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftCollectionWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftCollectionWitnessConfigSchema\n\n protected override async observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]> {\n await this.started('throw')\n await this.getProviders() // make sure cache clears\n const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map<Promise<NftCollectionInfo>>(async (query) => {\n const chainId = assertEx(query?.chainId || this.config.chainId, () => 'params.chainId is required')\n const provider = await this.getProvider(true, true)\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, () => 'params.address is required')),\n () => 'Failed to parse params.address',\n ).toString()\n\n const erc721Enumerable = ERC721Enumerable__factory.connect(address, provider)\n\n const maxNfts = query?.maxNfts || defaultMaxNfts\n const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([\n erc721Enumerable.name(),\n erc721Enumerable.symbol(),\n erc721Enumerable.totalSupply(),\n tokenTypes(provider, address),\n this.archivistInstance(),\n ])\n const types = resolvedValue(typesSettled, true)\n const nfts = await getNftCollectionNfts(address, provider, types, maxNfts)\n const metrics = getNftCollectionMetrics(nfts)\n const archivist = resolvedValue(archivistSettled)\n const [sources] = await Promise.all([\n // Hash all the payloads\n Promise.all(nfts.map(nft => PayloadBuilder.dataHash(nft))),\n // Insert them into the archivist if we have one\n archivist ? archivist.insert(nfts) : NoOp,\n ])\n const payload: NftCollectionInfo = {\n address,\n chainId,\n metrics,\n name: resolvedValue(name, true),\n schema: NftCollectionSchema,\n sources,\n symbol: resolvedValue(symbol, true),\n total: Number(resolvedValue(total, true)),\n type: types.at(0),\n types,\n }\n return payload\n }),\n )\n return observations.flat()\n }\n}\n"],"mappings":"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","names":["calculateAllPropertiesDistribution","array","distribution","item","property","Object","prototype","hasOwnProperty","call","value","undefined","valueString","toString","calculateBinomialParamsFromProbability","n","p","mean","variance","stdDev","Math","sqrt","getNftCollectionMetrics","nfts","traits","map","nft","metadata","attributes","filter","v","undefined","Object","fromEntries","attribute","trait_type","value","distribution","calculateAllPropertiesDistribution","n","length","entries","trait","traitCount","values","reduce","prev","curr","p","calculateBinomialParamsFromProbability","traitValueCount","metrics","binomial","count","assertEx","contractHasFunctions","provider","address","contractInterface","functionNames","bytecode","getCode","functionName","selector","assertEx","getFunction","includes","slice","ex","error","console","log","AxiosJson","exists","isHexZero","NftSchema","toTokenType","getErc1822SlotStatus","getErc1967SlotStatus","ERC721Enumerable__factory","ERC721URIStorage__factory","ERC1155Supply__factory","checkIpfsUrl","ERC721__factory","ERC1155URIStorage__factory","isErc1155","provider","address","contractHasFunctions","ERC1155URIStorage__factory","createInterface","isErc721","ERC721__factory","tokenTypes","erc721","erc1155","Promise","all","result","push","tryCall","func","name","ex","error","console","log","message","undefined","ipfsGateway","range","size","startAt","Array","keys","map","i","getNftCollectionNfts","contractAddress","provider","types","maxNfts","block","getBlockNumber","erc1967Status","getErc1967SlotStatus","erc1822Status","getErc1822SlotStatus","implementation","slots","isHexZero","axios","AxiosJson","timeout","enumerable","ERC721Enumerable__factory","connect","storage","ERC721URIStorage__factory","supply1155","ERC1155Supply__factory","finalTypes","tokenTypes","maxNftsArray","result","Promise","all","_value","tokenId","tryCall","tokenByIndex","blockTag","BigInt","undefined","supply","includes","toTokenType","metadataUri","tokenURI","checkedMetaDataUri","checkIpfsUrl","metadata","get","data","ex","error","console","message","info","address","chainId","Number","getNetwork","schema","NftSchema","toString","type","at","filter","exists","name","log","stack","NftSchema","PayloadSetSchema","createPayloadSetWitnessPlugin","assertEx","EthAddress","isNftCollectionWitnessQuery","NftCollectionSchema","NftCollectionWitnessConfigSchema","ERC721Enumerable__factory","PayloadBuilder","AbstractEvmWitness","defaultMaxNfts","NoOp","Promise","resolve","resolvedValue","settled","assert","status","reason","value","undefined","CryptoNftCollectionWitness","AbstractEvmWitness","observeHandler","payloads","started","getProviders","queries","filter","isNftCollectionWitnessQuery","observations","all","map","query","chainId","assertEx","config","provider","getProvider","address","EthAddress","parse","toString","erc721Enumerable","ERC721Enumerable__factory","connect","maxNfts","name","symbol","total","typesSettled","archivistSettled","allSettled","totalSupply","tokenTypes","archivistInstance","types","nfts","getNftCollectionNfts","metrics","getNftCollectionMetrics","archivist","sources","nft","PayloadBuilder","dataHash","insert","payload","schema","NftCollectionSchema","Number","type","at","flat","configSchemas","NftCollectionWitnessConfigSchema","defaultConfigSchema","CryptoNftCollectionWitnessPlugin","createPayloadSetWitnessPlugin","required","NftSchema","schema","PayloadSetSchema","witness","params","result","CryptoNftCollectionWitness","create"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts","../../src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts","../../src/lib/collectionMetrics/getNftCollectionMetrics.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftCollectionNfts.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { Distribution } from './distribution.ts'\n\nexport const calculateAllPropertiesDistribution = <T>(array: T[]): Distribution<T> => {\n const distribution: Distribution<T> = {}\n\n for (const item of array) {\n for (const property in item) {\n if (Object.prototype.hasOwnProperty.call(item, property)) {\n const value = item[property as keyof T]\n if (value !== undefined && value !== null) {\n const valueString = value.toString()\n if (!distribution[property]) {\n distribution[property] = { [valueString]: 1 }\n } else if (distribution[property]![valueString]) {\n ;(distribution[property] as Record<string, number>)[valueString] += 1\n } else {\n ;(distribution[property] as Record<string, number>)[valueString] = 1\n }\n }\n }\n }\n }\n\n return distribution\n}\n","import { BinomialDistributionParameters } from '@xyo-network/crypto-nft-collection-payload-plugin'\n\n/**\n * Calculates the parameters of a binomial distribution given the number of trials and success probability\n * @param n Number of trials\n * @param p Success probability\n * @returns The binomial distribution parameters\n */\nexport const calculateBinomialParamsFromProbability = (n: number, p: number): BinomialDistributionParameters => {\n // Mean (µ)\n const mean = n * p\n\n // Variance (σ^2)\n const variance = n * p * (1 - p)\n\n // Standard Deviation (σ)\n const stdDev = Math.sqrt(variance)\n\n return { mean, p, stdDev, variance }\n}\n","import { NftCollectionMetrics, NftTraitMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { NftInfoFields, OpenSeaNftAttribute } from '@xyo-network/crypto-nft-payload-plugin'\n\nimport { calculateAllPropertiesDistribution, calculateBinomialParamsFromProbability } from './lib/index.ts'\n\ntype TraitDistributionEntry = [string, { [key: string]: number }]\n\nexport const getNftCollectionMetrics = (nfts: NftInfoFields[]): NftCollectionMetrics => {\n const traits = nfts\n .map(nft => nft?.metadata?.attributes as OpenSeaNftAttribute[] | undefined)\n .filter((v): v is OpenSeaNftAttribute[] => v !== undefined)\n .map((attributes) => {\n return Object.fromEntries(attributes.map(attribute => [attribute.trait_type, attribute.value]))\n })\n const distribution = calculateAllPropertiesDistribution(traits)\n const n = nfts.length\n const attributes = Object.fromEntries(\n Object.entries(distribution)\n .filter((v): v is TraitDistributionEntry => v[1] !== undefined)\n .map(([trait, entries]) => {\n const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0)\n const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n)\n const values = Object.fromEntries(\n Object.entries(entries).map(([value, traitValueCount]) => {\n const { p } = calculateBinomialParamsFromProbability(n, traitValueCount / n)\n const metrics: NftTraitMetrics = { binomial: { p }, count: traitValueCount }\n return [value, metrics]\n }),\n )\n return [trait, { metrics: { binomial: { p }, count: traitCount }, values }]\n }),\n )\n return { metadata: { attributes } }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Interface, Provider } from 'ethers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (const functionName of functionNames) {\n const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => 'Function not found on interface')\n if (!bytecode.includes(selector.slice(2))) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { isHexZero } from '@xylabs/hex'\nimport { NftInfo, NftMetadata, NftSchema, TokenType, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\n\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nfunction range(size: number, startAt: number = 0): ReadonlyArray<number> {\n return [...Array(size).keys()].map(i => i + startAt)\n}\n\nexport const getNftCollectionNfts = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: Provider,\n types?: TokenType[],\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n maxNfts = 100,\n): Promise<NftInfo[]> => {\n try {\n const block = await provider.getBlockNumber()\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block)\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable = ERC721Enumerable__factory.connect(implementation, provider)\n const storage = ERC721URIStorage__factory.connect(implementation, provider)\n const supply1155 = ERC1155Supply__factory.connect(implementation, provider)\n const finalTypes = types ?? (await tokenTypes(provider, implementation))\n\n const maxNftsArray = range(maxNfts)\n\n const result: NftInfo[] = (\n await Promise.all(\n maxNftsArray.map(async (_value, i) => {\n const tokenId = (await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block }))) ?? BigInt(i)\n if (tokenId !== undefined) {\n const supply\n = finalTypes.includes(toTokenType('ERC1155'))\n ? ((await tryCall(async () => await supply1155['totalSupply(uint256)'](tokenId))) ?? '0x01')\n : '0x01'\n const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }))\n const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : undefined\n let metadata: NftMetadata | undefined\n if (checkedMetaDataUri !== undefined) {\n try {\n metadata = (await axios.get(checkedMetaDataUri)).data\n } catch (ex) {\n const error = ex as Error\n console.error(`Get Metadata failed: ${error.message}`)\n }\n }\n\n const info: NftInfo = {\n address: contractAddress,\n chainId: Number((await provider.getNetwork()).chainId),\n metadata,\n metadataUri,\n schema: NftSchema,\n supply: `0x${supply.toString(16)}`,\n tokenId: `0x${tokenId.toString(16)}`,\n type: finalTypes.at(0),\n types: finalTypes,\n }\n if (implementation !== contractAddress) {\n info.implementation = implementation\n }\n return info\n }\n }),\n )\n ).filter(exists)\n return result\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionNfts failed: [${error.name}] ${error.message}`)\n console.log(error.stack)\n return []\n }\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\n\nimport { contractHasFunctions } from './contractHasFunctions.ts'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC721__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin, PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoNftCollectionWitness } from './Witness.ts'\n\nexport const CryptoNftCollectionWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoNftCollectionWitness> =>\n createPayloadSetWitnessPlugin<CryptoNftCollectionWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoNftCollectionWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n isNftCollectionWitnessQuery,\n NftCollectionInfo,\n NftCollectionSchema,\n NftCollectionWitnessConfig,\n NftCollectionWitnessConfigSchema,\n NftCollectionWitnessQuery,\n} from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftCollectionMetrics, getNftCollectionNfts, tokenTypes } from './lib/index.ts'\n\nexport type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>\n\nconst defaultMaxNfts = 100\n\n/**\n * A \"no operation\" Promise to be used\n * when no action is desired but a Promise\n * is required to be returned\n */\nconst NoOp = Promise.resolve()\n\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert: true): T\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: false): T | undefined\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: boolean) {\n if (assert && settled.status === 'rejected') {\n throw settled.reason\n }\n return settled.status === 'fulfilled' ? settled.value : undefined\n}\n\nexport class CryptoNftCollectionWitness<\n TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams,\n> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftCollectionWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftCollectionWitnessConfigSchema\n\n protected override async observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]> {\n await this.started('throw')\n await this.getProviders() // make sure cache clears\n const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map<Promise<NftCollectionInfo>>(async (query) => {\n const chainId = assertEx(query?.chainId || this.config.chainId, () => 'params.chainId is required')\n const provider = await this.getProvider(true, true)\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, () => 'params.address is required')),\n () => 'Failed to parse params.address',\n ).toString()\n\n const erc721Enumerable = ERC721Enumerable__factory.connect(address, provider)\n\n const maxNfts = query?.maxNfts || defaultMaxNfts\n const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([\n erc721Enumerable.name(),\n erc721Enumerable.symbol(),\n erc721Enumerable.totalSupply(),\n tokenTypes(provider, address),\n this.archivistInstance(),\n ])\n const types = resolvedValue(typesSettled, true)\n const nfts = await getNftCollectionNfts(address, provider, types, maxNfts)\n const metrics = getNftCollectionMetrics(nfts)\n const archivist = resolvedValue(archivistSettled)\n const [sources] = await Promise.all([\n // Hash all the payloads\n Promise.all(nfts.map(nft => PayloadBuilder.dataHash(nft))),\n // Insert them into the archivist if we have one\n archivist ? archivist.insert(nfts) : NoOp,\n ])\n const payload: NftCollectionInfo = {\n address,\n chainId,\n metrics,\n name: resolvedValue(name, true),\n schema: NftCollectionSchema,\n sources,\n symbol: resolvedValue(symbol, true),\n total: Number(resolvedValue(total, true)),\n type: types.at(0),\n types,\n }\n return payload\n }),\n )\n return observations.flat()\n }\n}\n"],"mappings":"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","names":["attributes","p","NftSchema","assertEx","ERC721Enumerable__factory","assertEx","ERC721Enumerable__factory","NftSchema"]}
|