@xyo-network/crypto-nft-collection-witness-plugin 2.78.3 → 2.78.4
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.cjs +97 -65
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +98 -66
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/contractHasFunctions.d.cts +4 -0
- package/dist/browser/lib/contractHasFunctions.d.cts.map +1 -0
- package/dist/browser/lib/contractHasFunctions.d.mts +4 -0
- package/dist/browser/lib/contractHasFunctions.d.mts.map +1 -0
- package/dist/browser/lib/contractHasFunctions.d.ts +4 -0
- package/dist/browser/lib/contractHasFunctions.d.ts.map +1 -0
- package/dist/browser/lib/getNftCollectionNfts.d.cts.map +1 -1
- package/dist/browser/lib/getNftCollectionNfts.d.mts.map +1 -1
- package/dist/browser/lib/getNftCollectionNfts.d.ts.map +1 -1
- package/dist/browser/lib/getProviderFromEnv.d.cts +3 -2
- package/dist/browser/lib/getProviderFromEnv.d.cts.map +1 -1
- package/dist/browser/lib/getProviderFromEnv.d.mts +3 -2
- package/dist/browser/lib/getProviderFromEnv.d.mts.map +1 -1
- package/dist/browser/lib/getProviderFromEnv.d.ts +3 -2
- package/dist/browser/lib/getProviderFromEnv.d.ts.map +1 -1
- package/dist/browser/lib/index.d.cts +1 -0
- package/dist/browser/lib/index.d.cts.map +1 -1
- package/dist/browser/lib/index.d.mts +1 -0
- package/dist/browser/lib/index.d.mts.map +1 -1
- package/dist/browser/lib/index.d.ts +1 -0
- package/dist/browser/lib/index.d.ts.map +1 -1
- package/dist/browser/lib/tokenTypes.d.cts +4 -6
- package/dist/browser/lib/tokenTypes.d.cts.map +1 -1
- package/dist/browser/lib/tokenTypes.d.mts +4 -6
- package/dist/browser/lib/tokenTypes.d.mts.map +1 -1
- package/dist/browser/lib/tokenTypes.d.ts +4 -6
- package/dist/browser/lib/tokenTypes.d.ts.map +1 -1
- package/dist/browser/lib/tryCall.d.cts +2 -0
- package/dist/browser/lib/tryCall.d.cts.map +1 -0
- package/dist/browser/lib/tryCall.d.mts +2 -0
- package/dist/browser/lib/tryCall.d.mts.map +1 -0
- package/dist/browser/lib/tryCall.d.ts +2 -0
- package/dist/browser/lib/tryCall.d.ts.map +1 -0
- package/dist/node/index.js +99 -66
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +98 -66
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/contractHasFunctions.d.cts +4 -0
- package/dist/node/lib/contractHasFunctions.d.cts.map +1 -0
- package/dist/node/lib/contractHasFunctions.d.mts +4 -0
- package/dist/node/lib/contractHasFunctions.d.mts.map +1 -0
- package/dist/node/lib/contractHasFunctions.d.ts +4 -0
- package/dist/node/lib/contractHasFunctions.d.ts.map +1 -0
- package/dist/node/lib/getNftCollectionNfts.d.cts.map +1 -1
- package/dist/node/lib/getNftCollectionNfts.d.mts.map +1 -1
- package/dist/node/lib/getNftCollectionNfts.d.ts.map +1 -1
- package/dist/node/lib/getProviderFromEnv.d.cts +3 -2
- package/dist/node/lib/getProviderFromEnv.d.cts.map +1 -1
- package/dist/node/lib/getProviderFromEnv.d.mts +3 -2
- package/dist/node/lib/getProviderFromEnv.d.mts.map +1 -1
- package/dist/node/lib/getProviderFromEnv.d.ts +3 -2
- package/dist/node/lib/getProviderFromEnv.d.ts.map +1 -1
- package/dist/node/lib/index.d.cts +1 -0
- package/dist/node/lib/index.d.cts.map +1 -1
- package/dist/node/lib/index.d.mts +1 -0
- package/dist/node/lib/index.d.mts.map +1 -1
- package/dist/node/lib/index.d.ts +1 -0
- package/dist/node/lib/index.d.ts.map +1 -1
- package/dist/node/lib/tokenTypes.d.cts +4 -6
- package/dist/node/lib/tokenTypes.d.cts.map +1 -1
- package/dist/node/lib/tokenTypes.d.mts +4 -6
- package/dist/node/lib/tokenTypes.d.mts.map +1 -1
- package/dist/node/lib/tokenTypes.d.ts +4 -6
- package/dist/node/lib/tokenTypes.d.ts.map +1 -1
- package/dist/node/lib/tryCall.d.cts +2 -0
- package/dist/node/lib/tryCall.d.cts.map +1 -0
- package/dist/node/lib/tryCall.d.mts +2 -0
- package/dist/node/lib/tryCall.d.mts.map +1 -0
- package/dist/node/lib/tryCall.d.ts +2 -0
- package/dist/node/lib/tryCall.d.ts.map +1 -0
- package/package.json +14 -14
- package/src/Witness.ts +1 -1
- package/src/lib/contractHasFunctions.ts +20 -0
- package/src/lib/getNftCollectionNfts.ts +44 -35
- package/src/lib/getProviderFromEnv.ts +19 -7
- package/src/lib/index.ts +1 -0
- package/src/lib/tokenTypes.ts +8 -19
- package/src/lib/tryCall.ts +11 -0
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Contract } from '@ethersproject/contracts';
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
3
2
|
import { TokenType } from '@xyo-network/crypto-nft-payload-plugin';
|
|
4
|
-
export declare const isErc1155: (
|
|
5
|
-
export declare const isErc721: (
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const tokenTypes: (contract: Contract) => Promise<TokenType[]>;
|
|
3
|
+
export declare const isErc1155: (provider: Provider, address: string) => Promise<boolean>;
|
|
4
|
+
export declare const isErc721: (provider: Provider, address: string) => Promise<boolean>;
|
|
5
|
+
export declare const tokenTypes: (provider: Provider, address: string) => Promise<TokenType[]>;
|
|
8
6
|
//# sourceMappingURL=tokenTypes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tokenTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAKlE,eAAO,MAAM,SAAS,aAAoB,QAAQ,WAAW,MAAM,qBAElE,CAAA;AAED,eAAO,MAAM,QAAQ,aAAoB,QAAQ,WAAW,MAAM,qBAEjE,CAAA;AAED,eAAO,MAAM,UAAU,aAAoB,QAAQ,WAAW,MAAM,yBAUnE,CAAA"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Contract } from '@ethersproject/contracts';
|
|
1
|
+
import { Provider } from '@ethersproject/providers';
|
|
3
2
|
import { TokenType } from '@xyo-network/crypto-nft-payload-plugin';
|
|
4
|
-
export declare const isErc1155: (
|
|
5
|
-
export declare const isErc721: (
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const tokenTypes: (contract: Contract) => Promise<TokenType[]>;
|
|
3
|
+
export declare const isErc1155: (provider: Provider, address: string) => Promise<boolean>;
|
|
4
|
+
export declare const isErc721: (provider: Provider, address: string) => Promise<boolean>;
|
|
5
|
+
export declare const tokenTypes: (provider: Provider, address: string) => Promise<TokenType[]>;
|
|
8
6
|
//# sourceMappingURL=tokenTypes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tokenTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAKlE,eAAO,MAAM,SAAS,aAAoB,QAAQ,WAAW,MAAM,qBAElE,CAAA;AAED,eAAO,MAAM,QAAQ,aAAoB,QAAQ,WAAW,MAAM,qBAEjE,CAAA;AAED,eAAO,MAAM,UAAU,aAAoB,QAAQ,WAAW,MAAM,yBAUnE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tryCall.d.ts","sourceRoot":"","sources":["../../../src/lib/tryCall.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,qCAA4C,MAAM,2BAUrE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tryCall.d.ts","sourceRoot":"","sources":["../../../src/lib/tryCall.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,qCAA4C,MAAM,2BAUrE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tryCall.d.ts","sourceRoot":"","sources":["../../../src/lib/tryCall.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,qCAA4C,MAAM,2BAUrE,CAAA"}
|
package/package.json
CHANGED
|
@@ -15,23 +15,23 @@
|
|
|
15
15
|
"@ethersproject/providers": "^5.7.2",
|
|
16
16
|
"@xylabs/assert": "^2.13.3",
|
|
17
17
|
"@xylabs/eth-address": "^2.13.3",
|
|
18
|
-
"@xyo-network/abstract-witness": "~2.78.
|
|
19
|
-
"@xyo-network/axios": "~2.78.
|
|
20
|
-
"@xyo-network/core": "~2.78.
|
|
21
|
-
"@xyo-network/crypto-nft-collection-payload-plugin": "~2.78.
|
|
22
|
-
"@xyo-network/crypto-nft-payload-plugin": "~2.78.
|
|
23
|
-
"@xyo-network/module-model": "~2.78.
|
|
18
|
+
"@xyo-network/abstract-witness": "~2.78.4",
|
|
19
|
+
"@xyo-network/axios": "~2.78.4",
|
|
20
|
+
"@xyo-network/core": "~2.78.4",
|
|
21
|
+
"@xyo-network/crypto-nft-collection-payload-plugin": "~2.78.4",
|
|
22
|
+
"@xyo-network/crypto-nft-payload-plugin": "~2.78.4",
|
|
23
|
+
"@xyo-network/module-model": "~2.78.4",
|
|
24
24
|
"@xyo-network/open-zeppelin-typechain": "^2.2.11",
|
|
25
|
-
"@xyo-network/payload-model": "~2.78.
|
|
26
|
-
"@xyo-network/payloadset-plugin": "~2.78.
|
|
27
|
-
"@xyo-network/witness-model": "~2.78.
|
|
25
|
+
"@xyo-network/payload-model": "~2.78.4",
|
|
26
|
+
"@xyo-network/payloadset-plugin": "~2.78.4",
|
|
27
|
+
"@xyo-network/witness-model": "~2.78.4"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@xylabs/jest-helpers": "^2.13.3",
|
|
31
|
-
"@xylabs/ts-scripts-yarn3": "^3.1.
|
|
32
|
-
"@xylabs/tsconfig": "^3.1.
|
|
33
|
-
"@xyo-network/account": "~2.78.
|
|
34
|
-
"@xyo-network/account-model": "~2.78.
|
|
31
|
+
"@xylabs/ts-scripts-yarn3": "^3.1.21",
|
|
32
|
+
"@xylabs/tsconfig": "^3.1.21",
|
|
33
|
+
"@xyo-network/account": "~2.78.4",
|
|
34
|
+
"@xyo-network/account-model": "~2.78.4",
|
|
35
35
|
"ethers": "^5.7.2",
|
|
36
36
|
"jest": "^29.7.0",
|
|
37
37
|
"typescript": "^5.2.2"
|
|
@@ -76,5 +76,5 @@
|
|
|
76
76
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
77
77
|
},
|
|
78
78
|
"sideEffects": false,
|
|
79
|
-
"version": "2.78.
|
|
79
|
+
"version": "2.78.4"
|
|
80
80
|
}
|
package/src/Witness.ts
CHANGED
|
@@ -75,7 +75,7 @@ export class CryptoNftCollectionWitness<TParams extends CryptoNftCollectionWitne
|
|
|
75
75
|
await erc721Enumerable.name(),
|
|
76
76
|
await erc721Enumerable.symbol(),
|
|
77
77
|
(await erc721Enumerable.totalSupply()).toNumber(),
|
|
78
|
-
await tokenTypes(
|
|
78
|
+
await tokenTypes(provider, address),
|
|
79
79
|
await this.writeArchivist(),
|
|
80
80
|
])
|
|
81
81
|
const types = resolvedValue(typesSettled, true)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi'
|
|
2
|
+
import { Provider } from '@ethersproject/providers'
|
|
3
|
+
|
|
4
|
+
export const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {
|
|
5
|
+
try {
|
|
6
|
+
const bytecode = await provider.getCode(address, 'latest')
|
|
7
|
+
for (let i = 0; i < functionNames.length; i++) {
|
|
8
|
+
const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)
|
|
9
|
+
if (!bytecode.includes(nameSig)) {
|
|
10
|
+
return false
|
|
11
|
+
}
|
|
12
|
+
return true
|
|
13
|
+
}
|
|
14
|
+
return false
|
|
15
|
+
} catch (ex) {
|
|
16
|
+
const error = ex as Error
|
|
17
|
+
console.log(error)
|
|
18
|
+
return false
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -3,8 +3,8 @@ import { AxiosJson } from '@xyo-network/axios'
|
|
|
3
3
|
import { NftInfo, NftMetadata, NftSchema, TokenType, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'
|
|
4
4
|
import { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'
|
|
5
5
|
|
|
6
|
-
import { nonEvaluableContractAddresses } from './nonEvaluableContractAddresses'
|
|
7
6
|
import { tokenTypes } from './tokenTypes'
|
|
7
|
+
import { tryCall } from './tryCall'
|
|
8
8
|
|
|
9
9
|
const ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'
|
|
10
10
|
|
|
@@ -48,42 +48,51 @@ export const getNftCollectionNfts = async (
|
|
|
48
48
|
*/
|
|
49
49
|
maxNfts = 100,
|
|
50
50
|
): Promise<NftInfo[]> => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const finalTypes = types ?? (await tokenTypes(enumerable))
|
|
59
|
-
const result: NftInfo[] = []
|
|
51
|
+
try {
|
|
52
|
+
const axios = new AxiosJson({ timeout: 2000 })
|
|
53
|
+
const enumerable = ERC721Enumerable__factory.connect(contractAddress, provider)
|
|
54
|
+
const storage = ERC721URIStorage__factory.connect(contractAddress, provider)
|
|
55
|
+
const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)
|
|
56
|
+
const finalTypes = types ?? (await tokenTypes(provider, contractAddress))
|
|
57
|
+
const result: NftInfo[] = []
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
for (let i = 0; i < maxNfts; i++) {
|
|
60
|
+
const tokenId = await tryCall(async () => (await enumerable.tokenByIndex(i)).toHexString())
|
|
61
|
+
if (tokenId !== undefined) {
|
|
62
|
+
const supply = finalTypes.includes(toTokenType('ERC1155'))
|
|
63
|
+
? (await tryCall(async () => (await supply1155.totalSupply(tokenId)).toHexString())) ?? '0x01'
|
|
64
|
+
: '0x01'
|
|
65
|
+
const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId))
|
|
66
|
+
const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : undefined
|
|
67
|
+
let metadata: NftMetadata | undefined = undefined
|
|
68
|
+
if (checkedMetaDataUri !== undefined) {
|
|
69
|
+
try {
|
|
70
|
+
metadata = (await axios.get(checkedMetaDataUri)).data
|
|
71
|
+
} catch (ex) {
|
|
72
|
+
const error = ex as Error
|
|
73
|
+
console.error(`Get Metadata failed: ${error.message}`)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
const info: NftInfo = {
|
|
78
|
+
address: contractAddress,
|
|
79
|
+
chainId: provider.network.chainId,
|
|
80
|
+
metadata,
|
|
81
|
+
metadataUri,
|
|
82
|
+
schema: NftSchema,
|
|
83
|
+
supply,
|
|
84
|
+
tokenId,
|
|
85
|
+
type: finalTypes.at(0),
|
|
86
|
+
types: finalTypes,
|
|
87
|
+
}
|
|
88
|
+
result.push(info)
|
|
89
|
+
}
|
|
85
90
|
}
|
|
86
|
-
result
|
|
91
|
+
return result
|
|
92
|
+
} catch (ex) {
|
|
93
|
+
const error = ex as Error
|
|
94
|
+
console.error(`getNftCollectionNfts failed: [${error.name}] ${error.message}`)
|
|
95
|
+
console.log(error.stack)
|
|
96
|
+
return []
|
|
87
97
|
}
|
|
88
|
-
return result
|
|
89
98
|
}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
import { InfuraProvider, WebSocketProvider } from '@ethersproject/providers'
|
|
1
|
+
import { InfuraProvider, JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const getProviderFromEnvInternal = (chainId: number = 0x01) => {
|
|
4
|
+
console.log(`getProviderFromEnvInternal: ${chainId}`)
|
|
4
5
|
const infuraWssUri = process.env.INFURA_WSS_URI
|
|
5
|
-
const infuraProvider = new InfuraProvider(
|
|
6
|
+
const infuraProvider = new InfuraProvider(chainId, {
|
|
6
7
|
projectId: process.env.INFURA_PROJECT_ID,
|
|
7
8
|
projectSecret: process.env.INFURA_PROJECT_SECRET,
|
|
8
9
|
})
|
|
9
10
|
|
|
10
|
-
const
|
|
11
|
+
const infuraGenericWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
-
const
|
|
13
|
+
const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI
|
|
14
|
+
const quickNodeWebSocketProvider = quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : undefined
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
+
const quickNodeHttpsUri = process.env.QUICKNODE_WSS_URI
|
|
17
|
+
const quickRpcProvider = quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : undefined
|
|
18
|
+
|
|
19
|
+
const provider = infuraProvider ?? quickNodeWebSocketProvider ?? infuraProvider ?? infuraGenericWebsocketProvider ?? quickRpcProvider
|
|
16
20
|
return provider
|
|
17
21
|
}
|
|
22
|
+
|
|
23
|
+
const providers: Record<number, JsonRpcProvider | WebSocketProvider> = {}
|
|
24
|
+
|
|
25
|
+
export const getProviderFromEnv = (chainId: number = 0x01) => {
|
|
26
|
+
console.log(`getProviderFromEnv: ${chainId}`)
|
|
27
|
+
providers[chainId] = providers[chainId] ?? getProviderFromEnvInternal(chainId)
|
|
28
|
+
return providers[chainId]
|
|
29
|
+
}
|
package/src/lib/index.ts
CHANGED
package/src/lib/tokenTypes.ts
CHANGED
|
@@ -1,30 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Contract } from '@ethersproject/contracts'
|
|
1
|
+
import { Provider } from '@ethersproject/providers'
|
|
3
2
|
import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'
|
|
4
3
|
import { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
return await hasFunctions(contract, ERC1155URIStorage__factory.createInterface(), ['uri'])
|
|
8
|
-
}
|
|
5
|
+
import { contractHasFunctions } from './contractHasFunctions'
|
|
9
6
|
|
|
10
|
-
export const
|
|
11
|
-
return await
|
|
7
|
+
export const isErc1155 = async (provider: Provider, address: string) => {
|
|
8
|
+
return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])
|
|
12
9
|
}
|
|
13
10
|
|
|
14
|
-
export const
|
|
15
|
-
|
|
16
|
-
for (let i = 0; i < functionNames.length; i++) {
|
|
17
|
-
const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)
|
|
18
|
-
if (!bytecode.includes(nameSig)) {
|
|
19
|
-
return false
|
|
20
|
-
}
|
|
21
|
-
return true
|
|
22
|
-
}
|
|
23
|
-
return false
|
|
11
|
+
export const isErc721 = async (provider: Provider, address: string) => {
|
|
12
|
+
return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])
|
|
24
13
|
}
|
|
25
14
|
|
|
26
|
-
export const tokenTypes = async (
|
|
27
|
-
const [erc721, erc1155] = await Promise.all([isErc721(
|
|
15
|
+
export const tokenTypes = async (provider: Provider, address: string) => {
|
|
16
|
+
const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])
|
|
28
17
|
const result: TokenType[] = []
|
|
29
18
|
if (erc721) {
|
|
30
19
|
result.push('ERC721')
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {
|
|
2
|
+
try {
|
|
3
|
+
return await func()
|
|
4
|
+
} catch (ex) {
|
|
5
|
+
if (name) {
|
|
6
|
+
const error = ex as Error
|
|
7
|
+
console.log(`tryCall failed [${name}]: ${error.message}`)
|
|
8
|
+
}
|
|
9
|
+
return undefined
|
|
10
|
+
}
|
|
11
|
+
}
|