sushi 6.0.23 → 6.0.25

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.
Files changed (100) hide show
  1. package/_cjs/evm/config/features/sushiswap-v3.js.map +1 -1
  2. package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v2.js +0 -2
  3. package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v2.js.map +1 -1
  4. package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v3.js +0 -1
  5. package/_cjs/evm/config/subgraphs/subgraphs/sushiswap-v3.js.map +1 -1
  6. package/_cjs/evm/currency/currency.js +4 -3
  7. package/_cjs/evm/currency/currency.js.map +1 -1
  8. package/_cjs/evm/currency/native.js +10 -2
  9. package/_cjs/evm/currency/native.js.map +1 -1
  10. package/_cjs/evm/currency/token.js +6 -4
  11. package/_cjs/evm/currency/token.js.map +1 -1
  12. package/_cjs/evm/pool/sushiswap-v2/zod.js +2 -2
  13. package/_cjs/evm/pool/sushiswap-v2/zod.js.map +1 -1
  14. package/_cjs/evm/token-list/constants.js +1 -1
  15. package/_cjs/evm/token-list/constants.js.map +1 -1
  16. package/_cjs/generic/currency/serialized-currency.js +5 -4
  17. package/_cjs/generic/currency/serialized-currency.js.map +1 -1
  18. package/_cjs/mvm/currency/token.js +5 -1
  19. package/_cjs/mvm/currency/token.js.map +1 -1
  20. package/_cjs/tvm/currency/currency.js +4 -3
  21. package/_cjs/tvm/currency/currency.js.map +1 -1
  22. package/_cjs/tvm/currency/native.js +13 -5
  23. package/_cjs/tvm/currency/native.js.map +1 -1
  24. package/_cjs/tvm/currency/token.js +8 -1
  25. package/_cjs/tvm/currency/token.js.map +1 -1
  26. package/_esm/evm/config/features/sushiswap-v3.js +0 -10
  27. package/_esm/evm/config/features/sushiswap-v3.js.map +1 -1
  28. package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v2.js +0 -2
  29. package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v2.js.map +1 -1
  30. package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v3.js +0 -5
  31. package/_esm/evm/config/subgraphs/subgraphs/sushiswap-v3.js.map +1 -1
  32. package/_esm/evm/currency/currency.js +3 -3
  33. package/_esm/evm/currency/currency.js.map +1 -1
  34. package/_esm/evm/currency/native.js +9 -2
  35. package/_esm/evm/currency/native.js.map +1 -1
  36. package/_esm/evm/currency/token.js +5 -4
  37. package/_esm/evm/currency/token.js.map +1 -1
  38. package/_esm/evm/pool/sushiswap-v2/zod.js +2 -2
  39. package/_esm/evm/pool/sushiswap-v2/zod.js.map +1 -1
  40. package/_esm/evm/token-list/constants.js +1 -1
  41. package/_esm/evm/token-list/constants.js.map +1 -1
  42. package/_esm/generic/currency/serialized-currency.js +4 -4
  43. package/_esm/generic/currency/serialized-currency.js.map +1 -1
  44. package/_esm/mvm/currency/token.js +4 -1
  45. package/_esm/mvm/currency/token.js.map +1 -1
  46. package/_esm/tvm/currency/currency.js +3 -3
  47. package/_esm/tvm/currency/currency.js.map +1 -1
  48. package/_esm/tvm/currency/native.js +12 -5
  49. package/_esm/tvm/currency/native.js.map +1 -1
  50. package/_esm/tvm/currency/token.js +7 -1
  51. package/_esm/tvm/currency/token.js.map +1 -1
  52. package/_types/evm/config/features/sushiswap-v3.d.ts.map +1 -1
  53. package/_types/evm/config/subgraphs/subgraphs/sushiswap-v2.d.ts +4 -3
  54. package/_types/evm/config/subgraphs/subgraphs/sushiswap-v2.d.ts.map +1 -1
  55. package/_types/evm/config/subgraphs/subgraphs/sushiswap-v3.d.ts +4 -3
  56. package/_types/evm/config/subgraphs/subgraphs/sushiswap-v3.d.ts.map +1 -1
  57. package/_types/evm/config/tokens/token-maps/default-bases.d.ts +42 -42
  58. package/_types/evm/config/tokens/token-maps/default-quote.d.ts +43 -43
  59. package/_types/evm/config/tokens/token-maps/short-name-to-currency.d.ts +34 -34
  60. package/_types/evm/currency/currency.d.ts +68 -30
  61. package/_types/evm/currency/currency.d.ts.map +1 -1
  62. package/_types/evm/currency/native.d.ts +42 -20
  63. package/_types/evm/currency/native.d.ts.map +1 -1
  64. package/_types/evm/currency/token.d.ts +42 -19
  65. package/_types/evm/currency/token.d.ts.map +1 -1
  66. package/_types/evm/pool/sushiswap-v2/zod.d.ts +14 -0
  67. package/_types/evm/pool/sushiswap-v2/zod.d.ts.map +1 -1
  68. package/_types/evm/token-list/constants.d.ts +1 -1
  69. package/_types/evm/token-list/constants.d.ts.map +1 -1
  70. package/_types/generic/currency/currency.d.ts +1 -1
  71. package/_types/generic/currency/currency.d.ts.map +1 -1
  72. package/_types/generic/currency/serialized-currency.d.ts +168 -74
  73. package/_types/generic/currency/serialized-currency.d.ts.map +1 -1
  74. package/_types/mvm/currency/token.d.ts +42 -19
  75. package/_types/mvm/currency/token.d.ts.map +1 -1
  76. package/_types/tvm/config/tokens/native.d.ts +1 -1
  77. package/_types/tvm/config/tokens/token-maps/default-bases.d.ts +1 -1
  78. package/_types/tvm/currency/currency.d.ts +68 -30
  79. package/_types/tvm/currency/currency.d.ts.map +1 -1
  80. package/_types/tvm/currency/native.d.ts +42 -20
  81. package/_types/tvm/currency/native.d.ts.map +1 -1
  82. package/_types/tvm/currency/token.d.ts +42 -18
  83. package/_types/tvm/currency/token.d.ts.map +1 -1
  84. package/evm/config/features/sushiswap-v3.ts +0 -10
  85. package/evm/config/subgraphs/subgraphs/sushiswap-v2.ts +19 -18
  86. package/evm/config/subgraphs/subgraphs/sushiswap-v3.ts +19 -22
  87. package/evm/currency/currency.ts +13 -6
  88. package/evm/currency/native.ts +36 -14
  89. package/evm/currency/token.ts +27 -13
  90. package/evm/pool/sushiswap-v2/zod.ts +2 -2
  91. package/evm/token-list/constants.ts +1 -1
  92. package/generic/currency/amount.test.ts +0 -1
  93. package/generic/currency/currency.test-d.ts +115 -1
  94. package/generic/currency/currency.ts +1 -1
  95. package/generic/currency/serialized-currency.ts +26 -15
  96. package/mvm/currency/token.ts +27 -11
  97. package/package.json +1 -1
  98. package/tvm/currency/currency.ts +12 -5
  99. package/tvm/currency/native.ts +40 -18
  100. 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: z.ZodObject<{
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
- }, "strip", z.ZodTypeAny, {
24
- symbol: string;
25
- address: `T${string}`;
26
- name: string;
27
- decimals: number;
28
- type: "token";
29
- chainId: -2;
30
- }, {
31
- symbol: string;
32
- address: string;
33
- name: string;
34
- decimals: number;
35
- type: "token";
36
- chainId: number;
37
- }>;
38
- export type SerializedTvmToken = z.infer<typeof serializedTvmTokenSchema>;
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;CAU7C;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAOnC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
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, 'COMPLETE'>()
59
+ })<SushiSwapV2ChainId, 'PARTIAL'>()
61
60
 
62
- export const V2SubgraphTemplateMap: Record<SushiSwapV2ChainId, string> =
63
- Object.fromEntries(
64
- Object.entries({
65
- ...SUSHISWAP_V2_DECENTRALIZED_DEPLOYMENT_IDS,
66
- ...SUSHISWAP_V2_DECENTRALIZED_SUBGRAPH_IDS,
67
- ...SUSHISWAP_V2_OTHER_URLS,
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
- .map(([chainId]) => {
70
- const url = getSushiSwapV2SubgraphUrl(
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, 'COMPLETE'>()
56
+ })<SushiSwapV3ChainId, 'PARTIAL'>()
62
57
 
63
- export const V3SubgraphTemplateMap: Record<SushiSwapV3ChainId, string> =
64
- Object.fromEntries(
65
- Object.entries({
66
- ...SUSHISWAP_V3_DECENTRALIZED_DEPLOYMENT_IDS,
67
- ...SUSHISWAP_V3_DECENTRALIZED_SUBGRAPH_IDS,
68
- ...SUSHISWAP_V3_OTHER_URLS,
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
- .map(([chainId]) => {
71
- const url = getSushiSwapV3SubgraphUrl(
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>
@@ -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 = z.discriminatedUnion('type', [
12
- serializedEvmTokenSchema,
13
- serializedEvmNativeSchema,
14
- ])
15
-
16
- export type SerializedEvmCurrency = z.infer<typeof serializedEvmCurrencySchema>
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>>>
@@ -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 type { EvmToken } from './token.js'
10
+ import { EvmToken } from './token.js'
10
11
 
11
- export class EvmNative extends Native<EvmChainId> {
12
- public override wrap(): EvmToken {
13
- return WNATIVE[this.chainId]
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
- public static fromJSON(data: SerializedEvmNative): EvmNative {
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 = z.object({
43
- chainId: z.number().int().refine(isEvmChainId),
44
- symbol: z.string(),
45
- name: z.string(),
46
- decimals: z.number().int().nonnegative(),
47
- type: z.literal('native'),
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 = z.infer<typeof serializedEvmNativeSchema>
70
+ export type SerializedEvmNative<
71
+ TMetadata extends CurrencyMetadata = CurrencyMetadata,
72
+ > = z.infer<ReturnType<typeof serializedEvmNativeSchema<TMetadata>>>
@@ -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(data: SerializedEvmToken): EvmToken {
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 = z.object({
71
- chainId: z.number().int().refine(isEvmChainId),
72
- address: z
73
- .string()
74
- .refine((address) => isAddress(address, { strict: false })),
75
- symbol: z.string(),
76
- name: z.string(),
77
- decimals: z.number().int().nonnegative(),
78
- type: z.literal('token'),
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 = z.infer<typeof serializedEvmTokenSchema>
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>
@@ -36,7 +36,7 @@ export const PLASMA_BNB_LIST =
36
36
  'https://raw.githubusercontent.com/plasmadlt/plasma-finance-token-list/master/bnb.json'
37
37
 
38
38
  export const LINEA_LIST =
39
- 'https://raw.githubusercontent.com/Consensys/linea-token-list/main/json/linea-mainnet-token-fulllist.json'
39
+ 'https://raw.githubusercontent.com/Consensys/linea-token-list/main/json/linea-mainnet-token-shortlist.json'
40
40
 
41
41
  export const PANCAKESWAP_EXTENDED =
42
42
  'https://tokens.pancakeswap.finance/pancakeswap-extended.json'
@@ -447,7 +447,6 @@ describe('Amount', () => {
447
447
  expect(amount.toString()).toBe('1.5')
448
448
 
449
449
  const precise = new Amount(mockToken, 1234567890123456789n)
450
- console.log(precise.toString())
451
450
  expect(precise.toString()).toBe('1.234567890123456789')
452
451
  })
453
452
  })
@@ -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 { type EvmAddress, EvmToken } from '../../evm/currency/token.js'
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
- | typeof serializedEvmTokenSchema
14
- | typeof serializedEvmNativeSchema
15
- | typeof serializedEvmCurrencySchema
16
- | typeof serializedMvmTokenSchema
17
- | typeof serializedTvmTokenSchema
18
- | typeof serializedTvmNativeSchema
19
- | typeof serializedTvmCurrencySchema
20
- | typeof serializedCurrencySchema
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 = z.union([
23
- serializedEvmCurrencySchema,
24
- serializedMvmTokenSchema,
25
- serializedTvmCurrencySchema,
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 = z.infer<typeof serializedCurrencySchema>
37
+ export type SerializedCurrency<
38
+ TMetadata extends CurrencyMetadata = CurrencyMetadata,
39
+ > = z.infer<ReturnType<typeof serializedCurrencySchema<TMetadata>>>