sushi 6.0.23 → 6.0.24
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/_cjs/evm/config/features/sushiswap-v3.js.map +1 -1
- package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v2.js +0 -2
- package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v2.js.map +1 -1
- package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v3.js +0 -1
- package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v3.js.map +1 -1
- package/_cjs/evm/currency/currency.js +4 -3
- package/_cjs/evm/currency/currency.js.map +1 -1
- package/_cjs/evm/currency/native.js +10 -2
- package/_cjs/evm/currency/native.js.map +1 -1
- package/_cjs/evm/currency/token.js +6 -4
- package/_cjs/evm/currency/token.js.map +1 -1
- package/_cjs/evm/pool/sushiswap-v2/zod.js +2 -2
- package/_cjs/evm/pool/sushiswap-v2/zod.js.map +1 -1
- package/_cjs/generic/currency/serialized-currency.js +5 -4
- package/_cjs/generic/currency/serialized-currency.js.map +1 -1
- package/_cjs/mvm/currency/token.js +5 -1
- package/_cjs/mvm/currency/token.js.map +1 -1
- package/_cjs/tvm/currency/currency.js +4 -3
- package/_cjs/tvm/currency/currency.js.map +1 -1
- package/_cjs/tvm/currency/native.js +13 -5
- package/_cjs/tvm/currency/native.js.map +1 -1
- package/_cjs/tvm/currency/token.js +8 -1
- package/_cjs/tvm/currency/token.js.map +1 -1
- package/_esm/evm/config/features/sushiswap-v3.js +0 -10
- package/_esm/evm/config/features/sushiswap-v3.js.map +1 -1
- package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v2.js +0 -2
- package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v2.js.map +1 -1
- package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v3.js +0 -5
- package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v3.js.map +1 -1
- package/_esm/evm/currency/currency.js +3 -3
- package/_esm/evm/currency/currency.js.map +1 -1
- package/_esm/evm/currency/native.js +9 -2
- package/_esm/evm/currency/native.js.map +1 -1
- package/_esm/evm/currency/token.js +5 -4
- package/_esm/evm/currency/token.js.map +1 -1
- package/_esm/evm/pool/sushiswap-v2/zod.js +2 -2
- package/_esm/evm/pool/sushiswap-v2/zod.js.map +1 -1
- package/_esm/generic/currency/serialized-currency.js +4 -4
- package/_esm/generic/currency/serialized-currency.js.map +1 -1
- package/_esm/mvm/currency/token.js +4 -1
- package/_esm/mvm/currency/token.js.map +1 -1
- package/_esm/tvm/currency/currency.js +3 -3
- package/_esm/tvm/currency/currency.js.map +1 -1
- package/_esm/tvm/currency/native.js +12 -5
- package/_esm/tvm/currency/native.js.map +1 -1
- package/_esm/tvm/currency/token.js +7 -1
- package/_esm/tvm/currency/token.js.map +1 -1
- package/_types/evm/config/features/sushiswap-v3.d.ts.map +1 -1
- package/_types/evm/config/subgraphs/subgraphs/sushiswap-v2.d.ts +4 -3
- package/_types/evm/config/subgraphs/subgraphs/sushiswap-v2.d.ts.map +1 -1
- package/_types/evm/config/subgraphs/subgraphs/sushiswap-v3.d.ts +4 -3
- package/_types/evm/config/subgraphs/subgraphs/sushiswap-v3.d.ts.map +1 -1
- package/_types/evm/config/tokens/token-maps/default-bases.d.ts +42 -42
- package/_types/evm/config/tokens/token-maps/default-quote.d.ts +43 -43
- package/_types/evm/config/tokens/token-maps/short-name-to-currency.d.ts +34 -34
- package/_types/evm/currency/currency.d.ts +68 -30
- package/_types/evm/currency/currency.d.ts.map +1 -1
- package/_types/evm/currency/native.d.ts +42 -20
- package/_types/evm/currency/native.d.ts.map +1 -1
- package/_types/evm/currency/token.d.ts +42 -19
- package/_types/evm/currency/token.d.ts.map +1 -1
- package/_types/evm/pool/sushiswap-v2/zod.d.ts +14 -0
- package/_types/evm/pool/sushiswap-v2/zod.d.ts.map +1 -1
- package/_types/generic/currency/currency.d.ts +1 -1
- package/_types/generic/currency/currency.d.ts.map +1 -1
- package/_types/generic/currency/serialized-currency.d.ts +168 -74
- package/_types/generic/currency/serialized-currency.d.ts.map +1 -1
- package/_types/mvm/currency/token.d.ts +42 -19
- package/_types/mvm/currency/token.d.ts.map +1 -1
- package/_types/tvm/config/tokens/native.d.ts +1 -1
- package/_types/tvm/config/tokens/token-maps/default-bases.d.ts +1 -1
- package/_types/tvm/currency/currency.d.ts +68 -30
- package/_types/tvm/currency/currency.d.ts.map +1 -1
- package/_types/tvm/currency/native.d.ts +42 -20
- package/_types/tvm/currency/native.d.ts.map +1 -1
- package/_types/tvm/currency/token.d.ts +42 -18
- package/_types/tvm/currency/token.d.ts.map +1 -1
- package/evm/config/features/sushiswap-v3.ts +0 -10
- package/evm/config/subgraphs/subgraphs/sushiswap-v2.ts +19 -18
- package/evm/config/subgraphs/subgraphs/sushiswap-v3.ts +19 -22
- package/evm/currency/currency.ts +13 -6
- package/evm/currency/native.ts +36 -14
- package/evm/currency/token.ts +27 -13
- package/evm/pool/sushiswap-v2/zod.ts +2 -2
- package/generic/currency/amount.test.ts +0 -1
- package/generic/currency/currency.test-d.ts +115 -1
- package/generic/currency/currency.ts +1 -1
- package/generic/currency/serialized-currency.ts +26 -15
- package/mvm/currency/token.ts +27 -11
- package/package.json +1 -1
- package/tvm/currency/currency.ts +12 -5
- package/tvm/currency/native.ts +40 -18
- package/tvm/currency/token.ts +30 -10
|
@@ -11,29 +11,53 @@ export declare class TvmToken<TMetadata extends CurrencyMetadata = Record<string
|
|
|
11
11
|
origin?: TvmTokenOrigin | undefined;
|
|
12
12
|
} & ConstructorParameters<typeof Token<TvmChainId, TvmAddress, TMetadata>>[0]);
|
|
13
13
|
wrap(): TvmToken<TMetadata>;
|
|
14
|
-
toJSON(): SerializedTvmToken
|
|
14
|
+
toJSON(): SerializedTvmToken<TMetadata>;
|
|
15
|
+
static fromJSON<TMetadata extends CurrencyMetadata>(data: Omit<SerializedTvmToken<TMetadata>, 'metadata'> & {
|
|
16
|
+
metadata?: TMetadata;
|
|
17
|
+
}): TvmToken<TMetadata>;
|
|
15
18
|
}
|
|
16
|
-
export declare const serializedTvmTokenSchema:
|
|
19
|
+
export declare const serializedTvmTokenSchema: <TMetadata extends {} = CurrencyMetadata>({ metadata, }?: {
|
|
20
|
+
metadata?: z.ZodType<TMetadata>;
|
|
21
|
+
}) => z.ZodObject<{
|
|
17
22
|
chainId: z.ZodEffects<z.ZodNumber, -2, number>;
|
|
18
23
|
address: z.ZodEffects<z.ZodString, `T${string}`, string>;
|
|
19
24
|
symbol: z.ZodString;
|
|
20
25
|
name: z.ZodString;
|
|
21
26
|
decimals: z.ZodNumber;
|
|
22
27
|
type: z.ZodLiteral<"token">;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
metadata: z.ZodType<TMetadata>;
|
|
29
|
+
}, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
|
|
30
|
+
chainId: z.ZodEffects<z.ZodNumber, -2, number>;
|
|
31
|
+
address: z.ZodEffects<z.ZodString, `T${string}`, string>;
|
|
32
|
+
symbol: z.ZodString;
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
decimals: z.ZodNumber;
|
|
35
|
+
type: z.ZodLiteral<"token">;
|
|
36
|
+
metadata: z.ZodType<TMetadata>;
|
|
37
|
+
}>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
|
|
38
|
+
chainId: z.ZodEffects<z.ZodNumber, -2, number>;
|
|
39
|
+
address: z.ZodEffects<z.ZodString, `T${string}`, string>;
|
|
40
|
+
symbol: z.ZodString;
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
decimals: z.ZodNumber;
|
|
43
|
+
type: z.ZodLiteral<"token">;
|
|
44
|
+
metadata: z.ZodType<TMetadata>;
|
|
45
|
+
}>, any>[k]; } : never, z.baseObjectInputType<{
|
|
46
|
+
chainId: z.ZodEffects<z.ZodNumber, -2, number>;
|
|
47
|
+
address: z.ZodEffects<z.ZodString, `T${string}`, string>;
|
|
48
|
+
symbol: z.ZodString;
|
|
49
|
+
name: z.ZodString;
|
|
50
|
+
decimals: z.ZodNumber;
|
|
51
|
+
type: z.ZodLiteral<"token">;
|
|
52
|
+
metadata: z.ZodType<TMetadata>;
|
|
53
|
+
}> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<{
|
|
54
|
+
chainId: z.ZodEffects<z.ZodNumber, -2, number>;
|
|
55
|
+
address: z.ZodEffects<z.ZodString, `T${string}`, string>;
|
|
56
|
+
symbol: z.ZodString;
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
decimals: z.ZodNumber;
|
|
59
|
+
type: z.ZodLiteral<"token">;
|
|
60
|
+
metadata: z.ZodType<TMetadata>;
|
|
61
|
+
}>[k_1]; } : never>;
|
|
62
|
+
export type SerializedTvmToken<TMetadata extends CurrencyMetadata = CurrencyMetadata> = z.infer<ReturnType<typeof serializedTvmTokenSchema<TMetadata>>>;
|
|
39
63
|
//# sourceMappingURL=token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../tvm/currency/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AACvD,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,oBAAoB,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG,IAAI,MAAM,EAAE,CAAA;AAErC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,UAAU,CAEnE;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAA;AAErC,qBAAa,QAAQ,CACnB,SAAS,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5D,SAAQ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;IAChD,SAAgB,MAAM,EAAE,cAAc,GAAG,SAAS,CAAA;gBAEtC,EACV,MAAM,EACN,GAAG,IAAI,EACR,EAAE;QACD,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;KACpC,GAAG,qBAAqB,CACvB,OAAO,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAChD,CAAC,CAAC,CAAC;IAKY,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC;IAI3B,MAAM,IAAI,kBAAkB;
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../tvm/currency/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AACvD,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,oBAAoB,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG,IAAI,MAAM,EAAE,CAAA;AAErC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,UAAU,CAEnE;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAA;AAErC,qBAAa,QAAQ,CACnB,SAAS,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5D,SAAQ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;IAChD,SAAgB,MAAM,EAAE,cAAc,GAAG,SAAS,CAAA;gBAEtC,EACV,MAAM,EACN,GAAG,IAAI,EACR,EAAE;QACD,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;KACpC,GAAG,qBAAqB,CACvB,OAAO,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAChD,CAAC,CAAC,CAAC;IAKY,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC;IAI3B,MAAM,IAAI,kBAAkB,CAAC,SAAS,CAAC;IAavD,MAAM,CAAC,QAAQ,CAAC,SAAS,SAAS,gBAAgB,EAChD,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG;QACtD,QAAQ,CAAC,EAAE,SAAS,CAAA;KACrB,GACA,QAAQ,CAAC,SAAS,CAAC;CAGvB;AAED,eAAO,MAAM,wBAAwB,GACnC,SAAS,SAAS,EAAE,GAAG,gBAAgB,EACvC,gBAEC;IAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;CAAO;;;;;;;cAUY,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;;;;;;;;cAApB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;;;;;;;;cAApB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;;;;;;;;cAApB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;;;;;;;;cAApB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;mBACvE,CAAA;AAEJ,MAAM,MAAM,kBAAkB,CAC5B,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACnD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -39,13 +39,11 @@ export const SUSHISWAP_V3_FACTORY_ADDRESS: Record<
|
|
|
39
39
|
[EvmChainId.AVALANCHE]: '0x3e603c14af37ebdad31709c4f848fc6ad5bec715',
|
|
40
40
|
[EvmChainId.BSC]: '0x126555dd55a39328f69400d6ae4f782bd4c34abb',
|
|
41
41
|
[EvmChainId.BTTC]: '0xbbde1d67297329148fe1ed5e6b00114842728e65',
|
|
42
|
-
// [EvmChainId.CELO]: '',
|
|
43
42
|
[EvmChainId.ETHEREUM]: '0xbaceb8ec6b9355dfc0269c18bac9d6e2bdc29c4f',
|
|
44
43
|
[EvmChainId.FANTOM]: '0x7770978eed668a3ba661d51a773d3a992fc9ddcb',
|
|
45
44
|
[EvmChainId.GNOSIS]: '0xf78031cbca409f2fb6876bdfdbc1b2df24cf9bef',
|
|
46
45
|
[EvmChainId.KAVA]: '0x1e9b24073183d5c6b7ae5fb4b8f0b1dd83fdc77a',
|
|
47
46
|
[EvmChainId.METIS]: '0x145d82bca93cca2ae057d1c6f26245d1b9522e6f',
|
|
48
|
-
// [EvmChainId.MOONBEAM]: '0x2ecd58f51819e8f8ba08a650bea04fc0dea1d523',
|
|
49
47
|
[EvmChainId.OPTIMISM]: '0x9c6522117e2ed1fe5bdb72bb0ed5e3f2bde7dbe0',
|
|
50
48
|
[EvmChainId.POLYGON]: '0x917933899c6a5f8e37f31e19f92cdbff7e8ff0e2',
|
|
51
49
|
[EvmChainId.BOBA]: '0x0be808376ecb75a5cf9bb6d237d16cd37893d904',
|
|
@@ -53,7 +51,6 @@ export const SUSHISWAP_V3_FACTORY_ADDRESS: Record<
|
|
|
53
51
|
[EvmChainId.THUNDERCORE]: '0xc35dadb65012ec5796536bd9864ed8773abc74c4',
|
|
54
52
|
[EvmChainId.HAQQ]: '0xc35dadb65012ec5796536bd9864ed8773abc74c4',
|
|
55
53
|
[EvmChainId.CORE]: '0xc35dadb65012ec5796536bd9864ed8773abc74c4',
|
|
56
|
-
// [EvmChainId.ZKSYNC_ERA]: '',
|
|
57
54
|
[EvmChainId.LINEA]: '0xc35dadb65012ec5796536bd9864ed8773abc74c4',
|
|
58
55
|
[EvmChainId.BASE]: '0xc35dadb65012ec5796536bd9864ed8773abc74c4',
|
|
59
56
|
[EvmChainId.SCROLL]: '0x46b3fdf7b5cde91ac049936bf0bdb12c5d22202e',
|
|
@@ -89,7 +86,6 @@ export const SUSHISWAP_V3_INIT_CODE_HASH: Record<
|
|
|
89
86
|
[EvmChainId.THUNDERCORE]: POOL_INIT_CODE_HASH,
|
|
90
87
|
[EvmChainId.HAQQ]: POOL_INIT_CODE_HASH,
|
|
91
88
|
[EvmChainId.CORE]: POOL_INIT_CODE_HASH,
|
|
92
|
-
// [EvmChainId.ZKSYNC_ERA]: '',
|
|
93
89
|
[EvmChainId.LINEA]: POOL_INIT_CODE_HASH,
|
|
94
90
|
[EvmChainId.BASE]: POOL_INIT_CODE_HASH,
|
|
95
91
|
[EvmChainId.SCROLL]: POOL_INIT_CODE_HASH,
|
|
@@ -115,13 +111,11 @@ export const SUSHISWAP_V3_POSITION_MANAGER: Record<
|
|
|
115
111
|
[EvmChainId.AVALANCHE]: '0x18350b048ab366ed601ffdbc669110ecb36016f3',
|
|
116
112
|
[EvmChainId.BSC]: '0xf70c086618dcf2b1a461311275e00d6b722ef914',
|
|
117
113
|
[EvmChainId.BTTC]: '0x57bffa72db682f7eb6c132dae03ff36bbeb0c459',
|
|
118
|
-
// [EvmChainId.CELO]: '',
|
|
119
114
|
[EvmChainId.ETHEREUM]: '0x2214a42d8e2a1d20635c2cb0664422c528b6a432',
|
|
120
115
|
[EvmChainId.FANTOM]: '0x10c19390e1ac2fd6d0c3643a2320b0aba38e5baa',
|
|
121
116
|
[EvmChainId.GNOSIS]: '0xab235da7f52d35fb4551afba11bfb56e18774a65',
|
|
122
117
|
[EvmChainId.KAVA]: '0xbf3b71decbcefabb3210b9d8f18ec22e0556f5f0',
|
|
123
118
|
[EvmChainId.METIS]: '0x630be2985674d31920babb4f96657960f131e7b1',
|
|
124
|
-
// [EvmChainId.MOONBEAM]: '0x8f54301f315c56c112d492d9443047d4745dbe9e',
|
|
125
119
|
[EvmChainId.OPTIMISM]: '0x1af415a1eba07a4986a52b6f2e7de7003d82231e',
|
|
126
120
|
[EvmChainId.POLYGON]: '0xb7402ee99f0a008e461098ac3a27f4957df89a40',
|
|
127
121
|
[EvmChainId.BOBA]: '0x1b9d177ccdea3c79b6c8f40761fc8dc9d0500eaa',
|
|
@@ -129,7 +123,6 @@ export const SUSHISWAP_V3_POSITION_MANAGER: Record<
|
|
|
129
123
|
[EvmChainId.THUNDERCORE]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',
|
|
130
124
|
[EvmChainId.HAQQ]: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',
|
|
131
125
|
[EvmChainId.CORE]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',
|
|
132
|
-
// [EvmChainId.ZKSYNC_ERA]: '',
|
|
133
126
|
[EvmChainId.LINEA]: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',
|
|
134
127
|
[EvmChainId.BASE]: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',
|
|
135
128
|
[EvmChainId.SCROLL]: '0x0389879e0156033202c44bf784ac18fc02edee4f',
|
|
@@ -153,13 +146,11 @@ export const SUSHISWAP_V3_TICK_LENS: Record<
|
|
|
153
146
|
[EvmChainId.AVALANCHE]: '0xddc1b5920723f774d2ec2c3c9355251a20819776',
|
|
154
147
|
[EvmChainId.BSC]: '0x10c19390e1ac2fd6d0c3643a2320b0aba38e5baa',
|
|
155
148
|
[EvmChainId.BTTC]: '0x1400fefd6f9b897970f00df6237ff2b8b27dc82c',
|
|
156
|
-
// [EvmChainId.CELO]: '',
|
|
157
149
|
[EvmChainId.ETHEREUM]: '0xfb70ad5a200d784e7901230e6875d91d5fa6b68c',
|
|
158
150
|
[EvmChainId.FANTOM]: '0xd75f5369724b513b497101fb15211160c1d96550',
|
|
159
151
|
[EvmChainId.GNOSIS]: '0xaa26771d497814e81d305c511efbb3ced90bf5bd',
|
|
160
152
|
[EvmChainId.KAVA]: '0xa62ec622dba415aa94110739b1f951b1202cf322',
|
|
161
153
|
[EvmChainId.METIS]: '0x078047150f8efa223b3d407f00e462e38f4b1b9c',
|
|
162
|
-
// [EvmChainId.MOONBEAM]: '0x53b08dbd70327b7ba3b7886fc9987bc985d27262',
|
|
163
154
|
[EvmChainId.OPTIMISM]: '0x0367a647a68f304f2a6e453c25033a4249d7f2c6',
|
|
164
155
|
[EvmChainId.POLYGON]: '0x9fdea1412e50d78b25ace4f96d35801647fdf7da',
|
|
165
156
|
[EvmChainId.BOBA]: '0x9b3ff703fa9c8b467f5886d7b61e61ba07a9b51c',
|
|
@@ -167,7 +158,6 @@ export const SUSHISWAP_V3_TICK_LENS: Record<
|
|
|
167
158
|
[EvmChainId.THUNDERCORE]: '0x0be808376ecb75a5cf9bb6d237d16cd37893d904',
|
|
168
159
|
[EvmChainId.HAQQ]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',
|
|
169
160
|
[EvmChainId.CORE]: '0x1b02da8cb0d097eb8d57a175b88c7d8b47997506',
|
|
170
|
-
// [EvmChainId.ZKSYNC_ERA]: '',
|
|
171
161
|
[EvmChainId.LINEA]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',
|
|
172
162
|
[EvmChainId.BASE]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',
|
|
173
163
|
[EvmChainId.SCROLL]: '0x1f2fcf1d036b375b384012e61d3aa33f8c256bbe',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TestnetChainId } from '../../../../generic/chain/chains.js'
|
|
1
2
|
import { EvmChainId } from '../../../chain/index.js'
|
|
2
3
|
import type { SushiSwapV2ChainId } from '../../features/sushiswap-v2.js'
|
|
3
4
|
import { getSubgraphUrlWrapper, wrapAsIdType } from '../get-subgraph-url.js'
|
|
@@ -47,8 +48,6 @@ const SUSHISWAP_V2_OTHER_URLS = {
|
|
|
47
48
|
[EvmChainId.SKALE_EUROPA]: `${SKALE_HOST}/sushi/v2-skale-europa`,
|
|
48
49
|
[EvmChainId.ROOTSTOCK]: `${SUSHI_DEDICATED_GOLDSKY_HOST}/sushiswap/v2-rootstock/gn`,
|
|
49
50
|
[EvmChainId.HEMI]: `${SUSHI_DEDICATED_GOLDSKY_HOST}/sushiswap/v2-hemi/gn`,
|
|
50
|
-
[EvmChainId.SEPOLIA]: '',
|
|
51
|
-
[EvmChainId.TATARA]: '',
|
|
52
51
|
} as const satisfies Partial<Record<SushiSwapV2ChainId, string>>
|
|
53
52
|
|
|
54
53
|
export const getSushiSwapV2SubgraphUrl = getSubgraphUrlWrapper({
|
|
@@ -57,21 +56,23 @@ export const getSushiSwapV2SubgraphUrl = getSubgraphUrlWrapper({
|
|
|
57
56
|
...wrapAsIdType(SUSHISWAP_V2_DECENTRALIZED_SUBGRAPH_IDS, 'subgraphId'),
|
|
58
57
|
},
|
|
59
58
|
otherUrls: SUSHISWAP_V2_OTHER_URLS,
|
|
60
|
-
})<SushiSwapV2ChainId, '
|
|
59
|
+
})<SushiSwapV2ChainId, 'PARTIAL'>()
|
|
61
60
|
|
|
62
|
-
export const V2SubgraphTemplateMap: Record<
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
export const V2SubgraphTemplateMap: Record<
|
|
62
|
+
Exclude<SushiSwapV2ChainId, TestnetChainId>,
|
|
63
|
+
string
|
|
64
|
+
> = Object.fromEntries(
|
|
65
|
+
Object.entries({
|
|
66
|
+
...SUSHISWAP_V2_DECENTRALIZED_DEPLOYMENT_IDS,
|
|
67
|
+
...SUSHISWAP_V2_DECENTRALIZED_SUBGRAPH_IDS,
|
|
68
|
+
...SUSHISWAP_V2_OTHER_URLS,
|
|
69
|
+
})
|
|
70
|
+
.map(([chainId]) => {
|
|
71
|
+
const url = getSushiSwapV2SubgraphUrl(
|
|
72
|
+
Number(chainId) as SushiSwapV2ChainId,
|
|
73
|
+
{ decentralizedKey: '${GRAPH_KEY}' },
|
|
74
|
+
)
|
|
75
|
+
return [Number(chainId), url ? `https://${url}` : undefined]
|
|
68
76
|
})
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Number(chainId) as SushiSwapV2ChainId,
|
|
72
|
-
{ decentralizedKey: '${GRAPH_KEY}' },
|
|
73
|
-
)
|
|
74
|
-
return [Number(chainId), url ? `https://${url}` : undefined]
|
|
75
|
-
})
|
|
76
|
-
.filter(([, url]) => !!url),
|
|
77
|
-
) as Record<SushiSwapV2ChainId, string>
|
|
77
|
+
.filter(([, url]) => !!url),
|
|
78
|
+
)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TestnetChainId } from '../../../../generic/chain/chains.js'
|
|
1
2
|
import { EvmChainId } from '../../../chain/index.js'
|
|
2
3
|
import type { SushiSwapV3ChainId } from '../../features/sushiswap-v3.js'
|
|
3
4
|
import { getSubgraphUrlWrapper, wrapAsIdType } from '../get-subgraph-url.js'
|
|
@@ -24,11 +25,6 @@ const SUSHISWAP_V3_DECENTRALIZED_DEPLOYMENT_IDS = {
|
|
|
24
25
|
[EvmChainId.LINEA]: `QmVUWgFKqLABaX7QDaJFxXai2MZeZtqjvLuPqCrED8eJfN`,
|
|
25
26
|
[EvmChainId.SCROLL]: `QmNqxqVfBETuMhV91BfquULGBLFvPZwr3ADVFTMgGZcqNf`,
|
|
26
27
|
[EvmChainId.SONIC]: `Qmaa6gJsqzeSnDBjq4NnwerMGMSaSDLqRMDkrevGXwVUt1`,
|
|
27
|
-
|
|
28
|
-
// Deprecated chains
|
|
29
|
-
// [EvmChainId.FUSE]: `QmakqW3KCpEXJGTSuyfXHGg6C8ppbrPdSqVXWj3Guor9zA`,
|
|
30
|
-
// [EvmChainId.MOONRIVER]: `QmStbnz4sErrK1jzaU5iKAutA1Q2w47EsgAoFbdCiequtZ`,
|
|
31
|
-
// [EvmChainId.POLYGON_ZKEVM]: `QmWH5ChjmF4Yp5Yhiaxczh5QwbG6HFSEi8bRwbKaUrJA6C`,
|
|
32
28
|
} as const satisfies Partial<Record<SushiSwapV3ChainId, string>>
|
|
33
29
|
|
|
34
30
|
const SUSHISWAP_V3_DECENTRALIZED_SUBGRAPH_IDS = {
|
|
@@ -49,7 +45,6 @@ const SUSHISWAP_V3_OTHER_URLS = {
|
|
|
49
45
|
[EvmChainId.SKALE_EUROPA]: `${SUSHI_DEDICATED_GOLDSKY_HOST}/sushiswap/v3-skale-europa-2/gn`,
|
|
50
46
|
[EvmChainId.ROOTSTOCK]: `${SUSHI_DEDICATED_GOLDSKY_HOST}/sushiswap/v3-rootstock-3/gn`,
|
|
51
47
|
[EvmChainId.HEMI]: `${SUSHI_DEDICATED_GOLDSKY_HOST}/sushiswap/v3-hemi/gn`,
|
|
52
|
-
[EvmChainId.TATARA]: '',
|
|
53
48
|
} as const satisfies Partial<Record<SushiSwapV3ChainId, string>>
|
|
54
49
|
|
|
55
50
|
export const getSushiSwapV3SubgraphUrl = getSubgraphUrlWrapper({
|
|
@@ -58,21 +53,23 @@ export const getSushiSwapV3SubgraphUrl = getSubgraphUrlWrapper({
|
|
|
58
53
|
...wrapAsIdType(SUSHISWAP_V3_DECENTRALIZED_SUBGRAPH_IDS, 'subgraphId'),
|
|
59
54
|
},
|
|
60
55
|
otherUrls: SUSHISWAP_V3_OTHER_URLS,
|
|
61
|
-
})<SushiSwapV3ChainId, '
|
|
56
|
+
})<SushiSwapV3ChainId, 'PARTIAL'>()
|
|
62
57
|
|
|
63
|
-
export const V3SubgraphTemplateMap: Record<
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
export const V3SubgraphTemplateMap: Record<
|
|
59
|
+
Exclude<SushiSwapV3ChainId, TestnetChainId>,
|
|
60
|
+
string
|
|
61
|
+
> = Object.fromEntries(
|
|
62
|
+
Object.entries({
|
|
63
|
+
...SUSHISWAP_V3_DECENTRALIZED_DEPLOYMENT_IDS,
|
|
64
|
+
...SUSHISWAP_V3_DECENTRALIZED_SUBGRAPH_IDS,
|
|
65
|
+
...SUSHISWAP_V3_OTHER_URLS,
|
|
66
|
+
})
|
|
67
|
+
.map(([chainId]) => {
|
|
68
|
+
const url = getSushiSwapV3SubgraphUrl(
|
|
69
|
+
Number(chainId) as SushiSwapV3ChainId,
|
|
70
|
+
{ decentralizedKey: '${GRAPH_KEY}' },
|
|
71
|
+
)
|
|
72
|
+
return [Number(chainId), url ? `https://${url}` : undefined]
|
|
69
73
|
})
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Number(chainId) as SushiSwapV3ChainId,
|
|
73
|
-
{ decentralizedKey: '${GRAPH_KEY}' },
|
|
74
|
-
)
|
|
75
|
-
return [Number(chainId), url ? `https://${url}` : undefined]
|
|
76
|
-
})
|
|
77
|
-
.filter(([, url]) => !!url),
|
|
78
|
-
) as Record<SushiSwapV3ChainId, string>
|
|
74
|
+
.filter(([, url]) => !!url),
|
|
75
|
+
) as Record<SushiSwapV3ChainId, string>
|
package/evm/currency/currency.ts
CHANGED
|
@@ -8,12 +8,15 @@ export type EvmCurrency<
|
|
|
8
8
|
TMetadata extends CurrencyMetadata = Record<string, unknown>,
|
|
9
9
|
> = EvmToken<TMetadata> | EvmNative
|
|
10
10
|
|
|
11
|
-
export const serializedEvmCurrencySchema =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
export const serializedEvmCurrencySchema = <
|
|
12
|
+
TMetadata extends {} = CurrencyMetadata,
|
|
13
|
+
>(
|
|
14
|
+
opts: { metadata?: z.ZodType<TMetadata> } = {},
|
|
15
|
+
) =>
|
|
16
|
+
z.discriminatedUnion('type', [
|
|
17
|
+
serializedEvmTokenSchema(opts),
|
|
18
|
+
serializedEvmNativeSchema(opts),
|
|
19
|
+
])
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
*
|
|
@@ -22,3 +25,7 @@ export type SerializedEvmCurrency = z.infer<typeof serializedEvmCurrencySchema>
|
|
|
22
25
|
export function getEvmCurrencyAddress(currency: EvmCurrency) {
|
|
23
26
|
return currency.type === 'native' ? nativeAddress : currency.address
|
|
24
27
|
}
|
|
28
|
+
|
|
29
|
+
export type SerializedEvmCurrency<
|
|
30
|
+
TMetadata extends CurrencyMetadata = CurrencyMetadata,
|
|
31
|
+
> = z.infer<ReturnType<typeof serializedEvmCurrencySchema<TMetadata>>>
|
package/evm/currency/native.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as z from 'zod'
|
|
2
|
+
import type { CurrencyMetadata } from '~/generic/currency/currency.js'
|
|
2
3
|
import { Native } from '../../generic/currency/native.js'
|
|
3
4
|
import {
|
|
4
5
|
type EvmChainId,
|
|
@@ -6,24 +7,35 @@ import {
|
|
|
6
7
|
isEvmChainId,
|
|
7
8
|
} from '../chain/chains.js'
|
|
8
9
|
import { WNATIVE } from '../config/tokens/wrapped-native.js'
|
|
9
|
-
import
|
|
10
|
+
import { EvmToken } from './token.js'
|
|
10
11
|
|
|
11
|
-
export class EvmNative
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
export class EvmNative<
|
|
13
|
+
TMetadata extends CurrencyMetadata = Record<string, unknown>,
|
|
14
|
+
> extends Native<EvmChainId, TMetadata> {
|
|
15
|
+
public override wrap(): EvmToken<TMetadata> {
|
|
16
|
+
return new EvmToken({
|
|
17
|
+
...WNATIVE[this.chainId],
|
|
18
|
+
metadata: structuredClone(this.metadata),
|
|
19
|
+
})
|
|
14
20
|
}
|
|
15
21
|
|
|
16
|
-
public override toJSON(): SerializedEvmNative {
|
|
22
|
+
public override toJSON(): SerializedEvmNative<TMetadata> {
|
|
17
23
|
return {
|
|
18
24
|
chainId: this.chainId,
|
|
19
25
|
symbol: this.symbol,
|
|
20
26
|
name: this.name,
|
|
21
27
|
decimals: this.decimals,
|
|
22
28
|
type: this.type,
|
|
29
|
+
|
|
30
|
+
metadata: this.metadata,
|
|
23
31
|
} as const
|
|
24
32
|
}
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
static fromJSON<TMetadata extends CurrencyMetadata>(
|
|
35
|
+
data: Omit<SerializedEvmNative<TMetadata>, 'metadata'> & {
|
|
36
|
+
metadata?: TMetadata
|
|
37
|
+
},
|
|
38
|
+
): EvmNative<TMetadata> {
|
|
27
39
|
return new this(data)
|
|
28
40
|
}
|
|
29
41
|
|
|
@@ -39,12 +51,22 @@ export class EvmNative extends Native<EvmChainId> {
|
|
|
39
51
|
}
|
|
40
52
|
}
|
|
41
53
|
|
|
42
|
-
export const serializedEvmNativeSchema =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
export const serializedEvmNativeSchema = <
|
|
55
|
+
TMetadata extends {} = CurrencyMetadata,
|
|
56
|
+
>({
|
|
57
|
+
metadata,
|
|
58
|
+
}: { metadata?: z.ZodType<TMetadata> } = {}) =>
|
|
59
|
+
z.object({
|
|
60
|
+
chainId: z.number().int().refine(isEvmChainId),
|
|
61
|
+
symbol: z.string(),
|
|
62
|
+
name: z.string(),
|
|
63
|
+
decimals: z.number().int().nonnegative(),
|
|
64
|
+
type: z.literal('native'),
|
|
65
|
+
|
|
66
|
+
metadata: (metadata ||
|
|
67
|
+
z.record(z.unknown()).optional().default({})) as z.ZodType<TMetadata>,
|
|
68
|
+
})
|
|
49
69
|
|
|
50
|
-
export type SerializedEvmNative
|
|
70
|
+
export type SerializedEvmNative<
|
|
71
|
+
TMetadata extends CurrencyMetadata = CurrencyMetadata,
|
|
72
|
+
> = z.infer<ReturnType<typeof serializedEvmNativeSchema<TMetadata>>>
|
package/evm/currency/token.ts
CHANGED
|
@@ -51,7 +51,7 @@ export class EvmToken<
|
|
|
51
51
|
return this
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
public override toJSON(): SerializedEvmToken {
|
|
54
|
+
public override toJSON(): SerializedEvmToken<TMetadata> {
|
|
55
55
|
return {
|
|
56
56
|
chainId: this.chainId,
|
|
57
57
|
address: this.address,
|
|
@@ -59,23 +59,37 @@ export class EvmToken<
|
|
|
59
59
|
name: this.name,
|
|
60
60
|
decimals: this.decimals,
|
|
61
61
|
type: this.type,
|
|
62
|
+
|
|
63
|
+
metadata: this.metadata,
|
|
62
64
|
} as const
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
static fromJSON
|
|
67
|
+
static fromJSON<TMetadata extends CurrencyMetadata>(
|
|
68
|
+
data: Omit<SerializedEvmToken<TMetadata>, 'metadata'> & {
|
|
69
|
+
metadata?: TMetadata
|
|
70
|
+
},
|
|
71
|
+
): EvmToken<TMetadata> {
|
|
66
72
|
return new this(data)
|
|
67
73
|
}
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
export const serializedEvmTokenSchema =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
export const serializedEvmTokenSchema = <
|
|
77
|
+
TMetadata extends {} = CurrencyMetadata,
|
|
78
|
+
>({
|
|
79
|
+
metadata,
|
|
80
|
+
}: { metadata?: z.ZodType<TMetadata> } = {}) =>
|
|
81
|
+
z.object({
|
|
82
|
+
chainId: z.number().int().refine(isEvmChainId),
|
|
83
|
+
address: z.string().refine(isEvmAddress),
|
|
84
|
+
symbol: z.string(),
|
|
85
|
+
name: z.string(),
|
|
86
|
+
decimals: z.number().int().nonnegative(),
|
|
87
|
+
type: z.literal('token'),
|
|
88
|
+
|
|
89
|
+
metadata: (metadata ||
|
|
90
|
+
z.record(z.unknown()).optional().default({})) as z.ZodType<TMetadata>,
|
|
91
|
+
})
|
|
80
92
|
|
|
81
|
-
export type SerializedEvmToken
|
|
93
|
+
export type SerializedEvmToken<
|
|
94
|
+
TMetadata extends CurrencyMetadata = CurrencyMetadata,
|
|
95
|
+
> = z.infer<ReturnType<typeof serializedEvmTokenSchema<TMetadata>>>
|
|
@@ -3,8 +3,8 @@ import { serializedAmountSchema } from '../../../generic/index.js'
|
|
|
3
3
|
import { serializedEvmTokenSchema } from '../../currency/token.js'
|
|
4
4
|
|
|
5
5
|
export const sushiSwapV2PoolSchema = z.object({
|
|
6
|
-
reserve0: serializedAmountSchema(serializedEvmTokenSchema),
|
|
7
|
-
reserve1: serializedAmountSchema(serializedEvmTokenSchema),
|
|
6
|
+
reserve0: serializedAmountSchema(serializedEvmTokenSchema()),
|
|
7
|
+
reserve1: serializedAmountSchema(serializedEvmTokenSchema()),
|
|
8
8
|
})
|
|
9
9
|
|
|
10
10
|
export type SerializedSushiSwapV2Pool = z.infer<typeof sushiSwapV2PoolSchema>
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { it } from 'node:test'
|
|
2
2
|
import { describe, expectTypeOf } from 'vitest'
|
|
3
|
+
import * as z from 'zod'
|
|
3
4
|
import type { EvmChainId } from '~/evm/chain/chains.js'
|
|
4
5
|
import type { EvmCurrency } from '~/evm/currency/currency.js'
|
|
5
6
|
import type { EvmID } from '~/evm/types/id.js'
|
|
6
7
|
import { EvmNative } from '../../evm/currency/native.js'
|
|
7
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
type EvmAddress,
|
|
10
|
+
EvmToken,
|
|
11
|
+
type SerializedEvmToken,
|
|
12
|
+
serializedEvmTokenSchema,
|
|
13
|
+
} from '../../evm/currency/token.js'
|
|
8
14
|
import { MvmToken } from '../../mvm/currency/token.js'
|
|
9
15
|
import { TvmNative } from '../../tvm/currency/native.js'
|
|
10
16
|
import type { TvmToken } from '../../tvm/currency/token.js'
|
|
@@ -272,4 +278,112 @@ describe('generic/currency/currency.ts types', () => {
|
|
|
272
278
|
}>
|
|
273
279
|
})
|
|
274
280
|
})
|
|
281
|
+
|
|
282
|
+
describe('serialization', () => {
|
|
283
|
+
describe('SerializedEvmToken', () => {
|
|
284
|
+
it('should have correct type with default metadata', () => {
|
|
285
|
+
type DefaultSerializedEvmToken = SerializedEvmToken
|
|
286
|
+
|
|
287
|
+
expectTypeOf<DefaultSerializedEvmToken>().toEqualTypeOf<{
|
|
288
|
+
chainId: EvmChainId
|
|
289
|
+
address: EvmAddress
|
|
290
|
+
symbol: string
|
|
291
|
+
name: string
|
|
292
|
+
decimals: number
|
|
293
|
+
type: 'token'
|
|
294
|
+
metadata: Record<string, unknown>
|
|
295
|
+
}>()
|
|
296
|
+
})
|
|
297
|
+
|
|
298
|
+
it('should infer metadata type from toJSON', () => {
|
|
299
|
+
const tokenWithDefaultMetadata = new EvmToken({
|
|
300
|
+
chainId: 1,
|
|
301
|
+
address: '0x1234567890abcdef1234567890abcdef12345678',
|
|
302
|
+
symbol: 'TEST',
|
|
303
|
+
name: 'Test Token',
|
|
304
|
+
decimals: 18,
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
expectTypeOf(tokenWithDefaultMetadata.toJSON().metadata).toEqualTypeOf<
|
|
308
|
+
Record<string, unknown>
|
|
309
|
+
>()
|
|
310
|
+
|
|
311
|
+
type CustomMetadata = {
|
|
312
|
+
logoUrl?: string
|
|
313
|
+
verified: boolean
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const tokenWithCustomMetadata = new EvmToken<CustomMetadata>({
|
|
317
|
+
chainId: 1,
|
|
318
|
+
address: '0x1234567890abcdef1234567890abcdef12345678',
|
|
319
|
+
symbol: 'TEST',
|
|
320
|
+
name: 'Test Token',
|
|
321
|
+
decimals: 18,
|
|
322
|
+
metadata: {
|
|
323
|
+
logoUrl: 'https://example.com/logo.png',
|
|
324
|
+
verified: true,
|
|
325
|
+
},
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
expectTypeOf(
|
|
329
|
+
tokenWithCustomMetadata.toJSON().metadata,
|
|
330
|
+
).toEqualTypeOf<CustomMetadata>()
|
|
331
|
+
})
|
|
332
|
+
})
|
|
333
|
+
|
|
334
|
+
describe('serializedEvmTokenSchema', () => {
|
|
335
|
+
it('should create schema with default metadata', () => {
|
|
336
|
+
const schema = serializedEvmTokenSchema()
|
|
337
|
+
type InferredType = z.infer<typeof schema>
|
|
338
|
+
|
|
339
|
+
expectTypeOf<InferredType>().toEqualTypeOf<{
|
|
340
|
+
chainId: EvmChainId
|
|
341
|
+
address: EvmAddress
|
|
342
|
+
symbol: string
|
|
343
|
+
name: string
|
|
344
|
+
decimals: number
|
|
345
|
+
type: 'token'
|
|
346
|
+
metadata: Record<string, unknown>
|
|
347
|
+
}>()
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
it('should create schema with custom metadata type', () => {
|
|
351
|
+
const customMetadataSchema = z.object({
|
|
352
|
+
logoUrl: z.string().optional(),
|
|
353
|
+
tags: z.array(z.string()).optional(),
|
|
354
|
+
verified: z.boolean(),
|
|
355
|
+
})
|
|
356
|
+
|
|
357
|
+
const schema = serializedEvmTokenSchema({
|
|
358
|
+
metadata: customMetadataSchema,
|
|
359
|
+
})
|
|
360
|
+
|
|
361
|
+
type InferredType = z.infer<typeof schema>
|
|
362
|
+
|
|
363
|
+
expectTypeOf<InferredType>().toEqualTypeOf<{
|
|
364
|
+
chainId: EvmChainId
|
|
365
|
+
address: EvmAddress
|
|
366
|
+
symbol: string
|
|
367
|
+
name: string
|
|
368
|
+
decimals: number
|
|
369
|
+
type: 'token'
|
|
370
|
+
metadata: {
|
|
371
|
+
logoUrl?: string
|
|
372
|
+
tags?: string[]
|
|
373
|
+
verified: boolean
|
|
374
|
+
}
|
|
375
|
+
}>()
|
|
376
|
+
})
|
|
377
|
+
|
|
378
|
+
it('should handle optional metadata parameter', () => {
|
|
379
|
+
const schemaWithoutMetadata = serializedEvmTokenSchema()
|
|
380
|
+
const schemaWithEmptyOptions = serializedEvmTokenSchema({})
|
|
381
|
+
|
|
382
|
+
type TypeWithoutMetadata = z.infer<typeof schemaWithoutMetadata>
|
|
383
|
+
type TypeWithEmptyOptions = z.infer<typeof schemaWithEmptyOptions>
|
|
384
|
+
|
|
385
|
+
expectTypeOf<TypeWithoutMetadata>().toEqualTypeOf<TypeWithEmptyOptions>()
|
|
386
|
+
})
|
|
387
|
+
})
|
|
388
|
+
})
|
|
275
389
|
})
|
|
@@ -10,7 +10,7 @@ export abstract class BaseCurrency<
|
|
|
10
10
|
TChainId extends ChainId = ChainId,
|
|
11
11
|
TMetadata extends CurrencyMetadata = Record<string, unknown>,
|
|
12
12
|
TCurrencyType extends string = string,
|
|
13
|
-
TSerializedCurrency extends object = SerializedCurrency
|
|
13
|
+
TSerializedCurrency extends object = SerializedCurrency<TMetadata>,
|
|
14
14
|
> {
|
|
15
15
|
public readonly chainId: TChainId
|
|
16
16
|
public readonly symbol: string
|
|
@@ -8,21 +8,32 @@ import {
|
|
|
8
8
|
type serializedTvmNativeSchema,
|
|
9
9
|
type serializedTvmTokenSchema,
|
|
10
10
|
} from '../../tvm/index.js'
|
|
11
|
+
import type { CurrencyMetadata } from './currency.js'
|
|
11
12
|
|
|
12
|
-
export type SerializedCurrencySchema
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
| typeof
|
|
16
|
-
| typeof
|
|
17
|
-
| typeof
|
|
18
|
-
| typeof
|
|
19
|
-
| typeof
|
|
20
|
-
| typeof
|
|
13
|
+
export type SerializedCurrencySchema<
|
|
14
|
+
TMetadata extends CurrencyMetadata = CurrencyMetadata,
|
|
15
|
+
> = ReturnType<
|
|
16
|
+
| typeof serializedEvmTokenSchema<TMetadata>
|
|
17
|
+
| typeof serializedEvmNativeSchema<TMetadata>
|
|
18
|
+
| typeof serializedEvmCurrencySchema<TMetadata>
|
|
19
|
+
| typeof serializedMvmTokenSchema<TMetadata>
|
|
20
|
+
| typeof serializedTvmTokenSchema<TMetadata>
|
|
21
|
+
| typeof serializedTvmNativeSchema<TMetadata>
|
|
22
|
+
| typeof serializedTvmCurrencySchema<TMetadata>
|
|
23
|
+
| typeof serializedCurrencySchema<TMetadata>
|
|
24
|
+
>
|
|
21
25
|
|
|
22
|
-
export const serializedCurrencySchema =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
export const serializedCurrencySchema = <
|
|
27
|
+
TMetadata extends {} = CurrencyMetadata,
|
|
28
|
+
>(
|
|
29
|
+
opts: { metadata?: z.ZodType<TMetadata> } = {},
|
|
30
|
+
) =>
|
|
31
|
+
z.union([
|
|
32
|
+
serializedEvmCurrencySchema(opts),
|
|
33
|
+
serializedMvmTokenSchema(opts),
|
|
34
|
+
serializedTvmCurrencySchema(opts),
|
|
35
|
+
])
|
|
27
36
|
|
|
28
|
-
export type SerializedCurrency
|
|
37
|
+
export type SerializedCurrency<
|
|
38
|
+
TMetadata extends CurrencyMetadata = CurrencyMetadata,
|
|
39
|
+
> = z.infer<ReturnType<typeof serializedCurrencySchema<TMetadata>>>
|