sushi 6.3.1 → 6.4.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.
Files changed (188) hide show
  1. package/_cjs/generic/chain/chains.js +4 -2
  2. package/_cjs/generic/chain/chains.js.map +1 -1
  3. package/_cjs/generic/currency/serialized-currency.js +2 -0
  4. package/_cjs/generic/currency/serialized-currency.js.map +1 -1
  5. package/_cjs/svm/chain/chains.js +54 -0
  6. package/_cjs/svm/chain/chains.js.map +1 -0
  7. package/_cjs/svm/chain/define-chain.js +13 -0
  8. package/_cjs/svm/chain/define-chain.js.map +1 -0
  9. package/_cjs/svm/chain/index.js +19 -0
  10. package/_cjs/svm/chain/index.js.map +1 -0
  11. package/_cjs/svm/config/index.js +19 -0
  12. package/_cjs/svm/config/index.js.map +1 -0
  13. package/_cjs/svm/config/simple-constants.js +6 -0
  14. package/_cjs/svm/config/simple-constants.js.map +1 -0
  15. package/_cjs/svm/config/tokens/index.js +19 -0
  16. package/_cjs/svm/config/tokens/index.js.map +1 -0
  17. package/_cjs/svm/config/tokens/token-maps/default-bases.js +21 -0
  18. package/_cjs/svm/config/tokens/token-maps/default-bases.js.map +1 -0
  19. package/_cjs/svm/config/tokens/token-maps/default-quote.js +13 -0
  20. package/_cjs/svm/config/tokens/token-maps/default-quote.js.map +1 -0
  21. package/_cjs/svm/config/tokens/token-maps/index.js +20 -0
  22. package/_cjs/svm/config/tokens/token-maps/index.js.map +1 -0
  23. package/_cjs/svm/config/tokens/token-maps/stables.js +20 -0
  24. package/_cjs/svm/config/tokens/token-maps/stables.js.map +1 -0
  25. package/_cjs/svm/config/tokens/tokens/USDC.js +18 -0
  26. package/_cjs/svm/config/tokens/tokens/USDC.js.map +1 -0
  27. package/_cjs/svm/config/tokens/tokens/USDT.js +18 -0
  28. package/_cjs/svm/config/tokens/tokens/USDT.js.map +1 -0
  29. package/_cjs/svm/config/tokens/tokens/WBTC.js +18 -0
  30. package/_cjs/svm/config/tokens/tokens/WBTC.js.map +1 -0
  31. package/_cjs/svm/config/tokens/tokens/WETH.js +18 -0
  32. package/_cjs/svm/config/tokens/tokens/WETH.js.map +1 -0
  33. package/_cjs/svm/config/tokens/tokens/WSOL.js +18 -0
  34. package/_cjs/svm/config/tokens/tokens/WSOL.js.map +1 -0
  35. package/_cjs/svm/config/tokens/tokens/index.js +22 -0
  36. package/_cjs/svm/config/tokens/tokens/index.js.map +1 -0
  37. package/_cjs/svm/config/tokens/wrapped-native.js +12 -0
  38. package/_cjs/svm/config/tokens/wrapped-native.js.map +1 -0
  39. package/_cjs/svm/currency/currency.js +17 -0
  40. package/_cjs/svm/currency/currency.js.map +1 -0
  41. package/_cjs/svm/currency/deserialize-currency.js +14 -0
  42. package/_cjs/svm/currency/deserialize-currency.js.map +1 -0
  43. package/_cjs/svm/currency/index.js +22 -0
  44. package/_cjs/svm/currency/index.js.map +1 -0
  45. package/_cjs/svm/currency/native.js +90 -0
  46. package/_cjs/svm/currency/native.js.map +1 -0
  47. package/_cjs/svm/currency/token.js +88 -0
  48. package/_cjs/svm/currency/token.js.map +1 -0
  49. package/_cjs/svm/currency/unwrap-token.js +15 -0
  50. package/_cjs/svm/currency/unwrap-token.js.map +1 -0
  51. package/_cjs/svm/index.js +20 -0
  52. package/_cjs/svm/index.js.map +1 -0
  53. package/_esm/generic/chain/chains.js +2 -0
  54. package/_esm/generic/chain/chains.js.map +1 -1
  55. package/_esm/generic/currency/serialized-currency.js +2 -0
  56. package/_esm/generic/currency/serialized-currency.js.map +1 -1
  57. package/_esm/svm/chain/chains.js +46 -0
  58. package/_esm/svm/chain/chains.js.map +1 -0
  59. package/_esm/svm/chain/define-chain.js +10 -0
  60. package/_esm/svm/chain/define-chain.js.map +1 -0
  61. package/_esm/svm/chain/index.js +3 -0
  62. package/_esm/svm/chain/index.js.map +1 -0
  63. package/_esm/svm/config/index.js +3 -0
  64. package/_esm/svm/config/index.js.map +1 -0
  65. package/_esm/svm/config/simple-constants.js +3 -0
  66. package/_esm/svm/config/simple-constants.js.map +1 -0
  67. package/_esm/svm/config/tokens/index.js +3 -0
  68. package/_esm/svm/config/tokens/index.js.map +1 -0
  69. package/_esm/svm/config/tokens/token-maps/default-bases.js +18 -0
  70. package/_esm/svm/config/tokens/token-maps/default-bases.js.map +1 -0
  71. package/_esm/svm/config/tokens/token-maps/default-quote.js +10 -0
  72. package/_esm/svm/config/tokens/token-maps/default-quote.js.map +1 -0
  73. package/_esm/svm/config/tokens/token-maps/index.js +4 -0
  74. package/_esm/svm/config/tokens/token-maps/index.js.map +1 -0
  75. package/_esm/svm/config/tokens/token-maps/stables.js +16 -0
  76. package/_esm/svm/config/tokens/token-maps/stables.js.map +1 -0
  77. package/_esm/svm/config/tokens/tokens/USDC.js +15 -0
  78. package/_esm/svm/config/tokens/tokens/USDC.js.map +1 -0
  79. package/_esm/svm/config/tokens/tokens/USDT.js +15 -0
  80. package/_esm/svm/config/tokens/tokens/USDT.js.map +1 -0
  81. package/_esm/svm/config/tokens/tokens/WBTC.js +15 -0
  82. package/_esm/svm/config/tokens/tokens/WBTC.js.map +1 -0
  83. package/_esm/svm/config/tokens/tokens/WETH.js +15 -0
  84. package/_esm/svm/config/tokens/tokens/WETH.js.map +1 -0
  85. package/_esm/svm/config/tokens/tokens/WSOL.js +15 -0
  86. package/_esm/svm/config/tokens/tokens/WSOL.js.map +1 -0
  87. package/_esm/svm/config/tokens/tokens/index.js +6 -0
  88. package/_esm/svm/config/tokens/tokens/index.js.map +1 -0
  89. package/_esm/svm/config/tokens/wrapped-native.js +9 -0
  90. package/_esm/svm/config/tokens/wrapped-native.js.map +1 -0
  91. package/_esm/svm/currency/currency.js +16 -0
  92. package/_esm/svm/currency/currency.js.map +1 -0
  93. package/_esm/svm/currency/deserialize-currency.js +12 -0
  94. package/_esm/svm/currency/deserialize-currency.js.map +1 -0
  95. package/_esm/svm/currency/index.js +6 -0
  96. package/_esm/svm/currency/index.js.map +1 -0
  97. package/_esm/svm/currency/native.js +52 -0
  98. package/_esm/svm/currency/native.js.map +1 -0
  99. package/_esm/svm/currency/token.js +49 -0
  100. package/_esm/svm/currency/token.js.map +1 -0
  101. package/_esm/svm/currency/unwrap-token.js +12 -0
  102. package/_esm/svm/currency/unwrap-token.js.map +1 -0
  103. package/_esm/svm/index.js +4 -0
  104. package/_esm/svm/index.js.map +1 -0
  105. package/_types/generic/chain/chains.d.ts +25 -1
  106. package/_types/generic/chain/chains.d.ts.map +1 -1
  107. package/_types/generic/chain/interface.d.ts +2 -1
  108. package/_types/generic/chain/interface.d.ts.map +1 -1
  109. package/_types/generic/currency/serialized-currency.d.ts +20 -2
  110. package/_types/generic/currency/serialized-currency.d.ts.map +1 -1
  111. package/_types/svm/chain/chains.d.ts +42 -0
  112. package/_types/svm/chain/chains.d.ts.map +1 -0
  113. package/_types/svm/chain/define-chain.d.ts +22 -0
  114. package/_types/svm/chain/define-chain.d.ts.map +1 -0
  115. package/_types/svm/chain/index.d.ts +3 -0
  116. package/_types/svm/chain/index.d.ts.map +1 -0
  117. package/_types/svm/config/index.d.ts +3 -0
  118. package/_types/svm/config/index.d.ts.map +1 -0
  119. package/_types/svm/config/simple-constants.d.ts +2 -0
  120. package/_types/svm/config/simple-constants.d.ts.map +1 -0
  121. package/_types/svm/config/tokens/index.d.ts +3 -0
  122. package/_types/svm/config/tokens/index.d.ts.map +1 -0
  123. package/_types/svm/config/tokens/token-maps/default-bases.d.ts +5 -0
  124. package/_types/svm/config/tokens/token-maps/default-bases.d.ts.map +1 -0
  125. package/_types/svm/config/tokens/token-maps/default-quote.d.ts +8 -0
  126. package/_types/svm/config/tokens/token-maps/default-quote.d.ts.map +1 -0
  127. package/_types/svm/config/tokens/token-maps/index.d.ts +4 -0
  128. package/_types/svm/config/tokens/token-maps/index.d.ts.map +1 -0
  129. package/_types/svm/config/tokens/token-maps/stables.d.ts +7 -0
  130. package/_types/svm/config/tokens/token-maps/stables.d.ts.map +1 -0
  131. package/_types/svm/config/tokens/tokens/USDC.d.ts +8 -0
  132. package/_types/svm/config/tokens/tokens/USDC.d.ts.map +1 -0
  133. package/_types/svm/config/tokens/tokens/USDT.d.ts +8 -0
  134. package/_types/svm/config/tokens/tokens/USDT.d.ts.map +1 -0
  135. package/_types/svm/config/tokens/tokens/WBTC.d.ts +8 -0
  136. package/_types/svm/config/tokens/tokens/WBTC.d.ts.map +1 -0
  137. package/_types/svm/config/tokens/tokens/WETH.d.ts +8 -0
  138. package/_types/svm/config/tokens/tokens/WETH.d.ts.map +1 -0
  139. package/_types/svm/config/tokens/tokens/WSOL.d.ts +8 -0
  140. package/_types/svm/config/tokens/tokens/WSOL.d.ts.map +1 -0
  141. package/_types/svm/config/tokens/tokens/index.d.ts +6 -0
  142. package/_types/svm/config/tokens/tokens/index.d.ts.map +1 -0
  143. package/_types/svm/config/tokens/wrapped-native.d.ts +7 -0
  144. package/_types/svm/config/tokens/wrapped-native.d.ts.map +1 -0
  145. package/_types/svm/currency/currency.d.ts +30 -0
  146. package/_types/svm/currency/currency.d.ts.map +1 -0
  147. package/_types/svm/currency/deserialize-currency.d.ts +6 -0
  148. package/_types/svm/currency/deserialize-currency.d.ts.map +1 -0
  149. package/_types/svm/currency/index.d.ts +6 -0
  150. package/_types/svm/currency/index.d.ts.map +1 -0
  151. package/_types/svm/currency/native.d.ts +25 -0
  152. package/_types/svm/currency/native.d.ts.map +1 -0
  153. package/_types/svm/currency/token.d.ts +31 -0
  154. package/_types/svm/currency/token.d.ts.map +1 -0
  155. package/_types/svm/currency/unwrap-token.d.ts +3 -0
  156. package/_types/svm/currency/unwrap-token.d.ts.map +1 -0
  157. package/_types/svm/index.d.ts +4 -0
  158. package/_types/svm/index.d.ts.map +1 -0
  159. package/generic/chain/chains.test.ts +7 -0
  160. package/generic/chain/chains.ts +2 -0
  161. package/generic/chain/interface.ts +2 -0
  162. package/generic/currency/currency.test-d.ts +56 -1
  163. package/generic/currency/serialized-currency.ts +7 -0
  164. package/package.json +15 -1
  165. package/svm/chain/chains.ts +93 -0
  166. package/svm/chain/define-chain.ts +50 -0
  167. package/svm/chain/index.ts +2 -0
  168. package/svm/config/index.ts +2 -0
  169. package/svm/config/simple-constants.ts +3 -0
  170. package/svm/config/tokens/index.ts +2 -0
  171. package/svm/config/tokens/token-maps/default-bases.ts +19 -0
  172. package/svm/config/tokens/token-maps/default-quote.ts +14 -0
  173. package/svm/config/tokens/token-maps/index.ts +3 -0
  174. package/svm/config/tokens/token-maps/stables.ts +22 -0
  175. package/svm/config/tokens/tokens/USDC.ts +18 -0
  176. package/svm/config/tokens/tokens/USDT.ts +18 -0
  177. package/svm/config/tokens/tokens/WBTC.ts +18 -0
  178. package/svm/config/tokens/tokens/WETH.ts +18 -0
  179. package/svm/config/tokens/tokens/WSOL.ts +18 -0
  180. package/svm/config/tokens/tokens/index.ts +5 -0
  181. package/svm/config/tokens/wrapped-native.ts +10 -0
  182. package/svm/currency/currency.ts +31 -0
  183. package/svm/currency/deserialize-currency.ts +17 -0
  184. package/svm/currency/index.ts +5 -0
  185. package/svm/currency/native.ts +81 -0
  186. package/svm/currency/token.ts +89 -0
  187. package/svm/currency/unwrap-token.ts +15 -0
  188. package/svm/index.ts +3 -0
@@ -0,0 +1,18 @@
1
+ import { SvmChainId } from '../../../../svm/chain/index.js'
2
+ import { SvmToken, svmAddress } from '../../../../svm/currency/token.js'
3
+
4
+ export const SVM_USDT_ADDRESS = {
5
+ [SvmChainId.SOLANA]: svmAddress(
6
+ 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
7
+ ),
8
+ } as const
9
+
10
+ export const SVM_USDT = {
11
+ [SvmChainId.SOLANA]: new SvmToken({
12
+ chainId: SvmChainId.SOLANA,
13
+ address: SVM_USDT_ADDRESS[SvmChainId.SOLANA],
14
+ decimals: 6,
15
+ symbol: 'USDT',
16
+ name: 'Tether USD',
17
+ }),
18
+ } as const
@@ -0,0 +1,18 @@
1
+ import { SvmChainId } from '../../../../svm/chain/index.js'
2
+ import { SvmToken, svmAddress } from '../../../../svm/currency/token.js'
3
+
4
+ export const SVM_WBTC_ADDRESS = {
5
+ [SvmChainId.SOLANA]: svmAddress(
6
+ '3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh',
7
+ ),
8
+ } as const
9
+
10
+ export const SVM_WBTC = {
11
+ [SvmChainId.SOLANA]: new SvmToken({
12
+ chainId: SvmChainId.SOLANA,
13
+ address: SVM_WBTC_ADDRESS[SvmChainId.SOLANA],
14
+ decimals: 8,
15
+ symbol: 'WBTC',
16
+ name: 'Wrapped BTC (Wormhole)',
17
+ }),
18
+ } as const
@@ -0,0 +1,18 @@
1
+ import { SvmChainId } from '../../../../svm/chain/index.js'
2
+ import { SvmToken, svmAddress } from '../../../../svm/currency/token.js'
3
+
4
+ export const SVM_WETH_ADDRESS = {
5
+ [SvmChainId.SOLANA]: svmAddress(
6
+ '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',
7
+ ),
8
+ } as const
9
+
10
+ export const SVM_WETH = {
11
+ [SvmChainId.SOLANA]: new SvmToken({
12
+ chainId: SvmChainId.SOLANA,
13
+ address: SVM_WETH_ADDRESS[SvmChainId.SOLANA],
14
+ decimals: 8,
15
+ symbol: 'WETH',
16
+ name: 'Wrapped Ether (Wormhole)',
17
+ }),
18
+ } as const
@@ -0,0 +1,18 @@
1
+ import { SvmChainId } from '../../../../svm/chain/index.js'
2
+ import { SvmToken, svmAddress } from '../../../../svm/currency/token.js'
3
+
4
+ export const WSOL_ADDRESS = {
5
+ [SvmChainId.SOLANA]: svmAddress(
6
+ 'So11111111111111111111111111111111111111112',
7
+ ),
8
+ } as const
9
+
10
+ export const WSOL = {
11
+ [SvmChainId.SOLANA]: new SvmToken({
12
+ chainId: SvmChainId.SOLANA,
13
+ address: WSOL_ADDRESS[SvmChainId.SOLANA],
14
+ decimals: 9,
15
+ symbol: 'WSOL',
16
+ name: 'Wrapped SOL',
17
+ }),
18
+ } as const
@@ -0,0 +1,5 @@
1
+ export * from './USDC.js'
2
+ export * from './USDT.js'
3
+ export * from './WBTC.js'
4
+ export * from './WETH.js'
5
+ export * from './WSOL.js'
@@ -0,0 +1,10 @@
1
+ import { SvmChainId } from '../../../svm/chain/index.js'
2
+ import { WSOL, WSOL_ADDRESS } from './tokens/WSOL.js'
3
+
4
+ export const SVM_WNATIVE_ADDRESS = {
5
+ [SvmChainId.SOLANA]: WSOL_ADDRESS[SvmChainId.SOLANA],
6
+ }
7
+
8
+ export const SVM_WNATIVE = {
9
+ [SvmChainId.SOLANA]: WSOL[SvmChainId.SOLANA],
10
+ }
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod'
2
+ import type { CurrencyMetadata } from '../../generic/currency/currency.js'
3
+ import { svmNativeAddress } from '../config/simple-constants.js'
4
+ import { type SvmNative, serializedSvmNativeSchema } from './native.js'
5
+ import { type SvmToken, serializedSvmTokenSchema } from './token.js'
6
+
7
+ export type SvmCurrency<
8
+ TMetadata extends CurrencyMetadata = Record<string, unknown>,
9
+ > = SvmToken<TMetadata> | SvmNative
10
+
11
+ export const serializedSvmCurrencySchema = <
12
+ TMetadata extends {} = CurrencyMetadata,
13
+ >(
14
+ opts: { metadata?: z.ZodType<TMetadata> } = {},
15
+ ) =>
16
+ z.discriminatedUnion('type', [
17
+ serializedSvmTokenSchema(opts),
18
+ serializedSvmNativeSchema(opts),
19
+ ])
20
+
21
+ /**
22
+ *
23
+ * @returns The address of the currency. If the currency is native, returns the native address constant.
24
+ */
25
+ export function getSvmCurrencyAddress(currency: SvmCurrency) {
26
+ return currency.type === 'native' ? svmNativeAddress : currency.address
27
+ }
28
+
29
+ export type SerializedSvmCurrency<
30
+ TMetadata extends CurrencyMetadata = CurrencyMetadata,
31
+ > = z.infer<ReturnType<typeof serializedSvmCurrencySchema<TMetadata>>>
@@ -0,0 +1,17 @@
1
+ import { type SerializedSvmNative, SvmNative } from './native.js'
2
+ import { type SerializedSvmToken, SvmToken } from './token.js'
3
+
4
+ function deserializeSvmCurrency(data: SerializedSvmToken): SvmToken
5
+ function deserializeSvmCurrency(data: SerializedSvmNative): SvmNative
6
+
7
+ function deserializeSvmCurrency(
8
+ data: SerializedSvmNative | SerializedSvmToken,
9
+ ) {
10
+ if (data.type === 'native') {
11
+ return new SvmNative(data)
12
+ } else {
13
+ return new SvmToken(data)
14
+ }
15
+ }
16
+
17
+ export { deserializeSvmCurrency }
@@ -0,0 +1,5 @@
1
+ export * from './currency.js'
2
+ export * from './deserialize-currency.js'
3
+ export * from './native.js'
4
+ export * from './token.js'
5
+ export * from './unwrap-token.js'
@@ -0,0 +1,81 @@
1
+ import * as z from 'zod'
2
+ import type { CurrencyMetadata } from '~/generic/currency/currency.js'
3
+ import { Native } from '../../generic/currency/native.js'
4
+ import {
5
+ getSvmChainById,
6
+ isSvmChainId,
7
+ type SvmChainId,
8
+ } from '../chain/chains.js'
9
+ import { SVM_WNATIVE } from '../config/index.js'
10
+ import { SvmToken } from './token.js'
11
+
12
+ export class SvmNative<
13
+ TMetadata extends CurrencyMetadata = Record<string, unknown>,
14
+ > extends Native<SvmChainId, TMetadata> {
15
+ public override wrap(): SvmToken<TMetadata> {
16
+ return new SvmToken({
17
+ ...SVM_WNATIVE[this.chainId],
18
+ metadata: structuredClone(this.metadata),
19
+ })
20
+ }
21
+
22
+ public override toJSON(): SerializedSvmNative<TMetadata> {
23
+ return {
24
+ chainId: this.chainId,
25
+ symbol: this.symbol,
26
+ name: this.name,
27
+ decimals: this.decimals,
28
+ type: this.type,
29
+
30
+ metadata: this.metadata,
31
+ } as const
32
+ }
33
+
34
+ static fromJSON<TMetadata extends CurrencyMetadata>(
35
+ data: Omit<SerializedSvmNative<TMetadata>, 'metadata'> & {
36
+ metadata?: TMetadata
37
+ },
38
+ ): SvmNative<TMetadata> {
39
+ return new this(data)
40
+ }
41
+
42
+ static fromChainId(chainId: SvmChainId): SvmNative {
43
+ const chain = getSvmChainById(chainId)
44
+
45
+ return new SvmNative({
46
+ chainId,
47
+ symbol: chain.nativeCurrency.symbol,
48
+ name: chain.nativeCurrency.name,
49
+ decimals: chain.nativeCurrency.decimals,
50
+ })
51
+ }
52
+ }
53
+
54
+ export const serializedSvmNativeSchema = <
55
+ TMetadata extends {} = CurrencyMetadata,
56
+ >({
57
+ metadata,
58
+ }: {
59
+ metadata?: z.ZodType<TMetadata>
60
+ } = {}) =>
61
+ z.object({
62
+ chainId: z
63
+ .number()
64
+ .int()
65
+ .refine(isSvmChainId)
66
+ .transform((chainId) => chainId as SvmChainId),
67
+ symbol: z.string(),
68
+ name: z.string(),
69
+ decimals: z.number().int().nonnegative(),
70
+ type: z.literal('native'),
71
+
72
+ metadata: (metadata ||
73
+ z
74
+ .record(z.string(), z.unknown())
75
+ .optional()
76
+ .default({})) as z.ZodType<TMetadata>,
77
+ })
78
+
79
+ export type SerializedSvmNative<
80
+ TMetadata extends CurrencyMetadata = CurrencyMetadata,
81
+ > = z.infer<ReturnType<typeof serializedSvmNativeSchema<TMetadata>>>
@@ -0,0 +1,89 @@
1
+ import {
2
+ isAddress as isSvmAddress,
3
+ type Address as SvmAddress,
4
+ address as svmAddress,
5
+ } from '@solana/addresses'
6
+ import * as z from 'zod'
7
+ import type { CurrencyMetadata } from '../../generic/currency/currency.js'
8
+ import { Token } from '../../generic/currency/token.js'
9
+ import { isSvmChainId, type SvmChainId } from '../chain/chains.js'
10
+
11
+ export { type SvmAddress, svmAddress, isSvmAddress }
12
+
13
+ export type SvmTokenOrigin = 'native' | 'native-bridge'
14
+
15
+ export class SvmToken<
16
+ TMetadata extends CurrencyMetadata = Record<string, unknown>,
17
+ > extends Token<SvmChainId, SvmAddress, TMetadata> {
18
+ public readonly origin: SvmTokenOrigin | undefined
19
+
20
+ constructor({
21
+ origin,
22
+ ...rest
23
+ }: {
24
+ origin?: SvmTokenOrigin | undefined
25
+ } & ConstructorParameters<
26
+ typeof Token<SvmChainId, SvmAddress, TMetadata>
27
+ >[0]) {
28
+ super({ ...rest })
29
+ this.origin = origin
30
+ }
31
+
32
+ public override wrap(): SvmToken<TMetadata> {
33
+ return this
34
+ }
35
+
36
+ public override toJSON(): SerializedSvmToken<TMetadata> {
37
+ return {
38
+ chainId: this.chainId,
39
+ address: this.address,
40
+ symbol: this.symbol,
41
+ name: this.name,
42
+ decimals: this.decimals,
43
+ type: this.type,
44
+
45
+ metadata: this.metadata,
46
+ } as const
47
+ }
48
+
49
+ static fromJSON<TMetadata extends CurrencyMetadata>(
50
+ data: Omit<SerializedSvmToken<TMetadata>, 'metadata'> & {
51
+ metadata?: TMetadata
52
+ },
53
+ ): SvmToken<TMetadata> {
54
+ return new this(data)
55
+ }
56
+ }
57
+
58
+ export const serializedSvmTokenSchema = <
59
+ TMetadata extends {} = CurrencyMetadata,
60
+ >({
61
+ metadata,
62
+ }: {
63
+ metadata?: z.ZodType<TMetadata>
64
+ } = {}) =>
65
+ z.object({
66
+ chainId: z
67
+ .number()
68
+ .int()
69
+ .refine(isSvmChainId)
70
+ .transform((chainId) => chainId as SvmChainId),
71
+ address: z
72
+ .string()
73
+ .refine(isSvmAddress)
74
+ .transform((address) => address as SvmAddress),
75
+ symbol: z.string(),
76
+ name: z.string(),
77
+ decimals: z.number().int().nonnegative(),
78
+ type: z.literal('token'),
79
+
80
+ metadata: (metadata ||
81
+ z
82
+ .record(z.string(), z.unknown())
83
+ .optional()
84
+ .default({})) as z.ZodType<TMetadata>,
85
+ })
86
+
87
+ export type SerializedSvmToken<
88
+ TMetadata extends CurrencyMetadata = CurrencyMetadata,
89
+ > = z.infer<ReturnType<typeof serializedSvmTokenSchema<TMetadata>>>
@@ -0,0 +1,15 @@
1
+ import { SVM_WNATIVE_ADDRESS } from '../config/index.js'
2
+ import type { SvmCurrency } from './currency.js'
3
+ import { SvmNative } from './native.js'
4
+
5
+ export function unwrapSvmToken(currency: SvmCurrency): SvmCurrency {
6
+ if (currency.type === 'native') {
7
+ return currency
8
+ }
9
+
10
+ if (currency.address === SVM_WNATIVE_ADDRESS[currency.chainId]) {
11
+ return SvmNative.fromChainId(currency.chainId)
12
+ }
13
+
14
+ return currency
15
+ }
package/svm/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './chain/index.js'
2
+ export * from './config/index.js'
3
+ export * from './currency/index.js'