@xyo-network/evm-token-interface-diviner 6.0.3 → 7.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/README.md +5 -0
- package/dist/neutral/Payload.d.ts +116 -24
- package/dist/neutral/Payload.d.ts.map +1 -1
- package/dist/neutral/index.mjs +53 -3
- package/dist/neutral/index.mjs.map +2 -2
- package/package.json +28 -36
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[![logo][]](https://xyo.network)
|
|
2
|
+
|
|
1
3
|
# @xyo-network/evm-token-interface-diviner
|
|
2
4
|
|
|
3
5
|
[![npm][npm-badge]][npm-link]
|
|
@@ -36,9 +38,12 @@ bun add {{name}}
|
|
|
36
38
|
|
|
37
39
|
See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
|
|
38
40
|
|
|
41
|
+
## Credits
|
|
39
42
|
|
|
43
|
+
[Made with 🔥 and ❄️ by XYO Foundation](https://xyo.network)
|
|
40
44
|
|
|
41
45
|
[npm-badge]: https://img.shields.io/npm/v/@xyo-network/evm-token-interface-diviner.svg
|
|
42
46
|
[npm-link]: https://www.npmjs.com/package/@xyo-network/evm-token-interface-diviner
|
|
43
47
|
[license-badge]: https://img.shields.io/npm/l/@xyo-network/evm-token-interface-diviner.svg
|
|
44
48
|
[license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
|
|
49
|
+
[logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
|
|
@@ -1,20 +1,58 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from 'zod/mini';
|
|
2
2
|
/**
|
|
3
3
|
* ERC20 Token Interfaces
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export declare const ERC20TokenInterfacesZod: z.ZodMiniEnum<{
|
|
6
|
+
ERC20: "ERC20";
|
|
7
|
+
}>;
|
|
8
|
+
/**
|
|
9
|
+
* ERC20 Token Interfaces
|
|
10
|
+
*/
|
|
11
|
+
export type ERC20TokenInterfaces = z.infer<typeof ERC20TokenInterfacesZod>;
|
|
12
|
+
/**
|
|
13
|
+
* ERC721 Token Interfaces
|
|
14
|
+
*/
|
|
15
|
+
export declare const ERC721TokenInterfacesZod: z.ZodMiniEnum<{
|
|
16
|
+
ERC721: "ERC721";
|
|
17
|
+
ERC721TokenReceiver: "ERC721TokenReceiver";
|
|
18
|
+
ERC721Metadata: "ERC721Metadata";
|
|
19
|
+
ERC721Enumerable: "ERC721Enumerable";
|
|
20
|
+
}>;
|
|
6
21
|
/**
|
|
7
22
|
* ERC721 Token Interfaces
|
|
8
23
|
*/
|
|
9
|
-
export type ERC721TokenInterfaces =
|
|
24
|
+
export type ERC721TokenInterfaces = z.infer<typeof ERC721TokenInterfacesZod>;
|
|
10
25
|
/**
|
|
11
26
|
* ERC1155 Token Interfaces
|
|
12
27
|
*/
|
|
13
|
-
export
|
|
28
|
+
export declare const ERC1155TokenInterfacesZod: z.ZodMiniEnum<{
|
|
29
|
+
ERC1155: "ERC1155";
|
|
30
|
+
ERC1155TokenReceiver: "ERC1155TokenReceiver";
|
|
31
|
+
ERC1155Metadata_URI: "ERC1155Metadata_URI";
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* ERC1155 Token Interfaces
|
|
35
|
+
*/
|
|
36
|
+
export type ERC1155TokenInterfaces = z.infer<typeof ERC1155TokenInterfacesZod>;
|
|
37
|
+
/**
|
|
38
|
+
* All Token Interfaces
|
|
39
|
+
*/
|
|
40
|
+
export declare const TokenInterfaceZod: z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
|
|
41
|
+
ERC20: "ERC20";
|
|
42
|
+
}>, z.ZodMiniEnum<{
|
|
43
|
+
ERC721: "ERC721";
|
|
44
|
+
ERC721TokenReceiver: "ERC721TokenReceiver";
|
|
45
|
+
ERC721Metadata: "ERC721Metadata";
|
|
46
|
+
ERC721Enumerable: "ERC721Enumerable";
|
|
47
|
+
}>, z.ZodMiniEnum<{
|
|
48
|
+
ERC1155: "ERC1155";
|
|
49
|
+
ERC1155TokenReceiver: "ERC1155TokenReceiver";
|
|
50
|
+
ERC1155Metadata_URI: "ERC1155Metadata_URI";
|
|
51
|
+
}>]>;
|
|
14
52
|
/**
|
|
15
53
|
* All Token Interfaces
|
|
16
54
|
*/
|
|
17
|
-
export type TokenInterface =
|
|
55
|
+
export type TokenInterface = z.infer<typeof TokenInterfaceZod>;
|
|
18
56
|
/**
|
|
19
57
|
* The schema for the EVM Token Interface Implemented payload
|
|
20
58
|
*/
|
|
@@ -28,26 +66,80 @@ export type EvmTokenInterfaceImplementedSchema = typeof EvmTokenInterfaceImpleme
|
|
|
28
66
|
/**
|
|
29
67
|
* The EVM Token Interface Implemented payload
|
|
30
68
|
*/
|
|
31
|
-
export
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
address: string
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
export declare const EvmTokenInterfaceImplementedZod: z.ZodMiniObject<{
|
|
70
|
+
schema: z.ZodMiniLiteral<"network.xyo.evm.token.interface.implemented" & {
|
|
71
|
+
readonly __schema: true;
|
|
72
|
+
}>;
|
|
73
|
+
address: z.ZodMiniString<string>;
|
|
74
|
+
chainId: z.ZodMiniNumber<number>;
|
|
75
|
+
implemented: z.ZodMiniBoolean<boolean>;
|
|
76
|
+
tokenInterface: z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
|
|
77
|
+
ERC20: "ERC20";
|
|
78
|
+
}>, z.ZodMiniEnum<{
|
|
79
|
+
ERC721: "ERC721";
|
|
80
|
+
ERC721TokenReceiver: "ERC721TokenReceiver";
|
|
81
|
+
ERC721Metadata: "ERC721Metadata";
|
|
82
|
+
ERC721Enumerable: "ERC721Enumerable";
|
|
83
|
+
}>, z.ZodMiniEnum<{
|
|
84
|
+
ERC1155: "ERC1155";
|
|
85
|
+
ERC1155TokenReceiver: "ERC1155TokenReceiver";
|
|
86
|
+
ERC1155Metadata_URI: "ERC1155Metadata_URI";
|
|
87
|
+
}>]>;
|
|
88
|
+
}, z.core.$strip>;
|
|
89
|
+
/**
|
|
90
|
+
* The EVM Token Interface Implemented payload
|
|
91
|
+
*/
|
|
92
|
+
export type EvmTokenInterfaceImplemented = z.infer<typeof EvmTokenInterfaceImplementedZod>;
|
|
49
93
|
/**
|
|
50
94
|
* Identity function for EvmTokenInterfaceImplemented payload
|
|
51
95
|
*/
|
|
52
|
-
export declare const isEvmTokenInterfaceImplemented: (
|
|
96
|
+
export declare const isEvmTokenInterfaceImplemented: <T>(value: T) => value is T & {
|
|
97
|
+
schema: "network.xyo.evm.token.interface.implemented" & {
|
|
98
|
+
readonly __schema: true;
|
|
99
|
+
};
|
|
100
|
+
address: string;
|
|
101
|
+
chainId: number;
|
|
102
|
+
implemented: boolean;
|
|
103
|
+
tokenInterface: "ERC20" | "ERC721" | "ERC721TokenReceiver" | "ERC721Metadata" | "ERC721Enumerable" | "ERC1155" | "ERC1155TokenReceiver" | "ERC1155Metadata_URI";
|
|
104
|
+
};
|
|
105
|
+
export declare const asEvmTokenInterfaceImplemented: {
|
|
106
|
+
<T>(value: T): (T & {
|
|
107
|
+
schema: "network.xyo.evm.token.interface.implemented" & {
|
|
108
|
+
readonly __schema: true;
|
|
109
|
+
};
|
|
110
|
+
address: string;
|
|
111
|
+
chainId: number;
|
|
112
|
+
implemented: boolean;
|
|
113
|
+
tokenInterface: "ERC20" | "ERC721" | "ERC721TokenReceiver" | "ERC721Metadata" | "ERC721Enumerable" | "ERC1155" | "ERC1155TokenReceiver" | "ERC1155Metadata_URI";
|
|
114
|
+
}) | undefined;
|
|
115
|
+
<T>(value: T, assert: import("@xylabs/sdk-js").ZodFactoryConfig): T & {
|
|
116
|
+
schema: "network.xyo.evm.token.interface.implemented" & {
|
|
117
|
+
readonly __schema: true;
|
|
118
|
+
};
|
|
119
|
+
address: string;
|
|
120
|
+
chainId: number;
|
|
121
|
+
implemented: boolean;
|
|
122
|
+
tokenInterface: "ERC20" | "ERC721" | "ERC721TokenReceiver" | "ERC721Metadata" | "ERC721Enumerable" | "ERC1155" | "ERC1155TokenReceiver" | "ERC1155Metadata_URI";
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
export declare const toEvmTokenInterfaceImplemented: {
|
|
126
|
+
<T>(value: T): (T & {
|
|
127
|
+
schema: "network.xyo.evm.token.interface.implemented" & {
|
|
128
|
+
readonly __schema: true;
|
|
129
|
+
};
|
|
130
|
+
address: string;
|
|
131
|
+
chainId: number;
|
|
132
|
+
implemented: boolean;
|
|
133
|
+
tokenInterface: "ERC20" | "ERC721" | "ERC721TokenReceiver" | "ERC721Metadata" | "ERC721Enumerable" | "ERC1155" | "ERC1155TokenReceiver" | "ERC1155Metadata_URI";
|
|
134
|
+
}) | undefined;
|
|
135
|
+
<T>(value: T, assert: import("@xylabs/sdk-js").ZodFactoryConfig): T & {
|
|
136
|
+
schema: "network.xyo.evm.token.interface.implemented" & {
|
|
137
|
+
readonly __schema: true;
|
|
138
|
+
};
|
|
139
|
+
address: string;
|
|
140
|
+
chainId: number;
|
|
141
|
+
implemented: boolean;
|
|
142
|
+
tokenInterface: "ERC20" | "ERC721" | "ERC721TokenReceiver" | "ERC721Metadata" | "ERC721Enumerable" | "ERC1155" | "ERC1155TokenReceiver" | "ERC1155Metadata_URI";
|
|
143
|
+
};
|
|
144
|
+
};
|
|
53
145
|
//# sourceMappingURL=Payload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B;;GAEG;AACH,eAAO,MAAM,uBAAuB;;EAAoB,CAAA;AAExD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE1E;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE5E;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;EAIpC,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;IAI5B,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,kCAAkC;;CAAgE,CAAA;AAC/G;;GAEG;AACH,MAAM,MAAM,kCAAkC,GAAG,OAAO,kCAAkC,CAAA;AAE1F;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;iBAiB1C,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE1F;;GAEG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;CAAgD,CAAA;AAC3F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;CAAkF,CAAA;AAC7H,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;CAAkF,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -15,9 +15,52 @@ import { AbstractDiviner, asSchema as asSchema2 } from "@xyo-network/sdk-js";
|
|
|
15
15
|
import { Interface } from "ethers";
|
|
16
16
|
|
|
17
17
|
// src/Payload.ts
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
zodAsFactory,
|
|
20
|
+
zodIsFactory,
|
|
21
|
+
zodToFactory
|
|
22
|
+
} from "@xylabs/sdk-js";
|
|
23
|
+
import { asSchema, PayloadZodOfSchema } from "@xyo-network/sdk-js";
|
|
24
|
+
import * as z from "zod/mini";
|
|
25
|
+
var ERC20TokenInterfacesZod = z.enum(["ERC20"]);
|
|
26
|
+
var ERC721TokenInterfacesZod = z.enum([
|
|
27
|
+
"ERC721",
|
|
28
|
+
"ERC721TokenReceiver",
|
|
29
|
+
"ERC721Metadata",
|
|
30
|
+
"ERC721Enumerable"
|
|
31
|
+
]);
|
|
32
|
+
var ERC1155TokenInterfacesZod = z.enum([
|
|
33
|
+
"ERC1155",
|
|
34
|
+
"ERC1155TokenReceiver",
|
|
35
|
+
"ERC1155Metadata_URI"
|
|
36
|
+
]);
|
|
37
|
+
var TokenInterfaceZod = z.union([
|
|
38
|
+
ERC20TokenInterfacesZod,
|
|
39
|
+
ERC721TokenInterfacesZod,
|
|
40
|
+
ERC1155TokenInterfacesZod
|
|
41
|
+
]);
|
|
19
42
|
var EvmTokenInterfaceImplementedSchema = asSchema("network.xyo.evm.token.interface.implemented", true);
|
|
20
|
-
var
|
|
43
|
+
var EvmTokenInterfaceImplementedZod = z.extend(PayloadZodOfSchema(EvmTokenInterfaceImplementedSchema), {
|
|
44
|
+
/**
|
|
45
|
+
* The contract address
|
|
46
|
+
*/
|
|
47
|
+
address: z.string(),
|
|
48
|
+
/**
|
|
49
|
+
* The chain id
|
|
50
|
+
*/
|
|
51
|
+
chainId: z.number(),
|
|
52
|
+
/**
|
|
53
|
+
* True if the contract implements the interface
|
|
54
|
+
*/
|
|
55
|
+
implemented: z.boolean(),
|
|
56
|
+
/**
|
|
57
|
+
* The specific token interface
|
|
58
|
+
*/
|
|
59
|
+
tokenInterface: TokenInterfaceZod
|
|
60
|
+
});
|
|
61
|
+
var isEvmTokenInterfaceImplemented = zodIsFactory(EvmTokenInterfaceImplementedZod);
|
|
62
|
+
var asEvmTokenInterfaceImplemented = zodAsFactory(EvmTokenInterfaceImplementedZod, "asEvmTokenInterfaceImplemented");
|
|
63
|
+
var toEvmTokenInterfaceImplemented = zodToFactory(EvmTokenInterfaceImplementedZod, "toEvmTokenInterfaceImplemented");
|
|
21
64
|
|
|
22
65
|
// src/Diviner.ts
|
|
23
66
|
var EvmTokenInterfaceImplementedDivinerConfigSchema = asSchema2(`${EvmTokenInterfaceImplementedSchema}.diviner.config`, true);
|
|
@@ -86,9 +129,16 @@ var EvmTokenInterfaceImplementedDiviner = class _EvmTokenInterfaceImplementedDiv
|
|
|
86
129
|
}
|
|
87
130
|
};
|
|
88
131
|
export {
|
|
132
|
+
ERC1155TokenInterfacesZod,
|
|
133
|
+
ERC20TokenInterfacesZod,
|
|
134
|
+
ERC721TokenInterfacesZod,
|
|
89
135
|
EvmTokenInterfaceImplementedDiviner,
|
|
90
136
|
EvmTokenInterfaceImplementedDivinerConfigSchema,
|
|
91
137
|
EvmTokenInterfaceImplementedSchema,
|
|
92
|
-
|
|
138
|
+
EvmTokenInterfaceImplementedZod,
|
|
139
|
+
TokenInterfaceZod,
|
|
140
|
+
asEvmTokenInterfaceImplemented,
|
|
141
|
+
isEvmTokenInterfaceImplemented,
|
|
142
|
+
toEvmTokenInterfaceImplemented
|
|
93
143
|
};
|
|
94
144
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Diviner.ts", "../../src/Payload.ts"],
|
|
4
|
-
"sourcesContent": ["import { assertEx } from '@xylabs/sdk-js'\nimport type { EvmContract } from '@xyo-network/evm-contract-witness'\nimport { isEvmContract } from '@xyo-network/evm-contract-witness'\nimport {\n ERC20__factory,\n ERC721__factory,\n ERC1155__factory,\n IERC721Enumerable__factory,\n IERC721Metadata__factory,\n IERC721Receiver__factory,\n IERC1155MetadataURI__factory,\n IERC1155Receiver__factory,\n} from '@xyo-network/open-zeppelin-typechain'\nimport type {\n AnyConfigSchema, DivinerConfig, DivinerParams, Schema,\n} from '@xyo-network/sdk-js'\nimport { AbstractDiviner, asSchema } from '@xyo-network/sdk-js'\nimport type { JsonFragment } from 'ethers'\nimport { Interface } from 'ethers'\n\nimport type { EvmTokenInterfaceImplemented, TokenInterface } from './Payload.ts'\nimport { EvmTokenInterfaceImplementedSchema } from './Payload.ts'\n\nexport const EvmTokenInterfaceImplementedDivinerConfigSchema = asSchema(`${EvmTokenInterfaceImplementedSchema}.diviner.config`, true)\nexport type EvmTokenInterfaceImplementedDivinerConfigSchema = typeof EvmTokenInterfaceImplementedDivinerConfigSchema\n\nexport type EvmTokenInterfaceImplementedDivinerConfig = DivinerConfig<{\n schema: EvmTokenInterfaceImplementedDivinerConfigSchema\n tokenInterfaces?: TokenInterface[]\n}>\n\nexport type EvmTokenInterfaceImplementedDivinerParams = DivinerParams<AnyConfigSchema<EvmTokenInterfaceImplementedDivinerConfig>>\n\ntype DistributiveMappedType<T> = T extends string ? Record<T, readonly JsonFragment[]> : never\ntype TokenInterfaceDictionary = DistributiveMappedType<TokenInterface>\n\n/**\n * A diviner that checks if a contract implements a token interface\n */\nexport class EvmTokenInterfaceImplementedDiviner<\n TParams extends EvmTokenInterfaceImplementedDivinerParams = EvmTokenInterfaceImplementedDivinerParams,\n> extends AbstractDiviner<TParams, EvmContract, EvmTokenInterfaceImplemented> {\n /**\n * The list of supported token interfaces\n */\n static readonly SupportedTokenInterfaces: Readonly<Record<TokenInterface, readonly JsonFragment[]>> = {\n ERC1155: ERC1155__factory.abi,\n ERC1155Metadata_URI: IERC1155MetadataURI__factory.abi,\n ERC1155TokenReceiver: IERC1155Receiver__factory.abi,\n ERC20: ERC20__factory.abi,\n ERC721: ERC721__factory.abi,\n ERC721Enumerable: IERC721Enumerable__factory.abi,\n ERC721Metadata: IERC721Metadata__factory.abi,\n ERC721TokenReceiver: IERC721Receiver__factory.abi,\n }\n\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmTokenInterfaceImplementedDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmTokenInterfaceImplementedDivinerConfigSchema\n\n private _tokenInterfaces?: TokenInterfaceDictionary\n\n /**\n * The list of token interfaces to check against the contract\n */\n get tokenInterfaces() {\n this._tokenInterfaces ??= this.config?.tokenInterfaces\n ? ((Object.fromEntries(\n this.config?.tokenInterfaces.map((tokenInterface) => {\n return [tokenInterface, EvmTokenInterfaceImplementedDiviner.SupportedTokenInterfaces[tokenInterface]] as const\n }),\n ) as TokenInterfaceDictionary) ?? {})\n : EvmTokenInterfaceImplementedDiviner.SupportedTokenInterfaces\n return this._tokenInterfaces\n }\n\n protected override async divineHandler(inPayloads: EvmContract[] = []): Promise<EvmTokenInterfaceImplemented[]> {\n this.started('throw')\n try {\n const allResults = inPayloads.filter(isEvmContract).map(({\n address, code, chainId,\n }) => {\n // Ensure we have the contract code\n const byteCode = assertEx(code, () => 'Missing code')\n const results: EvmTokenInterfaceImplemented[] = []\n // Iterate over each token interface\n for (const [tokenInterface, abi] of Object.entries(this.tokenInterfaces)) {\n // Check if the contract implements the interface abi\n const contractInterface = new Interface(abi)\n const implementations: boolean[] = []\n contractInterface.forEachFunction(({ selector }) => {\n implementations.push(byteCode.includes(BigInt(selector).toString(16)))\n })\n const implemented = implementations.every(Boolean)\n const result: EvmTokenInterfaceImplemented = {\n address,\n chainId,\n implemented,\n schema: EvmTokenInterfaceImplementedSchema,\n tokenInterface: tokenInterface as TokenInterface,\n }\n results.push(result)\n }\n\n return results\n })\n return allResults.flat()\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n", "import
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAAgB;AAEzB,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,iBAAiB,YAAAA,iBAAgB;AAE1C,SAAS,iBAAiB;;;
|
|
4
|
+
"sourcesContent": ["import { assertEx } from '@xylabs/sdk-js'\nimport type { EvmContract } from '@xyo-network/evm-contract-witness'\nimport { isEvmContract } from '@xyo-network/evm-contract-witness'\nimport {\n ERC20__factory,\n ERC721__factory,\n ERC1155__factory,\n IERC721Enumerable__factory,\n IERC721Metadata__factory,\n IERC721Receiver__factory,\n IERC1155MetadataURI__factory,\n IERC1155Receiver__factory,\n} from '@xyo-network/open-zeppelin-typechain'\nimport type {\n AnyConfigSchema, DivinerConfig, DivinerParams, Schema,\n} from '@xyo-network/sdk-js'\nimport { AbstractDiviner, asSchema } from '@xyo-network/sdk-js'\nimport type { JsonFragment } from 'ethers'\nimport { Interface } from 'ethers'\n\nimport type { EvmTokenInterfaceImplemented, TokenInterface } from './Payload.ts'\nimport { EvmTokenInterfaceImplementedSchema } from './Payload.ts'\n\nexport const EvmTokenInterfaceImplementedDivinerConfigSchema = asSchema(`${EvmTokenInterfaceImplementedSchema}.diviner.config`, true)\nexport type EvmTokenInterfaceImplementedDivinerConfigSchema = typeof EvmTokenInterfaceImplementedDivinerConfigSchema\n\nexport type EvmTokenInterfaceImplementedDivinerConfig = DivinerConfig<{\n schema: EvmTokenInterfaceImplementedDivinerConfigSchema\n tokenInterfaces?: TokenInterface[]\n}>\n\nexport type EvmTokenInterfaceImplementedDivinerParams = DivinerParams<AnyConfigSchema<EvmTokenInterfaceImplementedDivinerConfig>>\n\ntype DistributiveMappedType<T> = T extends string ? Record<T, readonly JsonFragment[]> : never\ntype TokenInterfaceDictionary = DistributiveMappedType<TokenInterface>\n\n/**\n * A diviner that checks if a contract implements a token interface\n */\nexport class EvmTokenInterfaceImplementedDiviner<\n TParams extends EvmTokenInterfaceImplementedDivinerParams = EvmTokenInterfaceImplementedDivinerParams,\n> extends AbstractDiviner<TParams, EvmContract, EvmTokenInterfaceImplemented> {\n /**\n * The list of supported token interfaces\n */\n static readonly SupportedTokenInterfaces: Readonly<Record<TokenInterface, readonly JsonFragment[]>> = {\n ERC1155: ERC1155__factory.abi,\n ERC1155Metadata_URI: IERC1155MetadataURI__factory.abi,\n ERC1155TokenReceiver: IERC1155Receiver__factory.abi,\n ERC20: ERC20__factory.abi,\n ERC721: ERC721__factory.abi,\n ERC721Enumerable: IERC721Enumerable__factory.abi,\n ERC721Metadata: IERC721Metadata__factory.abi,\n ERC721TokenReceiver: IERC721Receiver__factory.abi,\n }\n\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmTokenInterfaceImplementedDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmTokenInterfaceImplementedDivinerConfigSchema\n\n private _tokenInterfaces?: TokenInterfaceDictionary\n\n /**\n * The list of token interfaces to check against the contract\n */\n get tokenInterfaces() {\n this._tokenInterfaces ??= this.config?.tokenInterfaces\n ? ((Object.fromEntries(\n this.config?.tokenInterfaces.map((tokenInterface) => {\n return [tokenInterface, EvmTokenInterfaceImplementedDiviner.SupportedTokenInterfaces[tokenInterface]] as const\n }),\n ) as TokenInterfaceDictionary) ?? {})\n : EvmTokenInterfaceImplementedDiviner.SupportedTokenInterfaces\n return this._tokenInterfaces\n }\n\n protected override async divineHandler(inPayloads: EvmContract[] = []): Promise<EvmTokenInterfaceImplemented[]> {\n this.started('throw')\n try {\n const allResults = inPayloads.filter(isEvmContract).map(({\n address, code, chainId,\n }) => {\n // Ensure we have the contract code\n const byteCode = assertEx(code, () => 'Missing code')\n const results: EvmTokenInterfaceImplemented[] = []\n // Iterate over each token interface\n for (const [tokenInterface, abi] of Object.entries(this.tokenInterfaces)) {\n // Check if the contract implements the interface abi\n const contractInterface = new Interface(abi)\n const implementations: boolean[] = []\n contractInterface.forEachFunction(({ selector }) => {\n implementations.push(byteCode.includes(BigInt(selector).toString(16)))\n })\n const implemented = implementations.every(Boolean)\n const result: EvmTokenInterfaceImplemented = {\n address,\n chainId,\n implemented,\n schema: EvmTokenInterfaceImplementedSchema,\n tokenInterface: tokenInterface as TokenInterface,\n }\n results.push(result)\n }\n\n return results\n })\n return allResults.flat()\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { asSchema, PayloadZodOfSchema } from '@xyo-network/sdk-js'\nimport * as z from 'zod/mini'\n\n/**\n * ERC20 Token Interfaces\n */\nexport const ERC20TokenInterfacesZod = z.enum(['ERC20'])\n\n/**\n * ERC20 Token Interfaces\n */\nexport type ERC20TokenInterfaces = z.infer<typeof ERC20TokenInterfacesZod>\n\n/**\n * ERC721 Token Interfaces\n */\nexport const ERC721TokenInterfacesZod = z.enum([\n 'ERC721',\n 'ERC721TokenReceiver',\n 'ERC721Metadata',\n 'ERC721Enumerable',\n])\n\n/**\n * ERC721 Token Interfaces\n */\nexport type ERC721TokenInterfaces = z.infer<typeof ERC721TokenInterfacesZod>\n\n/**\n * ERC1155 Token Interfaces\n */\nexport const ERC1155TokenInterfacesZod = z.enum([\n 'ERC1155',\n 'ERC1155TokenReceiver',\n 'ERC1155Metadata_URI',\n])\n\n/**\n * ERC1155 Token Interfaces\n */\nexport type ERC1155TokenInterfaces = z.infer<typeof ERC1155TokenInterfacesZod>\n\n/**\n * All Token Interfaces\n */\nexport const TokenInterfaceZod = z.union([\n ERC20TokenInterfacesZod,\n ERC721TokenInterfacesZod,\n ERC1155TokenInterfacesZod,\n])\n\n/**\n * All Token Interfaces\n */\nexport type TokenInterface = z.infer<typeof TokenInterfaceZod>\n\n/**\n * The schema for the EVM Token Interface Implemented payload\n */\nexport const EvmTokenInterfaceImplementedSchema = asSchema('network.xyo.evm.token.interface.implemented', true)\n/**\n * The schema for the EVM Token Interface Implemented payload\n */\nexport type EvmTokenInterfaceImplementedSchema = typeof EvmTokenInterfaceImplementedSchema\n\n/**\n * The EVM Token Interface Implemented payload\n */\nexport const EvmTokenInterfaceImplementedZod = z.extend(PayloadZodOfSchema(EvmTokenInterfaceImplementedSchema), {\n /**\n * The contract address\n */\n address: z.string(),\n /**\n * The chain id\n */\n chainId: z.number(),\n /**\n * True if the contract implements the interface\n */\n implemented: z.boolean(),\n /**\n * The specific token interface\n */\n tokenInterface: TokenInterfaceZod,\n})\n\n/**\n * The EVM Token Interface Implemented payload\n */\nexport type EvmTokenInterfaceImplemented = z.infer<typeof EvmTokenInterfaceImplementedZod>\n\n/**\n * Identity function for EvmTokenInterfaceImplemented payload\n */\nexport const isEvmTokenInterfaceImplemented = zodIsFactory(EvmTokenInterfaceImplementedZod)\nexport const asEvmTokenInterfaceImplemented = zodAsFactory(EvmTokenInterfaceImplementedZod, 'asEvmTokenInterfaceImplemented')\nexport const toEvmTokenInterfaceImplemented = zodToFactory(EvmTokenInterfaceImplementedZod, 'toEvmTokenInterfaceImplemented')\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["asSchema", "asSchema"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/evm-token-interface-diviner",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -31,47 +31,38 @@
|
|
|
31
31
|
"README.md"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@xyo-network/evm-contract-witness": "~
|
|
34
|
+
"@xyo-network/evm-contract-witness": "~7.0.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@bitauth/libauth": "~3.0.0",
|
|
38
38
|
"@metamask/providers": "^22.1.1",
|
|
39
39
|
"@noble/post-quantum": "~0.6.1",
|
|
40
40
|
"@opentelemetry/api": "^1.9.1",
|
|
41
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
41
|
+
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
42
42
|
"@scure/base": "^2.2.0",
|
|
43
43
|
"@scure/bip39": "~2.2.0",
|
|
44
|
-
"@xylabs/geo": "^6.
|
|
45
|
-
"@xylabs/sdk-js": "^6.
|
|
46
|
-
"@xylabs/threads": "^6.
|
|
47
|
-
"@xylabs/toolchain": "~8.
|
|
48
|
-
"@xylabs/tsconfig": "~8.
|
|
49
|
-
"@xylabs/vitest-extended": "
|
|
50
|
-
"@xyo-network/boundwitness
|
|
51
|
-
"@xyo-network/diviner-
|
|
52
|
-
"@xyo-network/diviner-
|
|
53
|
-
"@xyo-network/diviner-model": "^
|
|
54
|
-
"@xyo-network/diviner-
|
|
55
|
-
"@xyo-network/diviner-
|
|
56
|
-
"@xyo-network/diviner-stateful": "~6.0.4",
|
|
57
|
-
"@xyo-network/diviner-temporal-indexing": "~6.0.4",
|
|
58
|
-
"@xyo-network/module-model": "^6.0.4",
|
|
59
|
-
"@xyo-network/node-memory": "~6.0.4",
|
|
44
|
+
"@xylabs/geo": "^6.1.3",
|
|
45
|
+
"@xylabs/sdk-js": "^6.1.3",
|
|
46
|
+
"@xylabs/threads": "^6.1.3",
|
|
47
|
+
"@xylabs/toolchain": "~8.2.7",
|
|
48
|
+
"@xylabs/tsconfig": "~8.2.7",
|
|
49
|
+
"@xylabs/vitest-extended": "^6.1.3",
|
|
50
|
+
"@xyo-network/diviner-boundwitness": "^7.0.0",
|
|
51
|
+
"@xyo-network/diviner-jsonpatch": "^7.0.0",
|
|
52
|
+
"@xyo-network/diviner-payload-generic": "^7.0.0",
|
|
53
|
+
"@xyo-network/diviner-payload-model": "^7.0.0",
|
|
54
|
+
"@xyo-network/diviner-stateful": "^7.0.0",
|
|
55
|
+
"@xyo-network/diviner-temporal-indexing": "^7.0.0",
|
|
60
56
|
"@xyo-network/open-zeppelin-typechain": "^4.1.3",
|
|
61
|
-
"@xyo-network/payload-
|
|
62
|
-
"@xyo-network/
|
|
63
|
-
"@xyo-network/sdk-js": "
|
|
64
|
-
"@xyo-network/
|
|
65
|
-
"@xyo-network/
|
|
66
|
-
"@xyo-network/wallet-model": "~6.0.9",
|
|
67
|
-
"@xyo-network/witness-evm-abstract": "~6.0.4",
|
|
68
|
-
"@xyo-network/witness-timestamp": "^6.0.4",
|
|
57
|
+
"@xyo-network/payload-utils": "~7.0",
|
|
58
|
+
"@xyo-network/sdk-js": "^7.0.0",
|
|
59
|
+
"@xyo-network/sdk-protocol-js": "~7.0",
|
|
60
|
+
"@xyo-network/witness-evm-abstract": "~7.0",
|
|
61
|
+
"@xyo-network/witness-timestamp": "^7.0.0",
|
|
69
62
|
"ajv": "^8.20.0",
|
|
70
63
|
"async-mutex": "^0.5.0",
|
|
71
|
-
"bn.js": "^5.2.3",
|
|
72
|
-
"buffer": "^6.0.3",
|
|
73
64
|
"debug": "~4.4.3",
|
|
74
|
-
"eslint": "^10.
|
|
65
|
+
"eslint": "^10.5.0",
|
|
75
66
|
"ethers": "^6.16.0",
|
|
76
67
|
"fast-json-patch": "~3.1.1",
|
|
77
68
|
"hash-wasm": "^4.12.0",
|
|
@@ -82,7 +73,7 @@
|
|
|
82
73
|
"tslib": "^2.8.1",
|
|
83
74
|
"typescript": "~6.0.3",
|
|
84
75
|
"vite": "^8.0.16",
|
|
85
|
-
"vitest": "^4.1.
|
|
76
|
+
"vitest": "^4.1.9",
|
|
86
77
|
"webextension-polyfill": "^0.12.0",
|
|
87
78
|
"zod": "^4.4.3"
|
|
88
79
|
},
|
|
@@ -98,13 +89,11 @@
|
|
|
98
89
|
"@xylabs/sdk-js": "^6.0",
|
|
99
90
|
"@xylabs/threads": "^6.0",
|
|
100
91
|
"@xyo-network/open-zeppelin-typechain": "^4.1",
|
|
101
|
-
"@xyo-network/sdk-js": "^
|
|
102
|
-
"@xyo-network/sdk-protocol-js": "
|
|
103
|
-
"@xyo-network/witness-evm-abstract": "^
|
|
92
|
+
"@xyo-network/sdk-js": "^7.0",
|
|
93
|
+
"@xyo-network/sdk-protocol-js": "^7.0",
|
|
94
|
+
"@xyo-network/witness-evm-abstract": "^7.0",
|
|
104
95
|
"ajv": "^8.20",
|
|
105
96
|
"async-mutex": "^0.5",
|
|
106
|
-
"bn.js": "^5.2",
|
|
107
|
-
"buffer": "^6.0",
|
|
108
97
|
"debug": "~4.4",
|
|
109
98
|
"ethers": "^6.16",
|
|
110
99
|
"hash-wasm": "^4.12",
|
|
@@ -114,6 +103,9 @@
|
|
|
114
103
|
"webextension-polyfill": "^0.12",
|
|
115
104
|
"zod": "^4.4"
|
|
116
105
|
},
|
|
106
|
+
"engines": {
|
|
107
|
+
"node": "^24"
|
|
108
|
+
},
|
|
117
109
|
"publishConfig": {
|
|
118
110
|
"access": "public"
|
|
119
111
|
}
|