@proton/wrap-constants 0.2.192 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,2801 +1,2275 @@
1
+ import * as z from "zod";
2
+ import cloneDeep from "lodash.clonedeep";
3
+ import BN from "bignumber.js";
1
4
  // src/coins.ts
2
- var Chains = /* @__PURE__ */ ((Chains2) => {
3
- Chains2["BitcoinMainnet"] = "Bitcoin";
4
- Chains2["BitcoinTestnet"] = "Bitcoin (Testnet)";
5
- Chains2["EthereumMainnet"] = "Ethereum";
6
- Chains2["EthereumSepolia"] = "Ethereum (Sepolia)";
7
- Chains2["LitecoinMainnet"] = "Litecoin";
8
- Chains2["LitecoinTestnet"] = "Litecoin (Testnet)";
9
- Chains2["BitcoinCashMainnet"] = "Bitcoin Cash";
10
- Chains2["BitcoinCashTestnet"] = "Bitcoin Cash (Testnet)";
11
- Chains2["StellarMainnet"] = "Stellar";
12
- Chains2["StellarTestnet"] = "Stellar (Testnet)";
13
- Chains2["ProtonMainnet"] = "Proton";
14
- Chains2["ProtonTestnet"] = "Proton (Testnet)";
15
- Chains2["PolkadotMainnet"] = "Polkadot";
16
- Chains2["BinanceBEP2"] = "Binance (BEP2)";
17
- Chains2["BinanceBEP20"] = "Binance (BEP20)";
18
- Chains2["EosMainnet"] = "EOS";
19
- Chains2["EosTestnet"] = "EOS (Jungle Testnet)";
20
- Chains2["HederaMainnet"] = "Hedera (Mainnet)";
21
- Chains2["HederaTestnet"] = "Hedera (Testnet)";
22
- Chains2["DogeMainnet"] = "Dogecoin";
23
- Chains2["CardanoMainnet"] = "Cardano";
24
- Chains2["AvalancheXChain"] = "Avalanche X-Chain";
25
- Chains2["AvalancheCChain"] = "Avalanche C-Chain";
26
- Chains2["PolygonMainnet"] = "Polygon";
27
- Chains2["TerraMainnet"] = "Terra";
28
- Chains2["RippleMainnet"] = "Ripple";
29
- Chains2["SolanaMainnet"] = "Solana";
30
- Chains2["XDCMainnet"] = "XDC Network";
31
- Chains2["MetalXTestnet"] = "Metal X-Chain (Testnet)";
32
- Chains2["MetalCTestnet"] = "Metal C-Chain (Testnet)";
33
- Chains2["MetalCMainnet"] = "Metal C-Chain";
34
- Chains2["MetalL2Mainnet"] = "Metal L2";
35
- Chains2["MetalL2Testnet"] = "Metal L2 (Testnet)";
36
- return Chains2;
37
- })(Chains || {});
38
- var Networks = /* @__PURE__ */ ((Networks2) => {
39
- Networks2["Mainnet"] = "mainnet";
40
- Networks2["Testnet"] = "testnet";
41
- Networks2["ERC20"] = "erc20";
42
- Networks2["BEP20"] = "bep20";
43
- Networks2["XLM"] = "xlm";
44
- Networks2["AVM"] = "avm";
45
- Networks2["EVM"] = "evm";
46
- Networks2["METALL2"] = "metall2";
47
- Networks2["Sepolia"] = "sepolia";
48
- return Networks2;
49
- })(Networks || {});
50
- var similarChains = {
51
- ["Ethereum" /* EthereumMainnet */]: ["Binance (BEP20)" /* BinanceBEP20 */],
52
- ["Binance (BEP20)" /* BinanceBEP20 */]: ["Ethereum" /* EthereumMainnet */]
5
+ let Chains = /* @__PURE__ */ function(Chains) {
6
+ Chains["BitcoinMainnet"] = "Bitcoin";
7
+ Chains["BitcoinTestnet"] = "Bitcoin (Testnet)";
8
+ Chains["EthereumMainnet"] = "Ethereum";
9
+ Chains["EthereumSepolia"] = "Ethereum (Sepolia)";
10
+ Chains["LitecoinMainnet"] = "Litecoin";
11
+ Chains["LitecoinTestnet"] = "Litecoin (Testnet)";
12
+ Chains["BitcoinCashMainnet"] = "Bitcoin Cash";
13
+ Chains["BitcoinCashTestnet"] = "Bitcoin Cash (Testnet)";
14
+ Chains["StellarMainnet"] = "Stellar";
15
+ Chains["StellarTestnet"] = "Stellar (Testnet)";
16
+ Chains["ProtonMainnet"] = "Proton";
17
+ Chains["ProtonTestnet"] = "Proton (Testnet)";
18
+ Chains["PolkadotMainnet"] = "Polkadot";
19
+ Chains["BinanceBEP2"] = "Binance (BEP2)";
20
+ Chains["BinanceBEP20"] = "Binance (BEP20)";
21
+ Chains["EosMainnet"] = "EOS";
22
+ Chains["EosTestnet"] = "EOS (Jungle Testnet)";
23
+ Chains["HederaMainnet"] = "Hedera (Mainnet)";
24
+ Chains["HederaTestnet"] = "Hedera (Testnet)";
25
+ Chains["DogeMainnet"] = "Dogecoin";
26
+ Chains["CardanoMainnet"] = "Cardano";
27
+ Chains["AvalancheXChain"] = "Avalanche X-Chain";
28
+ Chains["AvalancheCChain"] = "Avalanche C-Chain";
29
+ Chains["PolygonMainnet"] = "Polygon";
30
+ Chains["TerraMainnet"] = "Terra";
31
+ Chains["RippleMainnet"] = "Ripple";
32
+ Chains["SolanaMainnet"] = "Solana";
33
+ Chains["XDCMainnet"] = "XDC Network";
34
+ Chains["MetalXTestnet"] = "Metal X-Chain (Testnet)";
35
+ Chains["MetalCTestnet"] = "Metal C-Chain (Testnet)";
36
+ Chains["MetalCMainnet"] = "Metal C-Chain";
37
+ Chains["MetalL2Mainnet"] = "Metal L2";
38
+ Chains["MetalL2Testnet"] = "Metal L2 (Testnet)";
39
+ return Chains;
40
+ }({});
41
+ let Networks = /* @__PURE__ */ function(Networks) {
42
+ Networks["Mainnet"] = "mainnet";
43
+ Networks["Testnet"] = "testnet";
44
+ Networks["ERC20"] = "erc20";
45
+ Networks["BEP20"] = "bep20";
46
+ Networks["XLM"] = "xlm";
47
+ Networks["AVM"] = "avm";
48
+ Networks["EVM"] = "evm";
49
+ Networks["METALL2"] = "metall2";
50
+ Networks["Sepolia"] = "sepolia";
51
+ return Networks;
52
+ }({});
53
+ const similarChains = {
54
+ ["Ethereum"]: ["Binance (BEP20)"],
55
+ ["Binance (BEP20)"]: ["Ethereum"]
53
56
  };
54
- var Providers = /* @__PURE__ */ ((Providers2) => {
55
- Providers2["FIREBLOCKS"] = "fireblocks";
56
- Providers2["METAL"] = "metal";
57
- Providers2["METALL2"] = "metall2";
58
- return Providers2;
59
- })(Providers || {});
60
- var explorerLinkByChain = {
61
- ["Bitcoin" /* BitcoinMainnet */]: (txid) => `https://blockchain.com/btc/tx/${txid}`,
62
- ["Bitcoin (Testnet)" /* BitcoinTestnet */]: (txid) => `https://blockstream.info/testnet/tx/${txid}`,
63
- ["Ethereum" /* EthereumMainnet */]: (txid) => `https://etherscan.io/tx/${txid}`,
64
- ["Ethereum (Sepolia)" /* EthereumSepolia */]: (txid) => `https://sepolia.etherscan.io/tx/${txid}`,
65
- ["Litecoin" /* LitecoinMainnet */]: (txid) => `https://blockchair.com/litecoin/transaction/${txid}`,
66
- ["Litecoin (Testnet)" /* LitecoinTestnet */]: (txid) => `https://blockexplorer.one/litecoin/testnet/blockHash/${txid}`,
67
- ["Bitcoin Cash" /* BitcoinCashMainnet */]: (txid) => `https://blockchair.com/bitcoin-cash/transaction/${txid}`,
68
- ["Bitcoin Cash (Testnet)" /* BitcoinCashTestnet */]: (txid) => `https://blockexplorer.one/bitcoin-cash/testnet/blockHash/${txid}`,
69
- ["Stellar" /* StellarMainnet */]: (txid) => `https://blockchair.com/stellar/transaction/${txid}`,
70
- ["Stellar (Testnet)" /* StellarTestnet */]: (txid) => `https://testnet.steexp.com/tx/${txid}`,
71
- ["Proton" /* ProtonMainnet */]: (txid, traces) => `https://explorer.xprnetwork.org/transaction/${txid}${traces ? "?tab=traces" : ""}`,
72
- ["Proton (Testnet)" /* ProtonTestnet */]: (txid, traces) => `https://testnet.explorer.xprnetwork.org/transaction/${txid}${traces ? "?tab=traces" : ""}`,
73
- ["Polkadot" /* PolkadotMainnet */]: (txid) => `https://polkadot.subscan.io/extrinsic/${txid}`,
74
- ["Binance (BEP2)" /* BinanceBEP2 */]: (txid) => `https://binance.mintscan.io/txs/${txid}`,
75
- ["Binance (BEP20)" /* BinanceBEP20 */]: (txid) => `https://bscscan.com/tx/${txid}`,
76
- ["EOS" /* EosMainnet */]: (txid) => `https://bloks.io/transaction/${txid}`,
77
- ["EOS (Jungle Testnet)" /* EosTestnet */]: (txid) => `https://jungle.bloks.io/transaction/${txid}`,
78
- ["Hedera (Mainnet)" /* HederaMainnet */]: (txid) => `https://app.dragonglass.me/transactions/${txid}`,
79
- ["Hedera (Testnet)" /* HederaTestnet */]: (txid) => `https://testnet.dragonglass.me/transactions/${txid}`,
80
- ["Dogecoin" /* DogeMainnet */]: (txid) => `https://blockchair.com/dogecoin/transaction/${txid}`,
81
- ["Cardano" /* CardanoMainnet */]: (txid) => `https://explorer.cardano.org/en/transaction?id=${txid}`,
82
- ["Avalanche X-Chain" /* AvalancheXChain */]: (txid) => `https://avascan.info/blockchain/x/tx/${txid}`,
83
- ["Avalanche C-Chain" /* AvalancheCChain */]: (txid) => `https://snowtrace.io/tx/${txid}`,
84
- ["Polygon" /* PolygonMainnet */]: (txid) => `https://polygonscan.com/tx/${txid}`,
85
- ["Terra" /* TerraMainnet */]: (txid) => `https://terra.stake.id/?#/tx/${txid}`,
86
- ["Ripple" /* RippleMainnet */]: (txid) => `https://xrpscan.com/tx/${txid}`,
87
- ["Solana" /* SolanaMainnet */]: (txid) => `https://explorer.solana.com/tx/${txid}`,
88
- ["Metal X-Chain (Testnet)" /* MetalXTestnet */]: (txid) => `https://metalscan.io/tx/${txid}`,
89
- ["Metal C-Chain (Testnet)" /* MetalCTestnet */]: (txid) => `https://tahoe.metaltrace.io/tx/${txid}`,
90
- ["Metal C-Chain" /* MetalCMainnet */]: (txid) => `https://metalscan.io/tx/${txid}`,
91
- ["XDC Network" /* XDCMainnet */]: (txid) => `https://xdc.blocksscan.io/txs/${txid}`,
92
- ["Metal L2 (Testnet)" /* MetalL2Testnet */]: (txid) => `https://testnet.explorer.metall2.com/tx/${txid}`,
93
- ["Metal L2" /* MetalL2Mainnet */]: (txid) => `https://explorer.metall2.com/tx/${txid}`
57
+ let Providers = /* @__PURE__ */ function(Providers) {
58
+ Providers["FIREBLOCKS"] = "fireblocks";
59
+ Providers["METAL"] = "metal";
60
+ Providers["METALL2"] = "metall2";
61
+ return Providers;
62
+ }({});
63
+ const explorerLinkByChain = {
64
+ ["Bitcoin"]: (txid) => `https://blockchain.com/btc/tx/${txid}`,
65
+ ["Bitcoin (Testnet)"]: (txid) => `https://blockstream.info/testnet/tx/${txid}`,
66
+ ["Ethereum"]: (txid) => `https://etherscan.io/tx/${txid}`,
67
+ ["Ethereum (Sepolia)"]: (txid) => `https://sepolia.etherscan.io/tx/${txid}`,
68
+ ["Litecoin"]: (txid) => `https://blockchair.com/litecoin/transaction/${txid}`,
69
+ ["Litecoin (Testnet)"]: (txid) => `https://blockexplorer.one/litecoin/testnet/blockHash/${txid}`,
70
+ ["Bitcoin Cash"]: (txid) => `https://blockchair.com/bitcoin-cash/transaction/${txid}`,
71
+ ["Bitcoin Cash (Testnet)"]: (txid) => `https://blockexplorer.one/bitcoin-cash/testnet/blockHash/${txid}`,
72
+ ["Stellar"]: (txid) => `https://blockchair.com/stellar/transaction/${txid}`,
73
+ ["Stellar (Testnet)"]: (txid) => `https://testnet.steexp.com/tx/${txid}`,
74
+ ["Proton"]: (txid, traces) => `https://explorer.xprnetwork.org/transaction/${txid}${traces ? "?tab=traces" : ""}`,
75
+ ["Proton (Testnet)"]: (txid, traces) => `https://testnet.explorer.xprnetwork.org/transaction/${txid}${traces ? "?tab=traces" : ""}`,
76
+ ["Polkadot"]: (txid) => `https://polkadot.subscan.io/extrinsic/${txid}`,
77
+ ["Binance (BEP2)"]: (txid) => `https://binance.mintscan.io/txs/${txid}`,
78
+ ["Binance (BEP20)"]: (txid) => `https://bscscan.com/tx/${txid}`,
79
+ ["EOS"]: (txid) => `https://bloks.io/transaction/${txid}`,
80
+ ["EOS (Jungle Testnet)"]: (txid) => `https://jungle.bloks.io/transaction/${txid}`,
81
+ ["Hedera (Mainnet)"]: (txid) => `https://app.dragonglass.me/transactions/${txid}`,
82
+ ["Hedera (Testnet)"]: (txid) => `https://testnet.dragonglass.me/transactions/${txid}`,
83
+ ["Dogecoin"]: (txid) => `https://blockchair.com/dogecoin/transaction/${txid}`,
84
+ ["Cardano"]: (txid) => `https://explorer.cardano.org/en/transaction?id=${txid}`,
85
+ ["Avalanche X-Chain"]: (txid) => `https://avascan.info/blockchain/x/tx/${txid}`,
86
+ ["Avalanche C-Chain"]: (txid) => `https://snowtrace.io/tx/${txid}`,
87
+ ["Polygon"]: (txid) => `https://polygonscan.com/tx/${txid}`,
88
+ ["Terra"]: (txid) => `https://terra.stake.id/?#/tx/${txid}`,
89
+ ["Ripple"]: (txid) => `https://xrpscan.com/tx/${txid}`,
90
+ ["Solana"]: (txid) => `https://explorer.solana.com/tx/${txid}`,
91
+ ["Metal X-Chain (Testnet)"]: (txid) => `https://metalscan.io/tx/${txid}`,
92
+ ["Metal C-Chain (Testnet)"]: (txid) => `https://tahoe.metaltrace.io/tx/${txid}`,
93
+ ["Metal C-Chain"]: (txid) => `https://metalscan.io/tx/${txid}`,
94
+ ["XDC Network"]: (txid) => `https://xdc.blocksscan.io/txs/${txid}`,
95
+ ["Metal L2 (Testnet)"]: (txid) => `https://testnet.explorer.metall2.com/tx/${txid}`,
96
+ ["Metal L2"]: (txid) => `https://explorer.metall2.com/tx/${txid}`
94
97
  };
95
- var protonExplorerTxUrl = (chain, txId, traces) => chain === "proton" ? explorerLinkByChain["Proton" /* ProtonMainnet */](txId, traces) : explorerLinkByChain["Proton (Testnet)" /* ProtonTestnet */](txId, traces);
96
- var initializeCoins = (protonChain) => {
97
- const IS_MAINNET = protonChain === "proton";
98
- const IS_TESTNET = protonChain === "proton-test";
99
- const coins = [
100
- {
101
- allowSwap: true,
102
- allowBridge: IS_MAINNET,
103
- allowLend: true,
104
- allowBorrow: true,
105
- name: "XPR Network",
106
- coin: "XPR",
107
- xtokenSymbol: "XPR",
108
- xtokenPrecision: 4,
109
- xtokenContract: "eosio.token",
110
- wallets: [
111
- ...IS_MAINNET ? [
112
- {
113
- wallet: "XPR-ERC20",
114
- symbol: "XPR",
115
- chain: "Ethereum" /* EthereumMainnet */,
116
- network: "erc20" /* ERC20 */,
117
- precision: 4,
118
- contract: "0xD7EFB00D12C2C13131FD319336FDF952525DA2AF",
119
- provider: "fireblocks" /* FIREBLOCKS */,
120
- hasWithdrawMemo: false
121
- },
122
- {
123
- wallet: "XPR-BEP20",
124
- symbol: "XPR",
125
- chain: "Binance (BEP20)" /* BinanceBEP20 */,
126
- network: "bep20" /* BEP20 */,
127
- precision: 4,
128
- contract: "0x5DE3939B2F811A61D830E6F52D13B066881412AB",
129
- provider: "fireblocks" /* FIREBLOCKS */,
130
- hasWithdrawMemo: false
131
- }
132
- ] : []
133
- ],
134
- image: "https://app.metalx.com/img/tokens/XPR.png",
135
- coingeckoId: "proton",
136
- unifiedCryptoassetId: "5350"
137
- },
138
- {
139
- allowSwap: true,
140
- allowBridge: true,
141
- allowLend: true,
142
- allowBorrow: true,
143
- name: "USD Coin",
144
- coin: "USDC",
145
- xtokenSymbol: "XUSDC",
146
- xtokenPrecision: 6,
147
- xtokenContract: "xtokens",
148
- wallets: [
149
- ...IS_MAINNET ? [
150
- {
151
- wallet: "USDC",
152
- symbol: "USDC",
153
- chain: "Ethereum" /* EthereumMainnet */,
154
- network: "erc20" /* ERC20 */,
155
- precision: 6,
156
- contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
157
- provider: "fireblocks" /* FIREBLOCKS */,
158
- hasWithdrawMemo: false
159
- },
160
- // {
161
- // wallet: 'USDC-BEP20',
162
- // symbol: 'USDC',
163
- // chain: Chains.BinanceBEP20,
164
- // network: Networks.BEP20,
165
- // precision: 18,
166
- // contract: '0x8AC76A51CC950D9822D68B83FE1AD97B32CD580D',
167
- // provider: Providers.FIREBLOCKS,
168
- // hasWithdrawMemo: false
169
- // },
170
- {
171
- wallet: "USDC-XLM",
172
- symbol: "USDC",
173
- chain: "Stellar" /* StellarMainnet */,
174
- network: "xlm" /* XLM */,
175
- precision: 7,
176
- contract: void 0,
177
- provider: "fireblocks" /* FIREBLOCKS */,
178
- hasWithdrawMemo: true
179
- }
180
- ] : [],
181
- ...IS_TESTNET ? [
182
- {
183
- wallet: "USDC",
184
- symbol: "USDC",
185
- chain: "Ethereum (Sepolia)" /* EthereumSepolia */,
186
- network: "sepolia" /* Sepolia */,
187
- precision: 6,
188
- contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
189
- provider: "fireblocks" /* FIREBLOCKS */,
190
- hasWithdrawMemo: false
191
- },
192
- {
193
- wallet: "USDC-XLM",
194
- symbol: "USDC",
195
- chain: "Stellar (Testnet)" /* StellarTestnet */,
196
- network: "xlm" /* XLM */,
197
- precision: 7,
198
- contract: void 0,
199
- provider: "fireblocks" /* FIREBLOCKS */,
200
- hasWithdrawMemo: true
201
- }
202
- ] : []
203
- ],
204
- image: "https://app.metalx.com/img/tokens/usdc.png",
205
- coingeckoId: "usd-coin",
206
- unifiedCryptoassetId: "3408"
207
- },
208
- {
209
- allowSwap: true,
210
- allowBridge: true,
211
- allowLend: true,
212
- allowBorrow: true,
213
- name: "Metal DAO",
214
- coin: "MTL",
215
- xtokenSymbol: "XMT",
216
- xtokenPrecision: 8,
217
- xtokenContract: "xtokens",
218
- wallets: [
219
- ...IS_MAINNET ? [
220
- {
221
- wallet: "MTL-METALL2",
222
- symbol: "MTL",
223
- chain: "Metal L2" /* MetalL2Mainnet */,
224
- network: "metall2" /* METALL2 */,
225
- precision: 8,
226
- contract: "0xBCFc435d8F276585f6431Fc1b9EE9A850B5C00A9",
227
- provider: "metall2" /* METALL2 */,
228
- hasWithdrawMemo: false
229
- }
230
- // {
231
- // wallet: "MTL",
232
- // symbol: "MTL",
233
- // chain: Chains.EthereumMainnet,
234
- // network: Networks.ERC20,
235
- // precision: 8,
236
- // contract: "0xF433089366899D83A9F26A773D59EC7ECF30355E",
237
- // provider: Providers.FIREBLOCKS,
238
- // hasWithdrawMemo: false,
239
- // },
240
- ] : [
241
- // {
242
- // wallet: "MTL-METALL2",
243
- // symbol: "MTL",
244
- // chain: Chains.MetalL2Testnet,
245
- // network: Networks.METALL2,
246
- // precision: 8,
247
- // contract: "0xBCFc435d8F276585f6431Fc1b9EE9A850B5C00A9",
248
- // provider: Providers.METALL2,
249
- // hasWithdrawMemo: false,
250
- // }
251
- ]
252
- ],
253
- image: "https://app.metalx.com/img/tokens/mtl.png",
254
- coingeckoId: "metal",
255
- unifiedCryptoassetId: "1788"
256
- },
257
- {
258
- allowSwap: true,
259
- allowBridge: true,
260
- allowLend: false,
261
- allowBorrow: false,
262
- name: "Metal Blockchain",
263
- coin: "METAL",
264
- xtokenSymbol: "METAL",
265
- xtokenPrecision: 8,
266
- xtokenContract: "xtokens",
267
- wallets: [
268
- ...IS_TESTNET ? [
269
- {
270
- wallet: "METAL",
271
- symbol: "METAL",
272
- chain: "Metal C-Chain (Testnet)" /* MetalCTestnet */,
273
- network: "evm" /* EVM */,
274
- precision: 18,
275
- contract: "",
276
- provider: "metal" /* METAL */,
277
- hasWithdrawMemo: false
278
- }
279
- ] : [],
280
- ...IS_MAINNET ? [
281
- {
282
- wallet: "METAL",
283
- symbol: "METAL",
284
- chain: "Metal C-Chain" /* MetalCMainnet */,
285
- network: "evm" /* EVM */,
286
- precision: 18,
287
- contract: "",
288
- provider: "metal" /* METAL */,
289
- hasWithdrawMemo: false
290
- },
291
- {
292
- wallet: "METAL-ERC20",
293
- symbol: "METAL",
294
- chain: "Ethereum" /* EthereumMainnet */,
295
- network: "erc20" /* ERC20 */,
296
- precision: 18,
297
- contract: "",
298
- provider: "fireblocks" /* FIREBLOCKS */,
299
- hasWithdrawMemo: false
300
- }
301
- ] : []
302
- ],
303
- image: "https://app.metalx.com/img/tokens/metal.png",
304
- coingeckoId: "metal-blockchain",
305
- unifiedCryptoassetId: "21769"
306
- },
307
- {
308
- allowSwap: true,
309
- allowBridge: true,
310
- allowLend: true,
311
- allowBorrow: true,
312
- name: "Bitcoin",
313
- coin: "BTC",
314
- xtokenSymbol: "XBTC",
315
- xtokenPrecision: 8,
316
- xtokenContract: "xtokens",
317
- wallets: [
318
- ...IS_MAINNET ? [
319
- {
320
- wallet: "BTC",
321
- symbol: "BTC",
322
- chain: "Bitcoin" /* BitcoinMainnet */,
323
- network: "mainnet" /* Mainnet */,
324
- precision: 8,
325
- contract: void 0,
326
- provider: "fireblocks" /* FIREBLOCKS */,
327
- hasWithdrawMemo: false
328
- }
329
- ] : [],
330
- ...IS_TESTNET ? [
331
- {
332
- wallet: "BTC",
333
- symbol: "BTC",
334
- chain: "Bitcoin (Testnet)" /* BitcoinTestnet */,
335
- network: "testnet" /* Testnet */,
336
- precision: 8,
337
- contract: void 0,
338
- provider: "fireblocks" /* FIREBLOCKS */,
339
- hasWithdrawMemo: false
340
- }
341
- ] : []
342
- ],
343
- image: "https://app.metalx.com/img/tokens/btc.png",
344
- coingeckoId: "bitcoin",
345
- unifiedCryptoassetId: "1"
346
- },
347
- {
348
- allowSwap: true,
349
- allowBridge: true,
350
- allowLend: true,
351
- allowBorrow: true,
352
- name: "Ethereum",
353
- coin: "ETH",
354
- xtokenSymbol: "XETH",
355
- xtokenPrecision: 8,
356
- xtokenContract: "xtokens",
357
- wallets: [
358
- ...IS_MAINNET ? [
359
- {
360
- wallet: "ETH",
361
- symbol: "ETH",
362
- chain: "Ethereum" /* EthereumMainnet */,
363
- network: "mainnet" /* Mainnet */,
364
- precision: 18,
365
- contract: "0x0000000000000000000000000000000000000000",
366
- provider: "fireblocks" /* FIREBLOCKS */,
367
- hasWithdrawMemo: false
368
- }
369
- ] : [],
370
- ...IS_TESTNET ? [
371
- {
372
- wallet: "ETH",
373
- symbol: "ETH",
374
- chain: "Ethereum (Sepolia)" /* EthereumSepolia */,
375
- network: "sepolia" /* Sepolia */,
376
- precision: 18,
377
- contract: "0x0000000000000000000000000000000000000000",
378
- provider: "fireblocks" /* FIREBLOCKS */,
379
- hasWithdrawMemo: false
380
- }
381
- ] : []
382
- ],
383
- image: "https://app.metalx.com/img/tokens/eth.png",
384
- coingeckoId: "ethereum",
385
- unifiedCryptoassetId: "1027"
386
- },
387
- {
388
- allowSwap: true,
389
- allowBridge: false,
390
- allowLend: false,
391
- allowBorrow: false,
392
- name: "LOAN Protocol",
393
- coin: "LOAN",
394
- xtokenSymbol: "LOAN",
395
- xtokenPrecision: 4,
396
- xtokenContract: "loan.token",
397
- wallets: [],
398
- image: "https://app.metalx.com/img/tokens/loan.png",
399
- coingeckoId: "proton-loan",
400
- unifiedCryptoassetId: "22071"
401
- },
402
- {
403
- allowSwap: true,
404
- allowBridge: true,
405
- allowLend: false,
406
- allowBorrow: false,
407
- name: "Tether",
408
- coin: "USDT",
409
- xtokenSymbol: "XUSDT",
410
- xtokenPrecision: 6,
411
- xtokenContract: "xtokens",
412
- wallets: [
413
- ...IS_MAINNET ? [
414
- {
415
- wallet: "USDT",
416
- symbol: "USDT",
417
- chain: "Ethereum" /* EthereumMainnet */,
418
- network: "erc20" /* ERC20 */,
419
- precision: 6,
420
- contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
421
- provider: "fireblocks" /* FIREBLOCKS */,
422
- hasWithdrawMemo: false
423
- }
424
- // {
425
- // wallet: "USDT-BEP20",
426
- // symbol: "USDT",
427
- // chain: Chains.BinanceBEP20,
428
- // network: Networks.BEP20,
429
- // precision: 18,
430
- // contract: "0x55d398326f99059fF775485246999027B3197955",
431
- // provider: Providers.FIREBLOCKS,
432
- // hasWithdrawMemo: false,
433
- // },
434
- ] : [
435
- {
436
- wallet: "USDT",
437
- symbol: "USDT",
438
- chain: "Ethereum (Sepolia)" /* EthereumSepolia */,
439
- network: "sepolia" /* Sepolia */,
440
- precision: 6,
441
- contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
442
- provider: "fireblocks" /* FIREBLOCKS */,
443
- hasWithdrawMemo: false
444
- }
445
- ]
446
- ],
447
- image: "https://app.metalx.com/img/tokens/usdt.png",
448
- coingeckoId: "tether",
449
- unifiedCryptoassetId: "825"
450
- },
451
- {
452
- allowSwap: false,
453
- allowBridge: false,
454
- allowLend: false,
455
- allowBorrow: false,
456
- name: "TrueUSD",
457
- coin: "TUSD",
458
- xtokenSymbol: "XTUSD",
459
- xtokenPrecision: 6,
460
- xtokenContract: "xtokens",
461
- wallets: [
462
- ...IS_MAINNET ? [
463
- // {
464
- // wallet: "TUSD",
465
- // symbol: "TUSD",
466
- // chain: Chains.EthereumMainnet,
467
- // network: Networks.ERC20,
468
- // precision: 18,
469
- // contract: "0x0000000000085D4780B73119B644AE5ECD22B376",
470
- // provider: Providers.FIREBLOCKS,
471
- // hasWithdrawMemo: false,
472
- // },
473
- ] : []
474
- ],
475
- image: "https://app.metalx.com/img/tokens/tusd.png",
476
- coingeckoId: "true-usd",
477
- unifiedCryptoassetId: "2563"
478
- },
479
- {
480
- allowSwap: false,
481
- allowBridge: IS_MAINNET,
482
- allowLend: false,
483
- allowBorrow: false,
484
- name: "Euro Coin",
485
- coin: "EUROC",
486
- xtokenSymbol: "XEUROC",
487
- xtokenPrecision: 6,
488
- xtokenContract: "xtokens",
489
- wallets: [
490
- ...IS_MAINNET ? [
491
- {
492
- wallet: "EUROC",
493
- symbol: "EUROC-ERC20",
494
- chain: "Ethereum" /* EthereumMainnet */,
495
- network: "erc20" /* ERC20 */,
496
- precision: 6,
497
- contract: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
498
- provider: "fireblocks" /* FIREBLOCKS */,
499
- hasWithdrawMemo: false
500
- }
501
- ] : []
502
- ],
503
- image: "https://assets.coingecko.com/coins/images/26045/small/euro-coin.png?1655394420",
504
- coingeckoId: "euro-coin",
505
- unifiedCryptoassetId: "20641"
506
- },
507
- {
508
- allowSwap: false,
509
- allowBridge: IS_MAINNET,
510
- allowLend: false,
511
- allowBorrow: false,
512
- name: "XDC Network",
513
- coin: "XDC",
514
- xtokenSymbol: "XDC",
515
- xtokenPrecision: 4,
516
- xtokenContract: "xtokens",
517
- wallets: [
518
- ...IS_MAINNET ? [
519
- {
520
- wallet: "XDC",
521
- symbol: "XDC",
522
- chain: "XDC Network" /* XDCMainnet */,
523
- network: "mainnet" /* Mainnet */,
524
- precision: 18,
525
- contract: "",
526
- provider: "fireblocks" /* FIREBLOCKS */,
527
- hasWithdrawMemo: false
528
- }
529
- ] : []
530
- ],
531
- image: "https://app.metalx.com/img/tokens/xdc.png",
532
- coingeckoId: "xdce-crowd-sale",
533
- unifiedCryptoassetId: "2634"
534
- },
535
- {
536
- allowSwap: false,
537
- allowBridge: IS_MAINNET,
538
- allowLend: false,
539
- allowBorrow: false,
540
- name: "Paxos Dollar",
541
- coin: "PAX",
542
- xtokenSymbol: "XPAX",
543
- xtokenPrecision: 6,
544
- xtokenContract: "xtokens",
545
- wallets: [
546
- ...IS_MAINNET ? [
547
- {
548
- wallet: "PAX",
549
- symbol: "PAX",
550
- chain: "Ethereum" /* EthereumMainnet */,
551
- network: "erc20" /* ERC20 */,
552
- precision: 18,
553
- contract: "0x8E870D67F660D95D5BE530380D0EC0BD388289E1",
554
- provider: "fireblocks" /* FIREBLOCKS */,
555
- hasWithdrawMemo: false
556
- }
557
- ] : []
558
- ],
559
- image: "https://app.metalx.com/img/tokens/pax.png",
560
- coingeckoId: "paxos-standard",
561
- unifiedCryptoassetId: "3330"
562
- },
563
- {
564
- allowSwap: false,
565
- allowBridge: true,
566
- allowLend: false,
567
- allowBorrow: false,
568
- name: "Paxos Gold",
569
- coin: "PAXG",
570
- xtokenSymbol: "XPAXG",
571
- xtokenPrecision: 8,
572
- xtokenContract: "xtokens",
573
- wallets: [
574
- ...IS_MAINNET ? [
575
- {
576
- wallet: "PAXG",
577
- symbol: "PAXG",
578
- chain: "Ethereum" /* EthereumMainnet */,
579
- network: "erc20" /* ERC20 */,
580
- precision: 18,
581
- contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
582
- provider: "fireblocks" /* FIREBLOCKS */,
583
- hasWithdrawMemo: false
584
- }
585
- ] : [],
586
- ...IS_TESTNET ? [
587
- {
588
- wallet: "PAXG",
589
- symbol: "PAXG",
590
- chain: "Ethereum (Sepolia)" /* EthereumSepolia */,
591
- network: "sepolia" /* Sepolia */,
592
- precision: 18,
593
- contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
594
- provider: "fireblocks" /* FIREBLOCKS */,
595
- hasWithdrawMemo: false
596
- }
597
- ] : []
598
- ],
599
- image: "https://app.metalx.com/img/tokens/paxg.png",
600
- coingeckoId: "pax-gold",
601
- unifiedCryptoassetId: "4705"
602
- },
603
- {
604
- allowSwap: false,
605
- allowBridge: false,
606
- allowLend: false,
607
- allowBorrow: false,
608
- name: "Storex",
609
- coin: "STRX",
610
- xtokenSymbol: "STRX",
611
- xtokenPrecision: 4,
612
- xtokenContract: "storex",
613
- wallets: [],
614
- image: "https://app.metalx.com/img/tokens/strx.png",
615
- coingeckoId: "storex",
616
- unifiedCryptoassetId: ""
617
- },
618
- {
619
- allowSwap: false,
620
- allowBridge: false,
621
- allowLend: false,
622
- allowBorrow: false,
623
- name: "Mint",
624
- coin: "MINT",
625
- xtokenSymbol: "MINT",
626
- xtokenPrecision: 4,
627
- xtokenContract: "protonmint",
628
- wallets: [],
629
- image: "https://app.metalx.com/img/tokens/mint.png",
630
- coingeckoId: "",
631
- unifiedCryptoassetId: ""
632
- },
633
- {
634
- allowSwap: IS_MAINNET,
635
- allowBridge: false,
636
- allowLend: false,
637
- allowBorrow: false,
638
- name: "Snipcoins",
639
- coin: "SNIPS",
640
- xtokenSymbol: "SNIPS",
641
- xtokenPrecision: 4,
642
- xtokenContract: "snipcoins",
643
- wallets: [],
644
- image: "https://app.metalx.com/img/tokens/snips.png",
645
- coingeckoId: "",
646
- unifiedCryptoassetId: ""
647
- },
648
- {
649
- allowSwap: false,
650
- allowBridge: false,
651
- allowLend: false,
652
- allowBorrow: false,
653
- name: "Uniswap",
654
- coin: "UNI",
655
- xtokenSymbol: "XUNI",
656
- xtokenPrecision: 6,
657
- xtokenContract: "xtokens",
658
- wallets: [
659
- ...IS_MAINNET ? [
660
- // {
661
- // wallet: "UNI",
662
- // symbol: "UNI",
663
- // chain: Chains.EthereumMainnet,
664
- // network: Networks.ERC20,
665
- // precision: 18,
666
- // contract: "0x1F9840A85D5AF5BF1D1762F925BDADDC4201F984",
667
- // provider: Providers.FIREBLOCKS,
668
- // hasWithdrawMemo: false,
669
- // },
670
- ] : [],
671
- ...IS_TESTNET ? [
672
- // {
673
- // wallet: "UNI",
674
- // symbol: "UNI",
675
- // chain: Chains.EthereumSepolia,
676
- // network: Networks.Sepolia,
677
- // precision: 18,
678
- // contract: "0x1F9840A85D5AF5BF1D1762F925BDADDC4201F984",
679
- // provider: Providers.FIREBLOCKS,
680
- // hasWithdrawMemo: false,
681
- // },
682
- ] : []
683
- ],
684
- image: "https://app.metalx.com/img/tokens/uni.png",
685
- coingeckoId: "uniswap",
686
- unifiedCryptoassetId: "7083"
687
- },
688
- {
689
- allowSwap: false,
690
- allowBridge: false,
691
- allowLend: false,
692
- allowBorrow: false,
693
- name: "1INCH",
694
- coin: "1INCH",
695
- xtokenSymbol: "XINCH",
696
- xtokenPrecision: 6,
697
- xtokenContract: "xtokens",
698
- wallets: [
699
- ...IS_MAINNET ? [
700
- {
701
- wallet: "1INCH",
702
- symbol: "1INCH",
703
- chain: "Ethereum" /* EthereumMainnet */,
704
- network: "erc20" /* ERC20 */,
705
- precision: 18,
706
- contract: "0x111111111117DC0AA78B770FA6A738034120C302",
707
- provider: "fireblocks" /* FIREBLOCKS */,
708
- hasWithdrawMemo: false
709
- }
710
- ] : []
711
- ],
712
- image: "https://www.proton.org/images/tokens/xtokensXINCH.png",
713
- coingeckoId: "1inch",
714
- unifiedCryptoassetId: "8104"
715
- },
716
- {
717
- allowSwap: false,
718
- allowBridge: false,
719
- allowLend: false,
720
- allowBorrow: false,
721
- name: "Chainlink",
722
- coin: "LINK",
723
- xtokenSymbol: "XLINK",
724
- xtokenPrecision: 6,
725
- xtokenContract: "xtokens",
726
- wallets: [
727
- ...IS_MAINNET ? [
728
- {
729
- wallet: "LINK",
730
- symbol: "LINK",
731
- chain: "Ethereum" /* EthereumMainnet */,
732
- network: "erc20" /* ERC20 */,
733
- precision: 18,
734
- contract: "0x514910771AF9CA656AF840DFF83E8264ECF986CA",
735
- provider: "fireblocks" /* FIREBLOCKS */,
736
- hasWithdrawMemo: false
737
- }
738
- ] : []
739
- ],
740
- image: "https://app.metalx.com/img/tokens/link.png",
741
- coingeckoId: "chainlink",
742
- unifiedCryptoassetId: "1975"
743
- },
744
- {
745
- allowSwap: IS_MAINNET,
746
- allowBridge: true,
747
- allowLend: false,
748
- allowBorrow: false,
749
- name: "Litecoin",
750
- coin: "LTC",
751
- xtokenSymbol: "XLTC",
752
- xtokenPrecision: 8,
753
- xtokenContract: "xtokens",
754
- wallets: [
755
- ...IS_MAINNET ? [
756
- {
757
- wallet: "LTC",
758
- symbol: "LTC",
759
- chain: "Litecoin" /* LitecoinMainnet */,
760
- network: "mainnet" /* Mainnet */,
761
- precision: 8,
762
- contract: void 0,
763
- provider: "fireblocks" /* FIREBLOCKS */,
764
- hasWithdrawMemo: false
765
- }
766
- ] : [],
767
- ...IS_TESTNET ? [
768
- {
769
- wallet: "LTC",
770
- symbol: "LTC",
771
- chain: "Litecoin (Testnet)" /* LitecoinTestnet */,
772
- network: "testnet" /* Testnet */,
773
- precision: 8,
774
- contract: void 0,
775
- provider: "fireblocks" /* FIREBLOCKS */,
776
- hasWithdrawMemo: false
777
- }
778
- ] : []
779
- ],
780
- image: "https://app.metalx.com/img/tokens/ltc.png",
781
- coingeckoId: "litecoin",
782
- unifiedCryptoassetId: "2"
783
- },
784
- {
785
- allowSwap: false,
786
- allowBridge: IS_MAINNET,
787
- allowLend: false,
788
- allowBorrow: false,
789
- name: "PayPal USD",
790
- coin: "PYUSD",
791
- xtokenSymbol: "XPYUSD",
792
- xtokenPrecision: 6,
793
- xtokenContract: "xtokens",
794
- wallets: [
795
- ...IS_MAINNET ? [
796
- {
797
- wallet: "PYUSD",
798
- symbol: "PYUSD",
799
- chain: "Ethereum" /* EthereumMainnet */,
800
- network: "erc20" /* ERC20 */,
801
- precision: 6,
802
- contract: void 0,
803
- provider: "fireblocks" /* FIREBLOCKS */,
804
- hasWithdrawMemo: false
805
- }
806
- ] : []
807
- ],
808
- image: "https://app.metalx.com/img/tokens/pyusd.png",
809
- coingeckoId: "paypal-usd",
810
- unifiedCryptoassetId: "27772"
811
- },
812
- {
813
- allowSwap: false,
814
- allowBridge: false,
815
- allowLend: false,
816
- allowBorrow: false,
817
- name: "Bitcoin Cash",
818
- coin: "BCH",
819
- xtokenSymbol: "XBCH",
820
- xtokenPrecision: 8,
821
- xtokenContract: "xtokens",
822
- wallets: [
823
- ...IS_MAINNET ? [
824
- // {
825
- // wallet: "BCH",
826
- // symbol: "BCH",
827
- // chain: Chains.BitcoinCashMainnet,
828
- // network: Networks.Mainnet,
829
- // precision: 8,
830
- // contract: undefined,
831
- // provider: Providers.FIREBLOCKS,
832
- // hasWithdrawMemo: false,
833
- // },
834
- ] : [],
835
- ...IS_TESTNET ? [
836
- // {
837
- // wallet: "BCH",
838
- // symbol: "BCH",
839
- // chain: Chains.BitcoinCashTestnet,
840
- // network: Networks.Testnet,
841
- // precision: 8,
842
- // contract: undefined,
843
- // provider: Providers.FIREBLOCKS,
844
- // hasWithdrawMemo: false,
845
- // },
846
- ] : []
847
- ],
848
- image: "https://app.metalx.com/img/tokens/bch.png",
849
- coingeckoId: "bitcoin-cash",
850
- unifiedCryptoassetId: "1831"
851
- },
852
- {
853
- allowSwap: true,
854
- allowBridge: true,
855
- allowLend: false,
856
- allowBorrow: false,
857
- name: "LunarCrush",
858
- coin: "LUNR",
859
- xtokenSymbol: "XLUNR",
860
- xtokenPrecision: 4,
861
- xtokenContract: "xtokens",
862
- wallets: [
863
- ...IS_MAINNET ? [
864
- {
865
- wallet: "LUNR",
866
- symbol: "LUNR",
867
- chain: "Ethereum" /* EthereumMainnet */,
868
- network: "erc20" /* ERC20 */,
869
- precision: 4,
870
- contract: void 0,
871
- provider: "fireblocks" /* FIREBLOCKS */,
872
- hasWithdrawMemo: false
873
- }
874
- ] : []
875
- ],
876
- image: "https://app.metalx.com/img/tokens/lunr.png",
877
- coingeckoId: "lunr-token",
878
- unifiedCryptoassetId: "12971"
879
- },
880
- {
881
- allowSwap: false,
882
- allowBridge: true,
883
- allowLend: false,
884
- allowBorrow: false,
885
- name: "Stellar",
886
- coin: "XLM",
887
- xtokenSymbol: "XXLM",
888
- xtokenPrecision: 6,
889
- xtokenContract: "xtokens",
890
- wallets: [
891
- ...IS_MAINNET ? [
892
- {
893
- wallet: "XLM",
894
- symbol: "XLM",
895
- chain: "Stellar" /* StellarMainnet */,
896
- network: "mainnet" /* Mainnet */,
897
- precision: 7,
898
- contract: void 0,
899
- provider: "fireblocks" /* FIREBLOCKS */,
900
- hasWithdrawMemo: true
901
- }
902
- ] : [],
903
- ...IS_TESTNET ? [
904
- {
905
- wallet: "XLM",
906
- symbol: "XLM",
907
- chain: "Stellar (Testnet)" /* StellarTestnet */,
908
- network: "testnet" /* Testnet */,
909
- precision: 7,
910
- contract: void 0,
911
- provider: "fireblocks" /* FIREBLOCKS */,
912
- hasWithdrawMemo: true
913
- }
914
- ] : []
915
- ],
916
- image: "https://app.metalx.com/img/tokens/xlm.png",
917
- coingeckoId: "stellar",
918
- unifiedCryptoassetId: "512"
919
- },
920
- {
921
- allowSwap: false,
922
- allowBridge: false,
923
- allowLend: false,
924
- allowBorrow: false,
925
- name: "Sense",
926
- coin: "SENSE",
927
- xtokenSymbol: "XSENSE",
928
- xtokenPrecision: 4,
929
- xtokenContract: "sense",
930
- wallets: [],
931
- image: "https://app.metalx.com/img/tokens/sense.png",
932
- coingeckoId: "sense",
933
- unifiedCryptoassetId: ""
934
- },
935
- {
936
- allowSwap: false,
937
- allowBridge: false,
938
- allowLend: false,
939
- allowBorrow: false,
940
- name: "Polkadot",
941
- coin: "DOT",
942
- xtokenSymbol: "XDOT",
943
- xtokenPrecision: 8,
944
- xtokenContract: "xtokens",
945
- wallets: [
946
- ...IS_MAINNET ? [
947
- {
948
- wallet: "DOT",
949
- symbol: "DOT",
950
- chain: "Polkadot" /* PolkadotMainnet */,
951
- network: "mainnet" /* Mainnet */,
952
- precision: 10,
953
- contract: void 0,
954
- provider: "fireblocks" /* FIREBLOCKS */,
955
- hasWithdrawMemo: false
956
- }
957
- ] : []
958
- ],
959
- image: "https://app.metalx.com/img/tokens/dot.png",
960
- coingeckoId: "polkadot",
961
- unifiedCryptoassetId: "6636"
962
- },
963
- {
964
- allowSwap: true,
965
- allowBridge: false,
966
- allowLend: false,
967
- allowBorrow: false,
968
- name: "Binance Coin",
969
- coin: "BNB",
970
- xtokenSymbol: "XBNB",
971
- xtokenPrecision: 8,
972
- xtokenContract: "xtokens",
973
- wallets: [
974
- ...IS_MAINNET ? [
975
- // {
976
- // wallet: "BNB",
977
- // symbol: "BNB",
978
- // chain: Chains.BinanceBEP20,
979
- // network: Networks.BEP20,
980
- // precision: 18,
981
- // contract: undefined,
982
- // provider: Providers.FIREBLOCKS,
983
- // hasWithdrawMemo: false,
984
- // },
985
- ] : []
986
- ],
987
- image: "https://app.metalx.com/img/tokens/bnb.png",
988
- coingeckoId: "binancecoin",
989
- unifiedCryptoassetId: "1839"
990
- },
991
- {
992
- allowSwap: false,
993
- allowBridge: false,
994
- allowLend: false,
995
- allowBorrow: false,
996
- name: "Binance USD",
997
- coin: "BUSD",
998
- xtokenSymbol: "XBUSD",
999
- xtokenPrecision: 6,
1000
- xtokenContract: "xtokens",
1001
- wallets: [
1002
- // ...(IS_MAINNET ? [{
1003
- // wallet: 'BUSD-BEP20',
1004
- // symbol: 'BUSD',
1005
- // chain: Chains.BinanceBEP20,
1006
- // network: Networks.BEP20,
1007
- // precision: 18,
1008
- // contract: '0xe9e7cea3dedca5984780bafc599bd69add087d56',
1009
- // provider: Providers.FIREBLOCKS,
1010
- // hasWithdrawMemo: false
1011
- // }]: [])
1012
- ],
1013
- image: "https://app.metalx.com/img/tokens/busd.png",
1014
- coingeckoId: "binance-usd",
1015
- unifiedCryptoassetId: "4687"
1016
- },
1017
- {
1018
- allowSwap: true,
1019
- allowBridge: true,
1020
- allowLend: false,
1021
- allowBorrow: false,
1022
- name: "EOS",
1023
- coin: "EOS",
1024
- xtokenSymbol: "XEOS",
1025
- xtokenPrecision: 4,
1026
- xtokenContract: "xtokens",
1027
- wallets: [
1028
- ...IS_MAINNET ? [
1029
- {
1030
- wallet: "EOS",
1031
- symbol: "EOS",
1032
- chain: "EOS" /* EosMainnet */,
1033
- network: "mainnet" /* Mainnet */,
1034
- precision: 4,
1035
- contract: void 0,
1036
- provider: "fireblocks" /* FIREBLOCKS */,
1037
- hasWithdrawMemo: true
1038
- }
1039
- ] : [],
1040
- ...IS_TESTNET ? [
1041
- {
1042
- wallet: "EOS",
1043
- symbol: "EOS",
1044
- chain: "EOS (Jungle Testnet)" /* EosTestnet */,
1045
- network: "testnet" /* Testnet */,
1046
- precision: 4,
1047
- contract: void 0,
1048
- provider: "fireblocks" /* FIREBLOCKS */,
1049
- hasWithdrawMemo: true
1050
- }
1051
- ] : []
1052
- ],
1053
- image: "https://app.metalx.com/img/tokens/eos.png",
1054
- coingeckoId: "eos",
1055
- unifiedCryptoassetId: "1765"
1056
- },
1057
- {
1058
- allowSwap: IS_MAINNET,
1059
- allowBridge: IS_MAINNET,
1060
- allowLend: true,
1061
- allowBorrow: true,
1062
- name: "Dogecoin",
1063
- coin: "DOGE",
1064
- xtokenSymbol: "XDOGE",
1065
- xtokenPrecision: 6,
1066
- xtokenContract: "xtokens",
1067
- wallets: [
1068
- ...IS_MAINNET ? [
1069
- {
1070
- wallet: "DOGE",
1071
- symbol: "DOGE",
1072
- chain: "Dogecoin" /* DogeMainnet */,
1073
- network: "mainnet" /* Mainnet */,
1074
- precision: 8,
1075
- contract: void 0,
1076
- provider: "fireblocks" /* FIREBLOCKS */,
1077
- hasWithdrawMemo: false
1078
- }
1079
- ] : []
1080
- ],
1081
- image: "https://app.metalx.com/img/tokens/doge.png",
1082
- coingeckoId: "dogecoin",
1083
- unifiedCryptoassetId: "74"
1084
- },
1085
- {
1086
- allowSwap: IS_MAINNET,
1087
- allowBridge: IS_MAINNET,
1088
- allowLend: false,
1089
- allowBorrow: false,
1090
- name: "Cardano",
1091
- coin: "ADA",
1092
- xtokenSymbol: "XADA",
1093
- xtokenPrecision: 6,
1094
- xtokenContract: "xtokens",
1095
- wallets: [
1096
- ...IS_MAINNET ? [
1097
- {
1098
- wallet: "ADA",
1099
- symbol: "ADA",
1100
- chain: "Cardano" /* CardanoMainnet */,
1101
- network: "mainnet" /* Mainnet */,
1102
- precision: 6,
1103
- contract: void 0,
1104
- provider: "fireblocks" /* FIREBLOCKS */,
1105
- hasWithdrawMemo: false
1106
- }
1107
- ] : []
1108
- ],
1109
- image: "https://app.metalx.com/img/tokens/ada.png",
1110
- coingeckoId: "cardano",
1111
- unifiedCryptoassetId: "2010"
1112
- },
1113
- // Adding
1114
- {
1115
- allowSwap: false,
1116
- allowBridge: false,
1117
- allowLend: false,
1118
- allowBorrow: false,
1119
- name: "Terra",
1120
- coin: "LUNA",
1121
- xtokenSymbol: "XLUNA",
1122
- xtokenPrecision: 6,
1123
- xtokenContract: "xtokens",
1124
- wallets: [
1125
- // ...(IS_MAINNET ? [{
1126
- // wallet: 'LUNA',
1127
- // symbol: 'LUNA',
1128
- // chain: Chains.TerraMainnet,
1129
- // network: Networks.Mainnet,
1130
- // precision: 6,
1131
- // contract: undefined,
1132
- // provider: Providers.FIREBLOCKS,
1133
- // hasWithdrawMemo: true
1134
- // }]: [])
1135
- ],
1136
- image: "https://app.metalx.com/img/tokens/luna.png",
1137
- coingeckoId: "terra-luna",
1138
- unifiedCryptoassetId: "4172"
1139
- },
1140
- {
1141
- allowSwap: false,
1142
- allowBridge: false,
1143
- allowLend: false,
1144
- allowBorrow: false,
1145
- name: "TerraUSD",
1146
- coin: "UST",
1147
- xtokenSymbol: "XUST",
1148
- xtokenPrecision: 6,
1149
- xtokenContract: "xtokens",
1150
- wallets: [
1151
- ...IS_MAINNET ? [
1152
- {
1153
- wallet: "UST",
1154
- symbol: "UST",
1155
- chain: "Terra" /* TerraMainnet */,
1156
- network: "mainnet" /* Mainnet */,
1157
- precision: 6,
1158
- contract: void 0,
1159
- provider: "fireblocks" /* FIREBLOCKS */,
1160
- hasWithdrawMemo: true
1161
- }
1162
- ] : []
1163
- ],
1164
- image: "https://app.metalx.com/img/tokens/ust.png",
1165
- coingeckoId: "terrausd",
1166
- unifiedCryptoassetId: "7129"
1167
- },
1168
- {
1169
- allowSwap: false,
1170
- allowBridge: IS_MAINNET,
1171
- allowLend: false,
1172
- allowBorrow: false,
1173
- name: "Solana",
1174
- coin: "SOL",
1175
- xtokenSymbol: "XSOL",
1176
- xtokenPrecision: 6,
1177
- xtokenContract: "xtokens",
1178
- wallets: [
1179
- ...IS_MAINNET ? [
1180
- {
1181
- wallet: "SOL",
1182
- symbol: "SOL",
1183
- chain: "Solana" /* SolanaMainnet */,
1184
- network: "mainnet" /* Mainnet */,
1185
- precision: 9,
1186
- contract: void 0,
1187
- provider: "fireblocks" /* FIREBLOCKS */,
1188
- hasWithdrawMemo: false
1189
- }
1190
- ] : []
1191
- ],
1192
- image: "https://app.metalx.com/img/tokens/sol.png",
1193
- coingeckoId: "solana",
1194
- unifiedCryptoassetId: "5426"
1195
- },
1196
- {
1197
- allowSwap: false,
1198
- allowBridge: IS_MAINNET,
1199
- allowLend: false,
1200
- allowBorrow: false,
1201
- name: "Ripple",
1202
- coin: "XRP",
1203
- xtokenSymbol: "XXRP",
1204
- xtokenPrecision: 6,
1205
- xtokenContract: "xtokens",
1206
- wallets: [
1207
- ...IS_MAINNET ? [
1208
- {
1209
- wallet: "XRP",
1210
- symbol: "XRP",
1211
- chain: "Ripple" /* RippleMainnet */,
1212
- network: "mainnet" /* Mainnet */,
1213
- precision: 6,
1214
- contract: void 0,
1215
- provider: "fireblocks" /* FIREBLOCKS */,
1216
- hasWithdrawMemo: true
1217
- }
1218
- ] : []
1219
- ],
1220
- image: "https://app.metalx.com/img/tokens/xrp.png",
1221
- coingeckoId: "ripple",
1222
- unifiedCryptoassetId: "52"
1223
- },
1224
- // Future
1225
- {
1226
- allowSwap: false,
1227
- allowBridge: false,
1228
- allowLend: false,
1229
- allowBorrow: false,
1230
- name: "Avalanche",
1231
- coin: "AVAX",
1232
- xtokenSymbol: "XAVAX",
1233
- xtokenPrecision: 9,
1234
- xtokenContract: "xtokens",
1235
- wallets: [
1236
- ...IS_MAINNET ? [
1237
- {
1238
- wallet: "AVAX",
1239
- symbol: "AVAX",
1240
- chain: "Avalanche C-Chain" /* AvalancheCChain */,
1241
- network: "mainnet" /* Mainnet */,
1242
- precision: 9,
1243
- contract: void 0,
1244
- provider: "fireblocks" /* FIREBLOCKS */,
1245
- hasWithdrawMemo: false
1246
- }
1247
- ] : []
1248
- ],
1249
- image: "https://app.metalx.com/img/tokens/avax.png",
1250
- coingeckoId: "avalanche-2",
1251
- unifiedCryptoassetId: "5805"
1252
- },
1253
- {
1254
- allowSwap: false,
1255
- allowBridge: false,
1256
- allowLend: false,
1257
- allowBorrow: false,
1258
- name: "Polygon",
1259
- coin: "MATIC",
1260
- xtokenSymbol: "XMATIC",
1261
- xtokenPrecision: 8,
1262
- xtokenContract: "xtokens",
1263
- wallets: [
1264
- ...IS_MAINNET ? [
1265
- {
1266
- wallet: "MATIC",
1267
- symbol: "MATIC",
1268
- chain: "Polygon" /* PolygonMainnet */,
1269
- network: "mainnet" /* Mainnet */,
1270
- precision: 18,
1271
- contract: "0x0000000000000000000000000000000000000000",
1272
- provider: "fireblocks" /* FIREBLOCKS */,
1273
- hasWithdrawMemo: false
1274
- }
1275
- ] : []
1276
- ],
1277
- image: "https://app.metalx.com/img/tokens/matic.png",
1278
- coingeckoId: "matic-network",
1279
- unifiedCryptoassetId: "3890"
1280
- },
1281
- {
1282
- allowSwap: true,
1283
- allowBridge: false,
1284
- allowLend: false,
1285
- allowBorrow: false,
1286
- name: "Metal Dollar",
1287
- coin: "XMD",
1288
- xtokenSymbol: "XMD",
1289
- xtokenPrecision: 6,
1290
- xtokenContract: "xmd.token",
1291
- wallets: [],
1292
- image: "https://app.metalx.com/img/tokens/xmd.png",
1293
- coingeckoId: "",
1294
- unifiedCryptoassetId: ""
1295
- },
1296
- {
1297
- allowSwap: false,
1298
- allowBridge: false,
1299
- allowLend: false,
1300
- allowBorrow: false,
1301
- name: "Metal Dollar",
1302
- coin: "MPD",
1303
- xtokenSymbol: "MPD",
1304
- xtokenPrecision: 6,
1305
- xtokenContract: "mpd.token",
1306
- wallets: [],
1307
- image: "https://app.metalx.com/img/tokens/mpd.png",
1308
- coingeckoId: "",
1309
- unifiedCryptoassetId: ""
1310
- },
1311
- {
1312
- allowSwap: false,
1313
- allowBridge: true,
1314
- allowLend: false,
1315
- allowBorrow: false,
1316
- name: "Hedera",
1317
- coin: "HBAR",
1318
- xtokenSymbol: "XHBAR",
1319
- xtokenPrecision: 6,
1320
- xtokenContract: "xtokens",
1321
- wallets: [
1322
- ...IS_TESTNET ? [
1323
- {
1324
- wallet: "HBAR",
1325
- symbol: "HBAR",
1326
- chain: "Hedera (Testnet)" /* HederaTestnet */,
1327
- network: "testnet" /* Testnet */,
1328
- precision: 8,
1329
- contract: void 0,
1330
- provider: "fireblocks" /* FIREBLOCKS */,
1331
- hasWithdrawMemo: true
1332
- }
1333
- ] : [
1334
- {
1335
- wallet: "HBAR",
1336
- symbol: "HBAR",
1337
- chain: "Hedera (Mainnet)" /* HederaMainnet */,
1338
- network: "mainnet" /* Mainnet */,
1339
- precision: 8,
1340
- contract: void 0,
1341
- provider: "fireblocks" /* FIREBLOCKS */,
1342
- hasWithdrawMemo: true
1343
- }
1344
- ]
1345
- ],
1346
- image: "https://app.metalx.com/img/tokens/hbar.png",
1347
- coingeckoId: "hedera-hashgraph",
1348
- unifiedCryptoassetId: "4642"
1349
- },
1350
- {
1351
- allowSwap: false,
1352
- allowBridge: IS_TESTNET,
1353
- allowLend: false,
1354
- allowBorrow: false,
1355
- name: "Ripple USD",
1356
- coin: "RLUSD",
1357
- xtokenSymbol: "XRLUSD",
1358
- xtokenPrecision: 6,
1359
- xtokenContract: "xtokens",
1360
- wallets: [
1361
- ...IS_MAINNET ? [
1362
- {
1363
- wallet: "RLUSD",
1364
- symbol: "RLUSD",
1365
- chain: "Ethereum" /* EthereumMainnet */,
1366
- network: "erc20" /* ERC20 */,
1367
- precision: 18,
1368
- contract: "0x8292bb45bf1ee4d140127049757c2e0ff06317ed",
1369
- provider: "fireblocks" /* FIREBLOCKS */,
1370
- hasWithdrawMemo: false
1371
- }
1372
- ] : [
1373
- {
1374
- wallet: "RLUSD",
1375
- symbol: "RLUSD",
1376
- chain: "Ethereum (Sepolia)" /* EthereumSepolia */,
1377
- network: "erc20" /* ERC20 */,
1378
- precision: 18,
1379
- contract: "0xe101FB315a64cDa9944E570a7bFfaFE60b994b1D",
1380
- provider: "fireblocks" /* FIREBLOCKS */,
1381
- hasWithdrawMemo: false
1382
- }
1383
- ]
1384
- ],
1385
- image: "https://app.metalx.com/img/tokens/rlusd.png",
1386
- coingeckoId: "ripple-usd",
1387
- unifiedCryptoassetId: "34387"
1388
- },
1389
- {
1390
- allowSwap: false,
1391
- allowBridge: false,
1392
- allowLend: false,
1393
- allowBorrow: false,
1394
- name: "Fidelity Digital Dollar",
1395
- coin: "FIDD",
1396
- xtokenSymbol: "XFIDD",
1397
- xtokenPrecision: 6,
1398
- xtokenContract: "xtokens",
1399
- wallets: [
1400
- ...IS_MAINNET ? [
1401
- {
1402
- wallet: "FIDD",
1403
- symbol: "FIDD",
1404
- chain: "Ethereum" /* EthereumMainnet */,
1405
- network: "erc20" /* ERC20 */,
1406
- precision: 18,
1407
- contract: "0x7C135549504245B5EAE64FC0E99FA5EBABB8E35D",
1408
- provider: "fireblocks" /* FIREBLOCKS */,
1409
- hasWithdrawMemo: false
1410
- }
1411
- ] : []
1412
- ],
1413
- image: "https://app.metalx.com/img/tokens/fidd.png",
1414
- coingeckoId: "fidelity-digital-dollar",
1415
- unifiedCryptoassetId: "39549"
1416
- },
1417
- // Important! This coin is not being used on MetalX. It is intended only for XMD-ETH purposes.
1418
- {
1419
- allowSwap: false,
1420
- allowBridge: false,
1421
- allowLend: false,
1422
- allowBorrow: false,
1423
- name: "Pax Dollar",
1424
- coin: "USDP",
1425
- xtokenSymbol: "XUSDP",
1426
- xtokenPrecision: 6,
1427
- xtokenContract: "xtokens",
1428
- wallets: [],
1429
- image: "https://app.metalx.com/img/tokens/usdp.png",
1430
- coingeckoId: "pax-dollar",
1431
- unifiedCryptoassetId: "3330"
1432
- }
1433
- ];
1434
- const walletWithDuplicateChains = coins.find((coin) => {
1435
- const chains = coin.wallets.map((wallet) => wallet.chain);
1436
- return new Set(chains).size !== chains.length;
1437
- });
1438
- if (walletWithDuplicateChains) {
1439
- throw new Error(
1440
- `Coin ${walletWithDuplicateChains.coin} has duplicate chains in wallet`
1441
- );
1442
- }
1443
- return {
1444
- allCoins: coins,
1445
- swapCoins: coins.filter((coin) => coin.allowSwap),
1446
- bridgeCoins: coins.filter((coin) => coin.allowBridge),
1447
- lendCoins: coins.filter((coin) => coin.allowLend),
1448
- borrowCoins: coins.filter((coin) => coin.allowBorrow),
1449
- loanCoins: coins.filter((coin) => coin.allowLend || coin.allowBorrow),
1450
- allEnabledCoins: coins.filter(
1451
- (coin) => coin.allowSwap || coin.allowBridge || coin.xtokenSymbol === "XMD"
1452
- )
1453
- };
98
+ const protonExplorerTxUrl = (chain, txId, traces) => chain === "proton" ? explorerLinkByChain["Proton"](txId, traces) : explorerLinkByChain["Proton (Testnet)"](txId, traces);
99
+ const initializeCoins = (protonChain) => {
100
+ const IS_MAINNET = protonChain === "proton";
101
+ const IS_TESTNET = protonChain === "proton-test";
102
+ const coins = [
103
+ {
104
+ allowSwap: true,
105
+ allowBridge: IS_MAINNET,
106
+ allowLend: true,
107
+ allowBorrow: true,
108
+ name: "XPR Network",
109
+ coin: "XPR",
110
+ xtokenSymbol: "XPR",
111
+ xtokenPrecision: 4,
112
+ xtokenContract: "eosio.token",
113
+ wallets: [...IS_MAINNET ? [{
114
+ wallet: "XPR-ERC20",
115
+ symbol: "XPR",
116
+ chain: "Ethereum",
117
+ network: "erc20",
118
+ precision: 4,
119
+ contract: "0xD7EFB00D12C2C13131FD319336FDF952525DA2AF",
120
+ provider: "fireblocks",
121
+ hasWithdrawMemo: false
122
+ }, {
123
+ wallet: "XPR-BEP20",
124
+ symbol: "XPR",
125
+ chain: "Binance (BEP20)",
126
+ network: "bep20",
127
+ precision: 4,
128
+ contract: "0x5DE3939B2F811A61D830E6F52D13B066881412AB",
129
+ provider: "fireblocks",
130
+ hasWithdrawMemo: false
131
+ }] : []],
132
+ image: "https://app.metalx.com/img/tokens/XPR.png",
133
+ coingeckoId: "proton",
134
+ unifiedCryptoassetId: "5350"
135
+ },
136
+ {
137
+ allowSwap: true,
138
+ allowBridge: true,
139
+ allowLend: true,
140
+ allowBorrow: true,
141
+ name: "USD Coin",
142
+ coin: "USDC",
143
+ xtokenSymbol: "XUSDC",
144
+ xtokenPrecision: 6,
145
+ xtokenContract: "xtokens",
146
+ wallets: [...IS_MAINNET ? [{
147
+ wallet: "USDC",
148
+ symbol: "USDC",
149
+ chain: "Ethereum",
150
+ network: "erc20",
151
+ precision: 6,
152
+ contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
153
+ provider: "fireblocks",
154
+ hasWithdrawMemo: false
155
+ }, {
156
+ wallet: "USDC-XLM",
157
+ symbol: "USDC",
158
+ chain: "Stellar",
159
+ network: "xlm",
160
+ precision: 7,
161
+ contract: void 0,
162
+ provider: "fireblocks",
163
+ hasWithdrawMemo: true
164
+ }] : [], ...IS_TESTNET ? [{
165
+ wallet: "USDC",
166
+ symbol: "USDC",
167
+ chain: "Ethereum (Sepolia)",
168
+ network: "sepolia",
169
+ precision: 6,
170
+ contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
171
+ provider: "fireblocks",
172
+ hasWithdrawMemo: false
173
+ }, {
174
+ wallet: "USDC-XLM",
175
+ symbol: "USDC",
176
+ chain: "Stellar (Testnet)",
177
+ network: "xlm",
178
+ precision: 7,
179
+ contract: void 0,
180
+ provider: "fireblocks",
181
+ hasWithdrawMemo: true
182
+ }] : []],
183
+ image: "https://app.metalx.com/img/tokens/usdc.png",
184
+ coingeckoId: "usd-coin",
185
+ unifiedCryptoassetId: "3408"
186
+ },
187
+ {
188
+ allowSwap: true,
189
+ allowBridge: true,
190
+ allowLend: true,
191
+ allowBorrow: true,
192
+ name: "Metal DAO",
193
+ coin: "MTL",
194
+ xtokenSymbol: "XMT",
195
+ xtokenPrecision: 8,
196
+ xtokenContract: "xtokens",
197
+ wallets: [...IS_MAINNET ? [{
198
+ wallet: "MTL-METALL2",
199
+ symbol: "MTL",
200
+ chain: "Metal L2",
201
+ network: "metall2",
202
+ precision: 8,
203
+ contract: "0xBCFc435d8F276585f6431Fc1b9EE9A850B5C00A9",
204
+ provider: "metall2",
205
+ hasWithdrawMemo: false
206
+ }] : []],
207
+ image: "https://app.metalx.com/img/tokens/mtl.png",
208
+ coingeckoId: "metal",
209
+ unifiedCryptoassetId: "1788"
210
+ },
211
+ {
212
+ allowSwap: true,
213
+ allowBridge: true,
214
+ allowLend: false,
215
+ allowBorrow: false,
216
+ name: "Metal Blockchain",
217
+ coin: "METAL",
218
+ xtokenSymbol: "METAL",
219
+ xtokenPrecision: 8,
220
+ xtokenContract: "xtokens",
221
+ wallets: [...IS_TESTNET ? [{
222
+ wallet: "METAL",
223
+ symbol: "METAL",
224
+ chain: "Metal C-Chain (Testnet)",
225
+ network: "evm",
226
+ precision: 18,
227
+ contract: "",
228
+ provider: "metal",
229
+ hasWithdrawMemo: false
230
+ }] : [], ...IS_MAINNET ? [{
231
+ wallet: "METAL",
232
+ symbol: "METAL",
233
+ chain: "Metal C-Chain",
234
+ network: "evm",
235
+ precision: 18,
236
+ contract: "",
237
+ provider: "metal",
238
+ hasWithdrawMemo: false
239
+ }, {
240
+ wallet: "METAL-ERC20",
241
+ symbol: "METAL",
242
+ chain: "Ethereum",
243
+ network: "erc20",
244
+ precision: 18,
245
+ contract: "",
246
+ provider: "fireblocks",
247
+ hasWithdrawMemo: false
248
+ }] : []],
249
+ image: "https://app.metalx.com/img/tokens/metal.png",
250
+ coingeckoId: "metal-blockchain",
251
+ unifiedCryptoassetId: "21769"
252
+ },
253
+ {
254
+ allowSwap: true,
255
+ allowBridge: true,
256
+ allowLend: true,
257
+ allowBorrow: true,
258
+ name: "Bitcoin",
259
+ coin: "BTC",
260
+ xtokenSymbol: "XBTC",
261
+ xtokenPrecision: 8,
262
+ xtokenContract: "xtokens",
263
+ wallets: [...IS_MAINNET ? [{
264
+ wallet: "BTC",
265
+ symbol: "BTC",
266
+ chain: "Bitcoin",
267
+ network: "mainnet",
268
+ precision: 8,
269
+ contract: void 0,
270
+ provider: "fireblocks",
271
+ hasWithdrawMemo: false
272
+ }] : [], ...IS_TESTNET ? [{
273
+ wallet: "BTC",
274
+ symbol: "BTC",
275
+ chain: "Bitcoin (Testnet)",
276
+ network: "testnet",
277
+ precision: 8,
278
+ contract: void 0,
279
+ provider: "fireblocks",
280
+ hasWithdrawMemo: false
281
+ }] : []],
282
+ image: "https://app.metalx.com/img/tokens/btc.png",
283
+ coingeckoId: "bitcoin",
284
+ unifiedCryptoassetId: "1"
285
+ },
286
+ {
287
+ allowSwap: true,
288
+ allowBridge: true,
289
+ allowLend: true,
290
+ allowBorrow: true,
291
+ name: "Ethereum",
292
+ coin: "ETH",
293
+ xtokenSymbol: "XETH",
294
+ xtokenPrecision: 8,
295
+ xtokenContract: "xtokens",
296
+ wallets: [...IS_MAINNET ? [{
297
+ wallet: "ETH",
298
+ symbol: "ETH",
299
+ chain: "Ethereum",
300
+ network: "mainnet",
301
+ precision: 18,
302
+ contract: "0x0000000000000000000000000000000000000000",
303
+ provider: "fireblocks",
304
+ hasWithdrawMemo: false
305
+ }] : [], ...IS_TESTNET ? [{
306
+ wallet: "ETH",
307
+ symbol: "ETH",
308
+ chain: "Ethereum (Sepolia)",
309
+ network: "sepolia",
310
+ precision: 18,
311
+ contract: "0x0000000000000000000000000000000000000000",
312
+ provider: "fireblocks",
313
+ hasWithdrawMemo: false
314
+ }] : []],
315
+ image: "https://app.metalx.com/img/tokens/eth.png",
316
+ coingeckoId: "ethereum",
317
+ unifiedCryptoassetId: "1027"
318
+ },
319
+ {
320
+ allowSwap: true,
321
+ allowBridge: false,
322
+ allowLend: false,
323
+ allowBorrow: false,
324
+ name: "LOAN Protocol",
325
+ coin: "LOAN",
326
+ xtokenSymbol: "LOAN",
327
+ xtokenPrecision: 4,
328
+ xtokenContract: "loan.token",
329
+ wallets: [],
330
+ image: "https://app.metalx.com/img/tokens/loan.png",
331
+ coingeckoId: "proton-loan",
332
+ unifiedCryptoassetId: "22071"
333
+ },
334
+ {
335
+ allowSwap: true,
336
+ allowBridge: true,
337
+ allowLend: false,
338
+ allowBorrow: false,
339
+ name: "Tether",
340
+ coin: "USDT",
341
+ xtokenSymbol: "XUSDT",
342
+ xtokenPrecision: 6,
343
+ xtokenContract: "xtokens",
344
+ wallets: [...IS_MAINNET ? [{
345
+ wallet: "USDT",
346
+ symbol: "USDT",
347
+ chain: "Ethereum",
348
+ network: "erc20",
349
+ precision: 6,
350
+ contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
351
+ provider: "fireblocks",
352
+ hasWithdrawMemo: false
353
+ }] : [{
354
+ wallet: "USDT",
355
+ symbol: "USDT",
356
+ chain: "Ethereum (Sepolia)",
357
+ network: "sepolia",
358
+ precision: 6,
359
+ contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
360
+ provider: "fireblocks",
361
+ hasWithdrawMemo: false
362
+ }]],
363
+ image: "https://app.metalx.com/img/tokens/usdt.png",
364
+ coingeckoId: "tether",
365
+ unifiedCryptoassetId: "825"
366
+ },
367
+ {
368
+ allowSwap: false,
369
+ allowBridge: false,
370
+ allowLend: false,
371
+ allowBorrow: false,
372
+ name: "TrueUSD",
373
+ coin: "TUSD",
374
+ xtokenSymbol: "XTUSD",
375
+ xtokenPrecision: 6,
376
+ xtokenContract: "xtokens",
377
+ wallets: [...IS_MAINNET ? [] : []],
378
+ image: "https://app.metalx.com/img/tokens/tusd.png",
379
+ coingeckoId: "true-usd",
380
+ unifiedCryptoassetId: "2563"
381
+ },
382
+ {
383
+ allowSwap: false,
384
+ allowBridge: IS_MAINNET,
385
+ allowLend: false,
386
+ allowBorrow: false,
387
+ name: "Euro Coin",
388
+ coin: "EUROC",
389
+ xtokenSymbol: "XEUROC",
390
+ xtokenPrecision: 6,
391
+ xtokenContract: "xtokens",
392
+ wallets: [...IS_MAINNET ? [{
393
+ wallet: "EUROC-ERC20",
394
+ symbol: "EUROC",
395
+ chain: "Ethereum",
396
+ network: "erc20",
397
+ precision: 6,
398
+ contract: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
399
+ provider: "fireblocks",
400
+ hasWithdrawMemo: false
401
+ }] : []],
402
+ image: "https://assets.coingecko.com/coins/images/26045/small/euro-coin.png?1655394420",
403
+ coingeckoId: "euro-coin",
404
+ unifiedCryptoassetId: "20641"
405
+ },
406
+ {
407
+ allowSwap: false,
408
+ allowBridge: IS_MAINNET,
409
+ allowLend: false,
410
+ allowBorrow: false,
411
+ name: "XDC Network",
412
+ coin: "XDC",
413
+ xtokenSymbol: "XDC",
414
+ xtokenPrecision: 4,
415
+ xtokenContract: "xtokens",
416
+ wallets: [...IS_MAINNET ? [{
417
+ wallet: "XDC",
418
+ symbol: "XDC",
419
+ chain: "XDC Network",
420
+ network: "mainnet",
421
+ precision: 18,
422
+ contract: "",
423
+ provider: "fireblocks",
424
+ hasWithdrawMemo: false
425
+ }] : []],
426
+ image: "https://app.metalx.com/img/tokens/xdc.png",
427
+ coingeckoId: "xdce-crowd-sale",
428
+ unifiedCryptoassetId: "2634"
429
+ },
430
+ {
431
+ allowSwap: false,
432
+ allowBridge: IS_MAINNET,
433
+ allowLend: false,
434
+ allowBorrow: false,
435
+ name: "Paxos Dollar",
436
+ coin: "PAX",
437
+ xtokenSymbol: "XPAX",
438
+ xtokenPrecision: 6,
439
+ xtokenContract: "xtokens",
440
+ wallets: [...IS_MAINNET ? [{
441
+ wallet: "PAX",
442
+ symbol: "PAX",
443
+ chain: "Ethereum",
444
+ network: "erc20",
445
+ precision: 18,
446
+ contract: "0x8E870D67F660D95D5BE530380D0EC0BD388289E1",
447
+ provider: "fireblocks",
448
+ hasWithdrawMemo: false
449
+ }] : []],
450
+ image: "https://app.metalx.com/img/tokens/pax.png",
451
+ coingeckoId: "paxos-standard",
452
+ unifiedCryptoassetId: "3330"
453
+ },
454
+ {
455
+ allowSwap: false,
456
+ allowBridge: true,
457
+ allowLend: false,
458
+ allowBorrow: false,
459
+ name: "Paxos Gold",
460
+ coin: "PAXG",
461
+ xtokenSymbol: "XPAXG",
462
+ xtokenPrecision: 8,
463
+ xtokenContract: "xtokens",
464
+ wallets: [...IS_MAINNET ? [{
465
+ wallet: "PAXG",
466
+ symbol: "PAXG",
467
+ chain: "Ethereum",
468
+ network: "erc20",
469
+ precision: 18,
470
+ contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
471
+ provider: "fireblocks",
472
+ hasWithdrawMemo: false
473
+ }] : [], ...IS_TESTNET ? [{
474
+ wallet: "PAXG",
475
+ symbol: "PAXG",
476
+ chain: "Ethereum (Sepolia)",
477
+ network: "sepolia",
478
+ precision: 18,
479
+ contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
480
+ provider: "fireblocks",
481
+ hasWithdrawMemo: false
482
+ }] : []],
483
+ image: "https://app.metalx.com/img/tokens/paxg.png",
484
+ coingeckoId: "pax-gold",
485
+ unifiedCryptoassetId: "4705"
486
+ },
487
+ {
488
+ allowSwap: false,
489
+ allowBridge: false,
490
+ allowLend: false,
491
+ allowBorrow: false,
492
+ name: "Storex",
493
+ coin: "STRX",
494
+ xtokenSymbol: "STRX",
495
+ xtokenPrecision: 4,
496
+ xtokenContract: "storex",
497
+ wallets: [],
498
+ image: "https://app.metalx.com/img/tokens/strx.png",
499
+ coingeckoId: "storex",
500
+ unifiedCryptoassetId: ""
501
+ },
502
+ {
503
+ allowSwap: false,
504
+ allowBridge: false,
505
+ allowLend: false,
506
+ allowBorrow: false,
507
+ name: "Mint",
508
+ coin: "MINT",
509
+ xtokenSymbol: "MINT",
510
+ xtokenPrecision: 4,
511
+ xtokenContract: "protonmint",
512
+ wallets: [],
513
+ image: "https://app.metalx.com/img/tokens/mint.png",
514
+ coingeckoId: "",
515
+ unifiedCryptoassetId: ""
516
+ },
517
+ {
518
+ allowSwap: IS_MAINNET,
519
+ allowBridge: false,
520
+ allowLend: false,
521
+ allowBorrow: false,
522
+ name: "Snipcoins",
523
+ coin: "SNIPS",
524
+ xtokenSymbol: "SNIPS",
525
+ xtokenPrecision: 4,
526
+ xtokenContract: "snipcoins",
527
+ wallets: [],
528
+ image: "https://app.metalx.com/img/tokens/snips.png",
529
+ coingeckoId: "",
530
+ unifiedCryptoassetId: ""
531
+ },
532
+ {
533
+ allowSwap: false,
534
+ allowBridge: false,
535
+ allowLend: false,
536
+ allowBorrow: false,
537
+ name: "Uniswap",
538
+ coin: "UNI",
539
+ xtokenSymbol: "XUNI",
540
+ xtokenPrecision: 6,
541
+ xtokenContract: "xtokens",
542
+ wallets: [...IS_MAINNET ? [] : [], ...IS_TESTNET ? [] : []],
543
+ image: "https://app.metalx.com/img/tokens/uni.png",
544
+ coingeckoId: "uniswap",
545
+ unifiedCryptoassetId: "7083"
546
+ },
547
+ {
548
+ allowSwap: false,
549
+ allowBridge: false,
550
+ allowLend: false,
551
+ allowBorrow: false,
552
+ name: "1INCH",
553
+ coin: "1INCH",
554
+ xtokenSymbol: "XINCH",
555
+ xtokenPrecision: 6,
556
+ xtokenContract: "xtokens",
557
+ wallets: [...IS_MAINNET ? [{
558
+ wallet: "1INCH",
559
+ symbol: "1INCH",
560
+ chain: "Ethereum",
561
+ network: "erc20",
562
+ precision: 18,
563
+ contract: "0x111111111117DC0AA78B770FA6A738034120C302",
564
+ provider: "fireblocks",
565
+ hasWithdrawMemo: false
566
+ }] : []],
567
+ image: "https://www.proton.org/images/tokens/xtokensXINCH.png",
568
+ coingeckoId: "1inch",
569
+ unifiedCryptoassetId: "8104"
570
+ },
571
+ {
572
+ allowSwap: false,
573
+ allowBridge: false,
574
+ allowLend: false,
575
+ allowBorrow: false,
576
+ name: "Chainlink",
577
+ coin: "LINK",
578
+ xtokenSymbol: "XLINK",
579
+ xtokenPrecision: 6,
580
+ xtokenContract: "xtokens",
581
+ wallets: [...IS_MAINNET ? [{
582
+ wallet: "LINK",
583
+ symbol: "LINK",
584
+ chain: "Ethereum",
585
+ network: "erc20",
586
+ precision: 18,
587
+ contract: "0x514910771AF9CA656AF840DFF83E8264ECF986CA",
588
+ provider: "fireblocks",
589
+ hasWithdrawMemo: false
590
+ }] : []],
591
+ image: "https://app.metalx.com/img/tokens/link.png",
592
+ coingeckoId: "chainlink",
593
+ unifiedCryptoassetId: "1975"
594
+ },
595
+ {
596
+ allowSwap: IS_MAINNET,
597
+ allowBridge: true,
598
+ allowLend: false,
599
+ allowBorrow: false,
600
+ name: "Litecoin",
601
+ coin: "LTC",
602
+ xtokenSymbol: "XLTC",
603
+ xtokenPrecision: 8,
604
+ xtokenContract: "xtokens",
605
+ wallets: [...IS_MAINNET ? [{
606
+ wallet: "LTC",
607
+ symbol: "LTC",
608
+ chain: "Litecoin",
609
+ network: "mainnet",
610
+ precision: 8,
611
+ contract: void 0,
612
+ provider: "fireblocks",
613
+ hasWithdrawMemo: false
614
+ }] : [], ...IS_TESTNET ? [{
615
+ wallet: "LTC",
616
+ symbol: "LTC",
617
+ chain: "Litecoin (Testnet)",
618
+ network: "testnet",
619
+ precision: 8,
620
+ contract: void 0,
621
+ provider: "fireblocks",
622
+ hasWithdrawMemo: false
623
+ }] : []],
624
+ image: "https://app.metalx.com/img/tokens/ltc.png",
625
+ coingeckoId: "litecoin",
626
+ unifiedCryptoassetId: "2"
627
+ },
628
+ {
629
+ allowSwap: false,
630
+ allowBridge: IS_MAINNET,
631
+ allowLend: false,
632
+ allowBorrow: false,
633
+ name: "PayPal USD",
634
+ coin: "PYUSD",
635
+ xtokenSymbol: "XPYUSD",
636
+ xtokenPrecision: 6,
637
+ xtokenContract: "xtokens",
638
+ wallets: [...IS_MAINNET ? [{
639
+ wallet: "PYUSD",
640
+ symbol: "PYUSD",
641
+ chain: "Ethereum",
642
+ network: "erc20",
643
+ precision: 6,
644
+ contract: void 0,
645
+ provider: "fireblocks",
646
+ hasWithdrawMemo: false
647
+ }] : []],
648
+ image: "https://app.metalx.com/img/tokens/pyusd.png",
649
+ coingeckoId: "paypal-usd",
650
+ unifiedCryptoassetId: "27772"
651
+ },
652
+ {
653
+ allowSwap: false,
654
+ allowBridge: false,
655
+ allowLend: false,
656
+ allowBorrow: false,
657
+ name: "Bitcoin Cash",
658
+ coin: "BCH",
659
+ xtokenSymbol: "XBCH",
660
+ xtokenPrecision: 8,
661
+ xtokenContract: "xtokens",
662
+ wallets: [...IS_MAINNET ? [] : [], ...IS_TESTNET ? [] : []],
663
+ image: "https://app.metalx.com/img/tokens/bch.png",
664
+ coingeckoId: "bitcoin-cash",
665
+ unifiedCryptoassetId: "1831"
666
+ },
667
+ {
668
+ allowSwap: true,
669
+ allowBridge: true,
670
+ allowLend: false,
671
+ allowBorrow: false,
672
+ name: "LunarCrush",
673
+ coin: "LUNR",
674
+ xtokenSymbol: "XLUNR",
675
+ xtokenPrecision: 4,
676
+ xtokenContract: "xtokens",
677
+ wallets: [...IS_MAINNET ? [{
678
+ wallet: "LUNR",
679
+ symbol: "LUNR",
680
+ chain: "Ethereum",
681
+ network: "erc20",
682
+ precision: 4,
683
+ contract: void 0,
684
+ provider: "fireblocks",
685
+ hasWithdrawMemo: false
686
+ }] : []],
687
+ image: "https://app.metalx.com/img/tokens/lunr.png",
688
+ coingeckoId: "lunr-token",
689
+ unifiedCryptoassetId: "12971"
690
+ },
691
+ {
692
+ allowSwap: false,
693
+ allowBridge: true,
694
+ allowLend: false,
695
+ allowBorrow: false,
696
+ name: "Stellar",
697
+ coin: "XLM",
698
+ xtokenSymbol: "XXLM",
699
+ xtokenPrecision: 6,
700
+ xtokenContract: "xtokens",
701
+ wallets: [...IS_MAINNET ? [{
702
+ wallet: "XLM",
703
+ symbol: "XLM",
704
+ chain: "Stellar",
705
+ network: "mainnet",
706
+ precision: 7,
707
+ contract: void 0,
708
+ provider: "fireblocks",
709
+ hasWithdrawMemo: true
710
+ }] : [], ...IS_TESTNET ? [{
711
+ wallet: "XLM",
712
+ symbol: "XLM",
713
+ chain: "Stellar (Testnet)",
714
+ network: "testnet",
715
+ precision: 7,
716
+ contract: void 0,
717
+ provider: "fireblocks",
718
+ hasWithdrawMemo: true
719
+ }] : []],
720
+ image: "https://app.metalx.com/img/tokens/xlm.png",
721
+ coingeckoId: "stellar",
722
+ unifiedCryptoassetId: "512"
723
+ },
724
+ {
725
+ allowSwap: false,
726
+ allowBridge: false,
727
+ allowLend: false,
728
+ allowBorrow: false,
729
+ name: "Sense",
730
+ coin: "SENSE",
731
+ xtokenSymbol: "XSENSE",
732
+ xtokenPrecision: 4,
733
+ xtokenContract: "sense",
734
+ wallets: [],
735
+ image: "https://app.metalx.com/img/tokens/sense.png",
736
+ coingeckoId: "sense",
737
+ unifiedCryptoassetId: ""
738
+ },
739
+ {
740
+ allowSwap: false,
741
+ allowBridge: false,
742
+ allowLend: false,
743
+ allowBorrow: false,
744
+ name: "Polkadot",
745
+ coin: "DOT",
746
+ xtokenSymbol: "XDOT",
747
+ xtokenPrecision: 8,
748
+ xtokenContract: "xtokens",
749
+ wallets: [...IS_MAINNET ? [{
750
+ wallet: "DOT",
751
+ symbol: "DOT",
752
+ chain: "Polkadot",
753
+ network: "mainnet",
754
+ precision: 10,
755
+ contract: void 0,
756
+ provider: "fireblocks",
757
+ hasWithdrawMemo: false
758
+ }] : []],
759
+ image: "https://app.metalx.com/img/tokens/dot.png",
760
+ coingeckoId: "polkadot",
761
+ unifiedCryptoassetId: "6636"
762
+ },
763
+ {
764
+ allowSwap: true,
765
+ allowBridge: false,
766
+ allowLend: false,
767
+ allowBorrow: false,
768
+ name: "Binance Coin",
769
+ coin: "BNB",
770
+ xtokenSymbol: "XBNB",
771
+ xtokenPrecision: 8,
772
+ xtokenContract: "xtokens",
773
+ wallets: [...IS_MAINNET ? [] : []],
774
+ image: "https://app.metalx.com/img/tokens/bnb.png",
775
+ coingeckoId: "binancecoin",
776
+ unifiedCryptoassetId: "1839"
777
+ },
778
+ {
779
+ allowSwap: false,
780
+ allowBridge: false,
781
+ allowLend: false,
782
+ allowBorrow: false,
783
+ name: "Binance USD",
784
+ coin: "BUSD",
785
+ xtokenSymbol: "XBUSD",
786
+ xtokenPrecision: 6,
787
+ xtokenContract: "xtokens",
788
+ wallets: [],
789
+ image: "https://app.metalx.com/img/tokens/busd.png",
790
+ coingeckoId: "binance-usd",
791
+ unifiedCryptoassetId: "4687"
792
+ },
793
+ {
794
+ allowSwap: true,
795
+ allowBridge: true,
796
+ allowLend: false,
797
+ allowBorrow: false,
798
+ name: "EOS",
799
+ coin: "EOS",
800
+ xtokenSymbol: "XEOS",
801
+ xtokenPrecision: 4,
802
+ xtokenContract: "xtokens",
803
+ wallets: [...IS_MAINNET ? [{
804
+ wallet: "EOS",
805
+ symbol: "EOS",
806
+ chain: "EOS",
807
+ network: "mainnet",
808
+ precision: 4,
809
+ contract: void 0,
810
+ provider: "fireblocks",
811
+ hasWithdrawMemo: true
812
+ }] : [], ...IS_TESTNET ? [{
813
+ wallet: "EOS",
814
+ symbol: "EOS",
815
+ chain: "EOS (Jungle Testnet)",
816
+ network: "testnet",
817
+ precision: 4,
818
+ contract: void 0,
819
+ provider: "fireblocks",
820
+ hasWithdrawMemo: true
821
+ }] : []],
822
+ image: "https://app.metalx.com/img/tokens/eos.png",
823
+ coingeckoId: "eos",
824
+ unifiedCryptoassetId: "1765"
825
+ },
826
+ {
827
+ allowSwap: IS_MAINNET,
828
+ allowBridge: IS_MAINNET,
829
+ allowLend: true,
830
+ allowBorrow: true,
831
+ name: "Dogecoin",
832
+ coin: "DOGE",
833
+ xtokenSymbol: "XDOGE",
834
+ xtokenPrecision: 6,
835
+ xtokenContract: "xtokens",
836
+ wallets: [...IS_MAINNET ? [{
837
+ wallet: "DOGE",
838
+ symbol: "DOGE",
839
+ chain: "Dogecoin",
840
+ network: "mainnet",
841
+ precision: 8,
842
+ contract: void 0,
843
+ provider: "fireblocks",
844
+ hasWithdrawMemo: false
845
+ }] : []],
846
+ image: "https://app.metalx.com/img/tokens/doge.png",
847
+ coingeckoId: "dogecoin",
848
+ unifiedCryptoassetId: "74"
849
+ },
850
+ {
851
+ allowSwap: IS_MAINNET,
852
+ allowBridge: IS_MAINNET,
853
+ allowLend: false,
854
+ allowBorrow: false,
855
+ name: "Cardano",
856
+ coin: "ADA",
857
+ xtokenSymbol: "XADA",
858
+ xtokenPrecision: 6,
859
+ xtokenContract: "xtokens",
860
+ wallets: [...IS_MAINNET ? [{
861
+ wallet: "ADA",
862
+ symbol: "ADA",
863
+ chain: "Cardano",
864
+ network: "mainnet",
865
+ precision: 6,
866
+ contract: void 0,
867
+ provider: "fireblocks",
868
+ hasWithdrawMemo: false
869
+ }] : []],
870
+ image: "https://app.metalx.com/img/tokens/ada.png",
871
+ coingeckoId: "cardano",
872
+ unifiedCryptoassetId: "2010"
873
+ },
874
+ {
875
+ allowSwap: false,
876
+ allowBridge: false,
877
+ allowLend: false,
878
+ allowBorrow: false,
879
+ name: "Terra",
880
+ coin: "LUNA",
881
+ xtokenSymbol: "XLUNA",
882
+ xtokenPrecision: 6,
883
+ xtokenContract: "xtokens",
884
+ wallets: [],
885
+ image: "https://app.metalx.com/img/tokens/luna.png",
886
+ coingeckoId: "terra-luna",
887
+ unifiedCryptoassetId: "4172"
888
+ },
889
+ {
890
+ allowSwap: false,
891
+ allowBridge: false,
892
+ allowLend: false,
893
+ allowBorrow: false,
894
+ name: "TerraUSD",
895
+ coin: "UST",
896
+ xtokenSymbol: "XUST",
897
+ xtokenPrecision: 6,
898
+ xtokenContract: "xtokens",
899
+ wallets: [...IS_MAINNET ? [{
900
+ wallet: "UST",
901
+ symbol: "UST",
902
+ chain: "Terra",
903
+ network: "mainnet",
904
+ precision: 6,
905
+ contract: void 0,
906
+ provider: "fireblocks",
907
+ hasWithdrawMemo: true
908
+ }] : []],
909
+ image: "https://app.metalx.com/img/tokens/ust.png",
910
+ coingeckoId: "terrausd",
911
+ unifiedCryptoassetId: "7129"
912
+ },
913
+ {
914
+ allowSwap: false,
915
+ allowBridge: IS_MAINNET,
916
+ allowLend: false,
917
+ allowBorrow: false,
918
+ name: "Solana",
919
+ coin: "SOL",
920
+ xtokenSymbol: "XSOL",
921
+ xtokenPrecision: 6,
922
+ xtokenContract: "xtokens",
923
+ wallets: [...IS_MAINNET ? [{
924
+ wallet: "SOL",
925
+ symbol: "SOL",
926
+ chain: "Solana",
927
+ network: "mainnet",
928
+ precision: 9,
929
+ contract: void 0,
930
+ provider: "fireblocks",
931
+ hasWithdrawMemo: false
932
+ }] : []],
933
+ image: "https://app.metalx.com/img/tokens/sol.png",
934
+ coingeckoId: "solana",
935
+ unifiedCryptoassetId: "5426"
936
+ },
937
+ {
938
+ allowSwap: false,
939
+ allowBridge: IS_MAINNET,
940
+ allowLend: false,
941
+ allowBorrow: false,
942
+ name: "Ripple",
943
+ coin: "XRP",
944
+ xtokenSymbol: "XXRP",
945
+ xtokenPrecision: 6,
946
+ xtokenContract: "xtokens",
947
+ wallets: [...IS_MAINNET ? [{
948
+ wallet: "XRP",
949
+ symbol: "XRP",
950
+ chain: "Ripple",
951
+ network: "mainnet",
952
+ precision: 6,
953
+ contract: void 0,
954
+ provider: "fireblocks",
955
+ hasWithdrawMemo: true
956
+ }] : []],
957
+ image: "https://app.metalx.com/img/tokens/xrp.png",
958
+ coingeckoId: "ripple",
959
+ unifiedCryptoassetId: "52"
960
+ },
961
+ {
962
+ allowSwap: false,
963
+ allowBridge: false,
964
+ allowLend: false,
965
+ allowBorrow: false,
966
+ name: "Avalanche",
967
+ coin: "AVAX",
968
+ xtokenSymbol: "XAVAX",
969
+ xtokenPrecision: 9,
970
+ xtokenContract: "xtokens",
971
+ wallets: [...IS_MAINNET ? [{
972
+ wallet: "AVAX",
973
+ symbol: "AVAX",
974
+ chain: "Avalanche C-Chain",
975
+ network: "mainnet",
976
+ precision: 9,
977
+ contract: void 0,
978
+ provider: "fireblocks",
979
+ hasWithdrawMemo: false
980
+ }] : []],
981
+ image: "https://app.metalx.com/img/tokens/avax.png",
982
+ coingeckoId: "avalanche-2",
983
+ unifiedCryptoassetId: "5805"
984
+ },
985
+ {
986
+ allowSwap: false,
987
+ allowBridge: false,
988
+ allowLend: false,
989
+ allowBorrow: false,
990
+ name: "Polygon",
991
+ coin: "MATIC",
992
+ xtokenSymbol: "XMATIC",
993
+ xtokenPrecision: 8,
994
+ xtokenContract: "xtokens",
995
+ wallets: [...IS_MAINNET ? [{
996
+ wallet: "MATIC",
997
+ symbol: "MATIC",
998
+ chain: "Polygon",
999
+ network: "mainnet",
1000
+ precision: 18,
1001
+ contract: "0x0000000000000000000000000000000000000000",
1002
+ provider: "fireblocks",
1003
+ hasWithdrawMemo: false
1004
+ }] : []],
1005
+ image: "https://app.metalx.com/img/tokens/matic.png",
1006
+ coingeckoId: "matic-network",
1007
+ unifiedCryptoassetId: "3890"
1008
+ },
1009
+ {
1010
+ allowSwap: true,
1011
+ allowBridge: false,
1012
+ allowLend: false,
1013
+ allowBorrow: false,
1014
+ name: "Metal Dollar",
1015
+ coin: "XMD",
1016
+ xtokenSymbol: "XMD",
1017
+ xtokenPrecision: 6,
1018
+ xtokenContract: "xmd.token",
1019
+ wallets: [],
1020
+ image: "https://app.metalx.com/img/tokens/xmd.png",
1021
+ coingeckoId: "",
1022
+ unifiedCryptoassetId: ""
1023
+ },
1024
+ {
1025
+ allowSwap: false,
1026
+ allowBridge: false,
1027
+ allowLend: false,
1028
+ allowBorrow: false,
1029
+ name: "Metal Dollar",
1030
+ coin: "MPD",
1031
+ xtokenSymbol: "MPD",
1032
+ xtokenPrecision: 6,
1033
+ xtokenContract: "mpd.token",
1034
+ wallets: [],
1035
+ image: "https://app.metalx.com/img/tokens/mpd.png",
1036
+ coingeckoId: "",
1037
+ unifiedCryptoassetId: ""
1038
+ },
1039
+ {
1040
+ allowSwap: false,
1041
+ allowBridge: true,
1042
+ allowLend: false,
1043
+ allowBorrow: false,
1044
+ name: "Hedera",
1045
+ coin: "HBAR",
1046
+ xtokenSymbol: "XHBAR",
1047
+ xtokenPrecision: 6,
1048
+ xtokenContract: "xtokens",
1049
+ wallets: [...IS_TESTNET ? [{
1050
+ wallet: "HBAR",
1051
+ symbol: "HBAR",
1052
+ chain: "Hedera (Testnet)",
1053
+ network: "testnet",
1054
+ precision: 8,
1055
+ contract: void 0,
1056
+ provider: "fireblocks",
1057
+ hasWithdrawMemo: true
1058
+ }] : [{
1059
+ wallet: "HBAR",
1060
+ symbol: "HBAR",
1061
+ chain: "Hedera (Mainnet)",
1062
+ network: "mainnet",
1063
+ precision: 8,
1064
+ contract: void 0,
1065
+ provider: "fireblocks",
1066
+ hasWithdrawMemo: true
1067
+ }]],
1068
+ image: "https://app.metalx.com/img/tokens/hbar.png",
1069
+ coingeckoId: "hedera-hashgraph",
1070
+ unifiedCryptoassetId: "4642"
1071
+ },
1072
+ {
1073
+ allowSwap: false,
1074
+ allowBridge: IS_TESTNET,
1075
+ allowLend: false,
1076
+ allowBorrow: false,
1077
+ name: "Ripple USD",
1078
+ coin: "RLUSD",
1079
+ xtokenSymbol: "XRLUSD",
1080
+ xtokenPrecision: 6,
1081
+ xtokenContract: "xtokens",
1082
+ wallets: [...IS_MAINNET ? [{
1083
+ wallet: "RLUSD",
1084
+ symbol: "RLUSD",
1085
+ chain: "Ethereum",
1086
+ network: "erc20",
1087
+ precision: 18,
1088
+ contract: "0x8292bb45bf1ee4d140127049757c2e0ff06317ed",
1089
+ provider: "fireblocks",
1090
+ hasWithdrawMemo: false
1091
+ }] : [{
1092
+ wallet: "RLUSD",
1093
+ symbol: "RLUSD",
1094
+ chain: "Ethereum (Sepolia)",
1095
+ network: "erc20",
1096
+ precision: 18,
1097
+ contract: "0xe101FB315a64cDa9944E570a7bFfaFE60b994b1D",
1098
+ provider: "fireblocks",
1099
+ hasWithdrawMemo: false
1100
+ }]],
1101
+ image: "https://app.metalx.com/img/tokens/rlusd.png",
1102
+ coingeckoId: "ripple-usd",
1103
+ unifiedCryptoassetId: "34387"
1104
+ },
1105
+ {
1106
+ allowSwap: false,
1107
+ allowBridge: false,
1108
+ allowLend: false,
1109
+ allowBorrow: false,
1110
+ name: "Fidelity Digital Dollar",
1111
+ coin: "FIDD",
1112
+ xtokenSymbol: "XFIDD",
1113
+ xtokenPrecision: 6,
1114
+ xtokenContract: "xtokens",
1115
+ wallets: [...IS_MAINNET ? [{
1116
+ wallet: "FIDD",
1117
+ symbol: "FIDD",
1118
+ chain: "Ethereum",
1119
+ network: "erc20",
1120
+ precision: 18,
1121
+ contract: "0x7C135549504245B5EAE64FC0E99FA5EBABB8E35D",
1122
+ provider: "fireblocks",
1123
+ hasWithdrawMemo: false
1124
+ }] : []],
1125
+ image: "https://app.metalx.com/img/tokens/fidd.png",
1126
+ coingeckoId: "fidelity-digital-dollar",
1127
+ unifiedCryptoassetId: "39549"
1128
+ },
1129
+ {
1130
+ allowSwap: false,
1131
+ allowBridge: false,
1132
+ allowLend: false,
1133
+ allowBorrow: false,
1134
+ name: "Pax Dollar",
1135
+ coin: "USDP",
1136
+ xtokenSymbol: "XUSDP",
1137
+ xtokenPrecision: 6,
1138
+ xtokenContract: "xtokens",
1139
+ wallets: [],
1140
+ image: "https://app.metalx.com/img/tokens/usdp.png",
1141
+ coingeckoId: "pax-dollar",
1142
+ unifiedCryptoassetId: "3330"
1143
+ }
1144
+ ];
1145
+ const walletWithDuplicateChains = coins.find((coin) => {
1146
+ const chains = coin.wallets.map((wallet) => wallet.chain);
1147
+ return new Set(chains).size !== chains.length;
1148
+ });
1149
+ if (walletWithDuplicateChains) throw new Error(`Coin ${walletWithDuplicateChains.coin} has duplicate chains in wallet`);
1150
+ return {
1151
+ allCoins: coins,
1152
+ swapCoins: coins.filter((coin) => coin.allowSwap),
1153
+ bridgeCoins: coins.filter((coin) => coin.allowBridge),
1154
+ lendCoins: coins.filter((coin) => coin.allowLend),
1155
+ borrowCoins: coins.filter((coin) => coin.allowBorrow),
1156
+ loanCoins: coins.filter((coin) => coin.allowLend || coin.allowBorrow),
1157
+ allEnabledCoins: coins.filter((coin) => coin.allowSwap || coin.allowBridge || coin.xtokenSymbol === "XMD")
1158
+ };
1454
1159
  };
1455
-
1456
- // src/parsers/actions.ts
1457
- import * as z2 from "zod";
1458
-
1459
1160
  // src/parsers/base.ts
1460
- import * as z from "zod";
1461
- var accountParser = z.string().regex(/^[.1-5a-z]{0,12}[.1-5a-j]?$/);
1462
- var authorizationParser = z.object({
1463
- actor: accountParser,
1464
- permission: z.string()
1161
+ const accountParser = z.string().regex(/^[.1-5a-z]{0,12}[.1-5a-j]?$/);
1162
+ const authorizationParser = z.object({
1163
+ actor: accountParser,
1164
+ permission: z.string()
1465
1165
  });
1466
- var authorizationsParser = z.array(authorizationParser).min(1);
1467
- var ExtendedAssetParser = z.object({
1468
- quantity: z.string(),
1469
- contract: accountParser
1166
+ const authorizationsParser = z.array(authorizationParser).min(1);
1167
+ const ExtendedAssetParser = z.object({
1168
+ quantity: z.string(),
1169
+ contract: accountParser
1470
1170
  });
1471
- var accountRamDeltaParser = z.object({
1472
- account: z.string(),
1473
- delta: z.string()
1171
+ const accountRamDeltaParser = z.object({
1172
+ account: z.string(),
1173
+ delta: z.string()
1474
1174
  });
1475
-
1476
1175
  // src/parsers/actions.ts
1477
- var actionParser = z2.object({
1478
- account: z2.string(),
1479
- name: z2.string(),
1480
- authorization: z2.array(
1481
- z2.object({
1482
- actor: z2.string(),
1483
- permission: z2.string()
1484
- })
1485
- ),
1486
- data: z2.any(),
1487
- hex_data: z2.string().optional()
1488
- });
1489
- var transactionExtensionsParser = z2.array(z2.number().or(z2.string())).optional();
1490
- var rawTransactionParser = z2.object({
1491
- expiration: z2.string(),
1492
- ref_block_num: z2.number(),
1493
- ref_block_prefix: z2.number(),
1494
- max_net_usage_words: z2.number(),
1495
- max_cpu_usage_ms: z2.number(),
1496
- delay_sec: z2.number(),
1497
- context_free_actions: z2.array(actionParser),
1498
- transaction_extensions: z2.array(transactionExtensionsParser)
1499
- });
1500
- var baseActionParser = (contract, action, data) => z2.object({
1501
- account: contract === "*" ? accountParser : z2.literal(contract),
1502
- name: z2.literal(action),
1503
- data: z2.object(data),
1504
- authorization: authorizationsParser
1505
- });
1506
- var baseActionSerializedParser = (contract, action, data) => z2.object({
1507
- account: contract === "*" ? accountParser : z2.literal(contract),
1508
- name: z2.literal(action),
1509
- data: z2.string().or(z2.object(data)),
1510
- authorization: authorizationsParser
1511
- });
1512
- var webauthActionParser = (contract, action, data) => z2.object({
1513
- account: z2.literal("webauthn"),
1514
- name: z2.literal("exec"),
1515
- data: z2.object({
1516
- account: accountParser,
1517
- key: z2.object({
1518
- key: z2.array(z2.string().or(z2.object({
1519
- modulus: z2.string(),
1520
- exponent: z2.string()
1521
- }))),
1522
- user_presence: z2.number(),
1523
- rpid: z2.string()
1524
- }),
1525
- nonce: z2.number(),
1526
- permissions: authorizationsParser,
1527
- signature: z2.object({
1528
- auth_data: z2.string(),
1529
- client_json: z2.string(),
1530
- signature: z2.string()
1531
- }),
1532
- trx: rawTransactionParser.merge(
1533
- z2.object({
1534
- actions: z2.array(
1535
- baseActionSerializedParser(contract, action, data)
1536
- ).length(1)
1537
- })
1538
- )
1539
- }),
1540
- authorization: authorizationsParser
1541
- });
1542
- var singleActionTransactionParser = (contract, action, data) => {
1543
- const baseAction = baseActionParser(contract, action, data);
1544
- const webauthAction = webauthActionParser(contract, action, data);
1545
- return rawTransactionParser.merge(z2.object({
1546
- actions: z2.array(baseAction.or(webauthAction)).length(1)
1547
- }));
1176
+ const actionParser = z.object({
1177
+ account: z.string(),
1178
+ name: z.string(),
1179
+ authorization: z.array(z.object({
1180
+ actor: z.string(),
1181
+ permission: z.string()
1182
+ })),
1183
+ data: z.any(),
1184
+ hex_data: z.string().optional()
1185
+ });
1186
+ const transactionExtensionsParser = z.array(z.number().or(z.string())).optional();
1187
+ const rawTransactionParser = z.object({
1188
+ expiration: z.string(),
1189
+ ref_block_num: z.number(),
1190
+ ref_block_prefix: z.number(),
1191
+ max_net_usage_words: z.number(),
1192
+ max_cpu_usage_ms: z.number(),
1193
+ delay_sec: z.number(),
1194
+ context_free_actions: z.array(actionParser),
1195
+ transaction_extensions: z.array(transactionExtensionsParser)
1196
+ });
1197
+ const baseActionParser = (contract, action, data) => z.object({
1198
+ account: contract === "*" ? accountParser : z.literal(contract),
1199
+ name: z.literal(action),
1200
+ data: z.object(data),
1201
+ authorization: authorizationsParser
1202
+ });
1203
+ const baseActionSerializedParser = (contract, action, data) => z.object({
1204
+ account: contract === "*" ? accountParser : z.literal(contract),
1205
+ name: z.literal(action),
1206
+ data: z.string().or(z.object(data)),
1207
+ authorization: authorizationsParser
1208
+ });
1209
+ const webauthActionParser = (contract, action, data) => z.object({
1210
+ account: z.literal("webauthn"),
1211
+ name: z.literal("exec"),
1212
+ data: z.object({
1213
+ account: accountParser,
1214
+ key: z.object({
1215
+ key: z.array(z.string().or(z.object({
1216
+ modulus: z.string(),
1217
+ exponent: z.string()
1218
+ }))),
1219
+ user_presence: z.number(),
1220
+ rpid: z.string()
1221
+ }),
1222
+ nonce: z.number(),
1223
+ permissions: authorizationsParser,
1224
+ signature: z.object({
1225
+ auth_data: z.string(),
1226
+ client_json: z.string(),
1227
+ signature: z.string()
1228
+ }),
1229
+ trx: rawTransactionParser.extend({ actions: z.array(baseActionSerializedParser(contract, action, data)).length(1) })
1230
+ }),
1231
+ authorization: authorizationsParser
1232
+ });
1233
+ const singleActionTransactionParser = (contract, action, data) => {
1234
+ const baseAction = baseActionParser(contract, action, data);
1235
+ const webauthAction = webauthActionParser(contract, action, data);
1236
+ return rawTransactionParser.extend({ actions: z.array(baseAction.or(webauthAction)).length(1) });
1548
1237
  };
1549
-
1550
- // src/parsers/address.ts
1551
- import * as z4 from "zod";
1552
-
1553
- // src/parsers/auth.ts
1554
- import * as z3 from "zod";
1555
-
1556
1238
  // src/constants.ts
1557
- var WRAP_CONTRACT = "proton.wrap";
1558
- var WRAP_AUTH_ACTION = "generateauth";
1559
- var FEE_FACTOR = 1e4;
1560
- var initializeConstants = (chain) => {
1561
- const {
1562
- swapCoins,
1563
- bridgeCoins,
1564
- allEnabledCoins,
1565
- allCoins,
1566
- lendCoins,
1567
- borrowCoins,
1568
- loanCoins
1569
- } = initializeCoins(chain);
1570
- const constants = {
1571
- SWAP_CONTRACT: "proton.swaps",
1572
- VEST_CONTRACT: "vest",
1573
- DEX_CONTRACT: "dex",
1574
- FEE_FACTOR,
1575
- SWAP_URL: chain === "proton" ? "https://otc.protonswap.com" : "https://otc-test.protonswap.com",
1576
- WRAP_SERVER_URL: chain === "proton" ? "https://www.api.bloks.io/proton-wrap-public2" : "https://www.api.bloks.io/proton-wrap-testnet-public2",
1577
- WRAP_CONTRACT,
1578
- WRAP_ACTIONS: {
1579
- SAVE_ADDRESS: "saveaddress2",
1580
- DELETE_ADDRESS: "deladdress2",
1581
- WRAP_START: "wrapstart2",
1582
- WRAP_FINISH: "wrapfinish2",
1583
- WRAP_PROCESS: "wrapprocess2",
1584
- WRAP_SET_CONF: "wrapsetconf2"
1585
- },
1586
- WRAP_TABLES: {
1587
- ADDRESSES: "addresses2",
1588
- WRAPS: "wraps2"
1589
- },
1590
- ADDRESSES_INDEXES: {
1591
- BY_ACCOUNT: 2,
1592
- BY_ADDR_HASH: 3
1593
- },
1594
- WRAPS_INDEXES: {
1595
- BY_ACCOUNT: 2,
1596
- BY_STATUS: 3,
1597
- BY_WRAP_HASH: 4
1598
- },
1599
- WRAP_PROCESS_TIMER: 5e3,
1600
- FARM_CONTRACT: "yield.farms",
1601
- WEBHOOK_PERMISSION: "webhook",
1602
- PUBLIC_PERMISSION: "public",
1603
- LIGHT_PERMISSION: "light",
1604
- WRAP_AUTH_ACTION,
1605
- METAL_ENDPOINT: chain === "proton" ? "https://cirrus.metalpay.com" : "https://cirrus-dev.metalpay.com",
1606
- METAL_PROTON_ENDPOINT: chain === "proton" ? "https://identity.api.prod.metalx.com" : "https://identity.api.dev.metalx.com",
1607
- METAL_DEX_HTTP_ENDPOINT: chain === "proton" ? "https://dex.api.mainnet.metalx.com/dex" : "https://dex.api.testnet.metalx.com/dex",
1608
- METAL_DEX_WS_ENDPOINT: chain === "proton" ? "wss://dex.api.mainnet.metalx.com/dexws" : "wss://dex.api.testnet.metalx.com/dexws",
1609
- PROTON_ENDPOINTS: chain === "proton" ? [
1610
- "https://rpc.api.mainnet.metalx.com",
1611
- "https://proton.greymass.com",
1612
- "https://proton.eoscafeblock.com",
1613
- "https://proton.cryptolions.io",
1614
- "https://proton.eosusa.news"
1615
- ] : [
1616
- "https://rpc.api.testnet.metalx.com",
1617
- "https://testnet.protonchain.com"
1618
- ],
1619
- CHAIN_ID: chain === "proton" ? "384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0" : "71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd",
1620
- COINS_URL: chain === "proton" ? "https://app.metalx.com/mainnet-coins.json" : "https://app.metalx.com/testnet-coins.json",
1621
- DEX_PROCESS_SIZE: 30,
1622
- DEX_SLTPPROCESS_SIZE: 10,
1623
- MAX_PRICE: "9223372036854775806",
1624
- MAX_ITEMS_PER_PAGE_DESKTOP: 100,
1625
- MIN_PRICE: 1,
1626
- DEFAULT_DEX_SYMBOL: "XPR_XMD",
1627
- CHAIN: chain,
1628
- SWAP_COINS: swapCoins,
1629
- BRIDGE_COINS: bridgeCoins,
1630
- ALL_ENABLED_COINS: allEnabledCoins,
1631
- LEND_COINS: lendCoins,
1632
- BORROW_COINS: borrowCoins,
1633
- LOAN_COINS: loanCoins,
1634
- ALL_COINS: allCoins,
1635
- XMD_CONTRACT: "xmd.treasury",
1636
- XMD_TOKEN_CONTRACT: "xmd.token",
1637
- XMD_SYMBOL_CODE: "XMD",
1638
- XMD_DECIMALS: 6,
1639
- findBridgeCoinWalletByXtokenAndChain(xtokenSymbol, chain2) {
1640
- const bridgeCoin = constants.BRIDGE_COINS.find(
1641
- (bridgeCoin2) => bridgeCoin2.xtokenSymbol === xtokenSymbol
1642
- );
1643
- if (!bridgeCoin) return void 0;
1644
- const bridgeWallet = bridgeCoin.wallets.find(
1645
- (bridgeWallet2) => bridgeWallet2.chain === chain2
1646
- );
1647
- if (!bridgeWallet) return void 0;
1648
- return {
1649
- ...bridgeCoin,
1650
- ...bridgeWallet
1651
- };
1652
- },
1653
- findBridgeCoinWallet(coin, wallet) {
1654
- const bridgeCoin = constants.BRIDGE_COINS.find(
1655
- (bridgeCoin2) => bridgeCoin2.coin === coin
1656
- );
1657
- if (!bridgeCoin) return void 0;
1658
- const bridgeWallet = bridgeCoin.wallets.find(
1659
- (bridgeWallet2) => bridgeWallet2.wallet === wallet
1660
- );
1661
- if (!bridgeWallet) return void 0;
1662
- return {
1663
- ...bridgeCoin,
1664
- ...bridgeWallet
1665
- };
1666
- },
1667
- findBridgeCoinWalletByWallet(wallet) {
1668
- const matches = [];
1669
- constants.BRIDGE_COINS.forEach((bridgeCoin) => {
1670
- bridgeCoin.wallets.forEach((bridgeWallet) => {
1671
- if (bridgeWallet.wallet === wallet) {
1672
- matches.push({
1673
- ...bridgeCoin,
1674
- ...bridgeWallet
1675
- });
1676
- }
1677
- });
1678
- });
1679
- return matches.length === 1 ? matches[0] : void 0;
1680
- },
1681
- findBridgeCoinNetwork(coin, network) {
1682
- const bridgeCoin = constants.BRIDGE_COINS.find(
1683
- (bridgeCoin2) => bridgeCoin2.coin === coin
1684
- );
1685
- if (!bridgeCoin) return void 0;
1686
- const bridgeWallet = bridgeCoin.wallets.find(
1687
- (bridgeWallet2) => bridgeWallet2.network === network
1688
- );
1689
- if (!bridgeWallet) return void 0;
1690
- return {
1691
- ...bridgeCoin,
1692
- ...bridgeWallet
1693
- };
1694
- }
1695
- };
1696
- return constants;
1239
+ const WRAP_CONTRACT = "proton.wrap";
1240
+ const WRAP_AUTH_ACTION = "generateauth";
1241
+ const FEE_FACTOR = 1e4;
1242
+ const initializeConstants = (chain) => {
1243
+ const { swapCoins, bridgeCoins, allEnabledCoins, allCoins, lendCoins, borrowCoins, loanCoins } = initializeCoins(chain);
1244
+ const constants = {
1245
+ SWAP_CONTRACT: "proton.swaps",
1246
+ VEST_CONTRACT: "vest",
1247
+ DEX_CONTRACT: "dex",
1248
+ FEE_FACTOR,
1249
+ SWAP_URL: chain === "proton" ? "https://otc.protonswap.com" : "https://otc-test.protonswap.com",
1250
+ WRAP_SERVER_URL: chain === "proton" ? "https://www.api.bloks.io/proton-wrap-public2" : "https://www.api.bloks.io/proton-wrap-testnet-public2",
1251
+ WRAP_CONTRACT,
1252
+ WRAP_ACTIONS: {
1253
+ SAVE_ADDRESS: "saveaddress2",
1254
+ DELETE_ADDRESS: "deladdress2",
1255
+ WRAP_START: "wrapstart2",
1256
+ WRAP_FINISH: "wrapfinish2",
1257
+ WRAP_PROCESS: "wrapprocess2",
1258
+ WRAP_SET_CONF: "wrapsetconf2"
1259
+ },
1260
+ WRAP_TABLES: {
1261
+ ADDRESSES: "addresses2",
1262
+ WRAPS: "wraps2"
1263
+ },
1264
+ ADDRESSES_INDEXES: {
1265
+ BY_ACCOUNT: 2,
1266
+ BY_ADDR_HASH: 3
1267
+ },
1268
+ WRAPS_INDEXES: {
1269
+ BY_ACCOUNT: 2,
1270
+ BY_STATUS: 3,
1271
+ BY_WRAP_HASH: 4
1272
+ },
1273
+ WRAP_PROCESS_TIMER: 5e3,
1274
+ FARM_CONTRACT: "yield.farms",
1275
+ WEBHOOK_PERMISSION: "webhook",
1276
+ PUBLIC_PERMISSION: "public",
1277
+ LIGHT_PERMISSION: "light",
1278
+ WRAP_AUTH_ACTION,
1279
+ METAL_ENDPOINT: chain === "proton" ? "https://cirrus.metalpay.com" : "https://cirrus-dev.metalpay.com",
1280
+ METAL_PROTON_ENDPOINT: chain === "proton" ? "https://identity.api.prod.metalx.com" : "https://identity.api.dev.metalx.com",
1281
+ METAL_DEX_HTTP_ENDPOINT: chain === "proton" ? "https://dex.api.mainnet.metalx.com/dex" : "https://dex.api.testnet.metalx.com/dex",
1282
+ METAL_DEX_WS_ENDPOINT: chain === "proton" ? "wss://dex.api.mainnet.metalx.com/dexws" : "wss://dex.api.testnet.metalx.com/dexws",
1283
+ PROTON_ENDPOINTS: chain === "proton" ? [
1284
+ "https://rpc.api.mainnet.metalx.com",
1285
+ "https://proton.greymass.com",
1286
+ "https://proton.eoscafeblock.com",
1287
+ "https://proton.cryptolions.io",
1288
+ "https://proton.eosusa.news"
1289
+ ] : ["https://rpc.api.testnet.metalx.com", "https://testnet.protonchain.com"],
1290
+ CHAIN_ID: chain === "proton" ? "384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0" : "71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd",
1291
+ COINS_URL: chain === "proton" ? "https://app.metalx.com/mainnet-coins.json" : "https://app.metalx.com/testnet-coins.json",
1292
+ DEX_PROCESS_SIZE: 30,
1293
+ DEX_SLTPPROCESS_SIZE: 10,
1294
+ MAX_PRICE: "9223372036854775806",
1295
+ MAX_ITEMS_PER_PAGE_DESKTOP: 100,
1296
+ MIN_PRICE: 1,
1297
+ DEFAULT_DEX_SYMBOL: "XPR_XMD",
1298
+ CHAIN: chain,
1299
+ SWAP_COINS: swapCoins,
1300
+ BRIDGE_COINS: bridgeCoins,
1301
+ ALL_ENABLED_COINS: allEnabledCoins,
1302
+ LEND_COINS: lendCoins,
1303
+ BORROW_COINS: borrowCoins,
1304
+ LOAN_COINS: loanCoins,
1305
+ ALL_COINS: allCoins,
1306
+ XMD_CONTRACT: "xmd.treasury",
1307
+ XMD_TOKEN_CONTRACT: "xmd.token",
1308
+ XMD_SYMBOL_CODE: "XMD",
1309
+ XMD_DECIMALS: 6,
1310
+ findBridgeCoinWalletByXtokenAndChain(xtokenSymbol, chain) {
1311
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin) => bridgeCoin.xtokenSymbol === xtokenSymbol);
1312
+ if (!bridgeCoin) return void 0;
1313
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet) => bridgeWallet.chain === chain);
1314
+ if (!bridgeWallet) return void 0;
1315
+ return {
1316
+ ...bridgeCoin,
1317
+ ...bridgeWallet
1318
+ };
1319
+ },
1320
+ findBridgeCoinWallet(coin, wallet) {
1321
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin) => bridgeCoin.coin === coin);
1322
+ if (!bridgeCoin) return void 0;
1323
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet) => bridgeWallet.wallet === wallet);
1324
+ if (!bridgeWallet) return void 0;
1325
+ return {
1326
+ ...bridgeCoin,
1327
+ ...bridgeWallet
1328
+ };
1329
+ },
1330
+ findBridgeCoinWalletByWallet(wallet) {
1331
+ const matches = [];
1332
+ constants.BRIDGE_COINS.forEach((bridgeCoin) => {
1333
+ bridgeCoin.wallets.forEach((bridgeWallet) => {
1334
+ if (bridgeWallet.wallet === wallet) matches.push({
1335
+ ...bridgeCoin,
1336
+ ...bridgeWallet
1337
+ });
1338
+ });
1339
+ });
1340
+ return matches.length === 1 ? matches[0] : void 0;
1341
+ },
1342
+ findBridgeCoinNetwork(coin, network) {
1343
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin) => bridgeCoin.coin === coin);
1344
+ if (!bridgeCoin) return void 0;
1345
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet) => bridgeWallet.network === network);
1346
+ if (!bridgeWallet) return void 0;
1347
+ return {
1348
+ ...bridgeCoin,
1349
+ ...bridgeWallet
1350
+ };
1351
+ }
1352
+ };
1353
+ return constants;
1697
1354
  };
1698
-
1699
1355
  // src/parsers/auth.ts
1700
- var createAbstractAuthParser = (contract, action, data) => {
1701
- return z3.object({
1702
- signer: authorizationParser,
1703
- signatures: z3.array(z3.string()).length(1),
1704
- transaction: singleActionTransactionParser(contract, action, data)
1705
- });
1356
+ const createAbstractAuthParser = (contract, action, data) => {
1357
+ return z.object({
1358
+ signer: authorizationParser,
1359
+ signatures: z.array(z.string()).length(1),
1360
+ transaction: singleActionTransactionParser(contract, action, data)
1361
+ });
1706
1362
  };
1707
- var generateAuthData = {
1708
- time: z3.string(),
1709
- protonAccount: z3.string()
1363
+ const generateAuthData = {
1364
+ time: z.string(),
1365
+ protonAccount: z.string()
1710
1366
  };
1711
- var generateAuthActionsBaseParser = baseActionParser(
1712
- WRAP_CONTRACT,
1713
- WRAP_AUTH_ACTION,
1714
- generateAuthData
1715
- );
1716
- var generateAuthParser = createAbstractAuthParser(
1717
- WRAP_CONTRACT,
1718
- WRAP_AUTH_ACTION,
1719
- generateAuthData
1720
- );
1721
-
1367
+ const generateAuthActionsBaseParser = baseActionParser(WRAP_CONTRACT, WRAP_AUTH_ACTION, generateAuthData);
1368
+ const generateAuthParser = createAbstractAuthParser(WRAP_CONTRACT, WRAP_AUTH_ACTION, generateAuthData);
1722
1369
  // src/parsers/address.ts
1723
- var addressParser = z4.object({
1724
- index: z4.number(),
1725
- account: accountParser,
1726
- chain: z4.string(),
1727
- address: z4.string(),
1728
- address_hash: z4.string()
1729
- });
1730
- var generateAddressBodyParser = z4.object({
1731
- coin: z4.string(),
1732
- wallet: z4.string()
1733
- }).merge(generateAuthParser);
1734
- var generateAddressResponse = z4.object({
1735
- id: z4.string(),
1736
- // "2448834505708930950",
1737
- address: z4.string(),
1738
- // "0x617C03C1E2Bf81C062A4CEfbE312c070E1d86d18",
1739
- coin: z4.string(),
1740
- // "ETH",
1741
- wallet: z4.string(),
1742
- // "ETH",
1743
- memo: z4.string().optional()
1744
- });
1745
-
1370
+ const addressParser = z.object({
1371
+ index: z.number(),
1372
+ account: accountParser,
1373
+ chain: z.string(),
1374
+ address: z.string(),
1375
+ address_hash: z.string()
1376
+ });
1377
+ const generateAddressBodyParser = generateAuthParser.extend({
1378
+ coin: z.string(),
1379
+ wallet: z.string()
1380
+ });
1381
+ const generateAddressResponse = z.object({
1382
+ id: z.string(),
1383
+ address: z.string(),
1384
+ coin: z.string(),
1385
+ wallet: z.string(),
1386
+ memo: z.string().optional()
1387
+ });
1746
1388
  // src/parsers/currency.ts
1747
- import * as z5 from "zod";
1748
- var rateParser = z5.object({
1749
- counterCurrency: z5.string(),
1750
- price: z5.number(),
1751
- priceChangePercent: z5.number(),
1752
- marketCap: z5.number(),
1753
- volume: z5.number(),
1754
- timestamp: z5.number()
1755
- });
1756
- var exchangeRateParser = z5.object({
1757
- contract: z5.string(),
1758
- symbol: z5.string(),
1759
- rank: z5.number(),
1760
- rates: z5.array(rateParser)
1761
- });
1762
- var exchangeRatesParser = z5.array(exchangeRateParser);
1763
- var bloksRatesParser = z5.array(z5.object({
1764
- contract: z5.string(),
1765
- symbol: z5.string(),
1766
- rank: z5.number(),
1767
- rates: z5.array(rateParser)
1389
+ const rateParser = z.object({
1390
+ counterCurrency: z.string(),
1391
+ price: z.number(),
1392
+ priceChangePercent: z.number(),
1393
+ marketCap: z.number(),
1394
+ volume: z.number(),
1395
+ timestamp: z.number()
1396
+ });
1397
+ const exchangeRateParser = z.object({
1398
+ contract: z.string(),
1399
+ symbol: z.string(),
1400
+ rank: z.number(),
1401
+ rates: z.array(rateParser)
1402
+ });
1403
+ const exchangeRatesParser = z.array(exchangeRateParser);
1404
+ const bloksRatesParser = z.array(z.object({
1405
+ contract: z.string(),
1406
+ symbol: z.string(),
1407
+ rank: z.number(),
1408
+ rates: z.array(rateParser)
1768
1409
  }));
1769
-
1770
1410
  // src/parsers/deposit.ts
1771
- import * as z6 from "zod";
1772
- var Type = /* @__PURE__ */ ((Type2) => {
1773
- Type2["RECEIVE"] = "receive";
1774
- Type2["SEND"] = "send";
1775
- return Type2;
1776
- })(Type || {});
1777
- var depositBodyParser = z6.object({
1778
- id: z6.string(),
1779
- // "0x000010203121388fac991"
1780
- type: z6.nativeEnum(Type),
1781
- // "receive" or "send"
1782
- hash: z6.string(),
1783
- // "0x000010203121388fac991"
1784
- coin: z6.string(),
1785
- // "ETH" or "XPR"
1786
- wallet: z6.string(),
1787
- // "ETH-SEPOLIA" or "XPR-MAINNET"
1788
- network: z6.string()
1789
- // "erc29"
1790
- });
1791
- var metalTransactionParser = z6.object({
1792
- id: z6.string(),
1793
- // "2629304740076324677"
1794
- wallet: z6.string(),
1795
- // "ETH"
1796
- value: z6.number(),
1797
- // 10000000000000000
1798
- valueString: z6.string(),
1799
- // "10000000000000000"
1800
- address: z6.string(),
1801
- // "0x0000"
1802
- type: z6.nativeEnum(Type),
1803
- // "receive" or "send"
1804
- state: z6.string(),
1805
- // "confirmed"
1806
- confirmations: z6.number(),
1807
- // 1
1808
- hash: z6.string(),
1809
- // "b4781422be95fee8fbbf720e3e0fa9705ae834474ef25f5724cdd0f5d23211ed"
1810
- blockHash: z6.string().optional().nullable(),
1811
- // "000000000000000000089b270eb99f75107d6a9cde37ec944cb80a2998df7b43"
1812
- blockHeight: z6.number().optional().nullable()
1813
- // 643159
1814
- });
1815
-
1411
+ let Type = /* @__PURE__ */ function(Type) {
1412
+ Type["RECEIVE"] = "receive";
1413
+ Type["SEND"] = "send";
1414
+ return Type;
1415
+ }({});
1416
+ const depositBodyParser = z.object({
1417
+ id: z.string(),
1418
+ type: z.enum(Type),
1419
+ hash: z.string(),
1420
+ coin: z.string(),
1421
+ wallet: z.string(),
1422
+ network: z.string()
1423
+ });
1424
+ const metalTransactionParser = z.object({
1425
+ id: z.string(),
1426
+ wallet: z.string(),
1427
+ value: z.number(),
1428
+ valueString: z.string(),
1429
+ address: z.string(),
1430
+ type: z.enum(Type),
1431
+ state: z.string(),
1432
+ confirmations: z.number(),
1433
+ hash: z.string(),
1434
+ blockHash: z.string().optional().nullable(),
1435
+ blockHeight: z.number().optional().nullable()
1436
+ });
1816
1437
  // src/parsers/otc.ts
1817
- import * as z7 from "zod";
1818
- var otcOrderResponseParser = z7.object({
1819
- success: z7.boolean(),
1820
- transaction_id: z7.string(),
1821
- errormsg: z7.string().optional()
1822
- });
1823
- var otcQuoteBodyParser = z7.object({
1824
- baseAmount: z7.number(),
1825
- baseSymbol: z7.string(),
1826
- quoteSymbol: z7.string()
1827
- });
1828
- var otcQuoteResponseParser = z7.object({
1829
- success: z7.boolean(),
1830
- token: z7.string(),
1831
- qty: z7.number(),
1832
- errormsg: z7.string().optional()
1833
- });
1834
-
1438
+ const otcOrderResponseParser = z.object({
1439
+ success: z.boolean(),
1440
+ transaction_id: z.string(),
1441
+ errormsg: z.string().optional()
1442
+ });
1443
+ const otcQuoteBodyParser = z.object({
1444
+ baseAmount: z.number(),
1445
+ baseSymbol: z.string(),
1446
+ quoteSymbol: z.string()
1447
+ });
1448
+ const otcQuoteResponseParser = z.object({
1449
+ success: z.boolean(),
1450
+ token: z.string(),
1451
+ qty: z.number(),
1452
+ errormsg: z.string().optional()
1453
+ });
1835
1454
  // src/parsers/withdraw.ts
1836
- import * as z8 from "zod";
1837
- var withdrawData = {
1838
- from: z8.string().refine((val) => val !== WRAP_CONTRACT, {
1839
- message: `${WRAP_CONTRACT} must be receiver`
1840
- }),
1841
- to: z8.literal(WRAP_CONTRACT),
1842
- quantity: z8.string(),
1843
- memo: z8.string()
1455
+ const withdrawData = {
1456
+ from: z.string().refine((val) => val !== WRAP_CONTRACT, { error: `${WRAP_CONTRACT} must be receiver` }),
1457
+ to: z.literal(WRAP_CONTRACT),
1458
+ quantity: z.string(),
1459
+ memo: z.string()
1844
1460
  };
1845
- var withdrawBodyBaseAction = baseActionParser("*", "transfer", withdrawData);
1846
- var withdrawBodyParser = z8.object({
1847
- signer: authorizationParser,
1848
- signatures: z8.array(z8.string()).length(1),
1849
- transaction: singleActionTransactionParser("*", "transfer", withdrawData),
1850
- quoteId: z8.string(),
1851
- provider: z8.string().optional()
1852
- });
1853
- var withdrawMetalResponseParser = z8.object({
1854
- success: z8.boolean(),
1855
- id: z8.string()
1856
- });
1857
- var withdrawalFeeQuoteParser = z8.object({
1858
- quoteId: z8.string(),
1859
- estimatedFee: z8.string(),
1860
- currency: z8.string(),
1861
- network: z8.string()
1862
- });
1863
-
1461
+ const withdrawBodyBaseAction = baseActionParser("*", "transfer", withdrawData);
1462
+ const withdrawBodyParser = z.object({
1463
+ signer: authorizationParser,
1464
+ signatures: z.array(z.string()).length(1),
1465
+ transaction: singleActionTransactionParser("*", "transfer", withdrawData),
1466
+ quoteId: z.string(),
1467
+ provider: z.string().optional()
1468
+ });
1469
+ const withdrawMetalResponseParser = z.object({
1470
+ success: z.boolean(),
1471
+ id: z.string()
1472
+ });
1473
+ const withdrawalFeeQuoteParser = z.object({
1474
+ quoteId: z.string(),
1475
+ estimatedFee: z.string(),
1476
+ currency: z.string(),
1477
+ network: z.string()
1478
+ });
1864
1479
  // src/parsers/withdrawalHistory.ts
1865
- import * as z9 from "zod";
1866
- var withdrawHistoryMetalSwapParser = z9.object({
1867
- id: z9.string(),
1868
- status: z9.string(),
1869
- amount: z9.string(),
1870
- currency: z9.string(),
1871
- network: z9.string(),
1872
- created: z9.string(),
1873
- withdrawalAddress: z9.string(),
1874
- withdrawalHash: z9.string().optional()
1875
- });
1876
- var withdrawHistoryMetalResponseParser = z9.object({
1877
- swaps: z9.array(withdrawHistoryMetalSwapParser),
1878
- page: z9.number(),
1879
- pageSize: z9.number(),
1880
- numberOfElements: z9.number(),
1881
- totalPages: z9.number(),
1882
- totalElements: z9.number()
1883
- });
1884
-
1480
+ const withdrawHistoryMetalSwapParser = z.object({
1481
+ id: z.string(),
1482
+ status: z.string(),
1483
+ amount: z.string(),
1484
+ currency: z.string(),
1485
+ network: z.string(),
1486
+ created: z.string(),
1487
+ withdrawalAddress: z.string(),
1488
+ withdrawalHash: z.string().optional()
1489
+ });
1490
+ const withdrawHistoryMetalResponseParser = z.object({
1491
+ swaps: z.array(withdrawHistoryMetalSwapParser),
1492
+ page: z.number(),
1493
+ pageSize: z.number(),
1494
+ numberOfElements: z.number(),
1495
+ totalPages: z.number(),
1496
+ totalElements: z.number()
1497
+ });
1885
1498
  // src/parsers/wrap.ts
1886
- import * as z10 from "zod";
1887
- var Status = /* @__PURE__ */ ((Status2) => {
1888
- Status2["PENDING"] = "pending";
1889
- Status2["SUCCESS"] = "success";
1890
- Status2["FAIL"] = "fail";
1891
- Status2["PROCESSING"] = "processing";
1892
- return Status2;
1893
- })(Status || {});
1894
- var wrapStartParser = z10.object({
1895
- balance: ExtendedAssetParser,
1896
- id: z10.string(),
1897
- txid: z10.string(),
1898
- chain: z10.string(),
1899
- deposit_address: z10.string(),
1900
- confirmations: z10.number()
1901
- });
1902
- var wrapSetConfParser = z10.object({
1903
- wrap_hash: z10.string(),
1904
- confirmations: z10.number()
1905
- });
1906
- var wrapParser = z10.object({
1907
- index: z10.number(),
1908
- proton_account: z10.string(),
1909
- balance: ExtendedAssetParser,
1910
- id: z10.string(),
1911
- txid: z10.string(),
1912
- chain: z10.string(),
1913
- deposit_address: z10.string(),
1914
- status: z10.nativeEnum(Status),
1915
- finish_txid: z10.string(),
1916
- wrap_hash: z10.string(),
1917
- confirmations: z10.number()
1918
- });
1919
-
1499
+ let Status = /* @__PURE__ */ function(Status) {
1500
+ Status["PENDING"] = "pending";
1501
+ Status["SUCCESS"] = "success";
1502
+ Status["FAIL"] = "fail";
1503
+ Status["PROCESSING"] = "processing";
1504
+ return Status;
1505
+ }({});
1506
+ const wrapStartParser = z.object({
1507
+ balance: ExtendedAssetParser,
1508
+ id: z.string(),
1509
+ txid: z.string(),
1510
+ chain: z.string(),
1511
+ deposit_address: z.string(),
1512
+ confirmations: z.number()
1513
+ });
1514
+ const wrapSetConfParser = z.object({
1515
+ wrap_hash: z.string(),
1516
+ confirmations: z.number()
1517
+ });
1518
+ const wrapParser = z.object({
1519
+ index: z.number(),
1520
+ proton_account: z.string(),
1521
+ balance: ExtendedAssetParser,
1522
+ id: z.string(),
1523
+ txid: z.string(),
1524
+ chain: z.string(),
1525
+ deposit_address: z.string(),
1526
+ status: z.enum(Status),
1527
+ finish_txid: z.string(),
1528
+ wrap_hash: z.string(),
1529
+ confirmations: z.number()
1530
+ });
1920
1531
  // src/parsers/dex.ts
1921
- import * as z11 from "zod";
1922
- var booleanParamSchema = z11.boolean().or(z11.enum(["true", "false"]).transform((value) => value === "true"));
1923
- var createLimit = (base, max) => z11.coerce.number().default(base).refine((n) => +n > 0 && +n <= max, `Limit must be between 0 and ${max}`);
1924
- var createOffset = (base) => z11.coerce.number().default(base);
1925
- var ordinalOrderIdsParser = z11.array(z11.string()).or(z11.string()).optional().transform((oids) => {
1926
- if (!oids) return [];
1927
- return Array.isArray(oids) ? oids : [oids];
1928
- });
1929
- var marketIdsParser = z11.array(z11.coerce.number()).or(z11.coerce.number()).transform((mids) => Array.isArray(mids) ? mids : [mids]).refine((mids) => mids.length > 0, "Must provide atleast one market ID");
1930
- var contractFiltersParser = z11.array(z11.string()).or(z11.string()).optional().transform((oids) => {
1931
- if (!oids) return [];
1932
- return Array.isArray(oids) ? oids : [oids];
1933
- });
1934
- var sortDirectionEnum = z11.enum(["asc", "desc"]);
1935
- var ohlcvParser = z11.object({
1936
- time: z11.number(),
1937
- open: z11.number(),
1938
- high: z11.number(),
1939
- low: z11.number(),
1940
- close: z11.number(),
1941
- volume: z11.number(),
1942
- volume_bid: z11.number(),
1943
- count: z11.number()
1944
- });
1945
- var getOhlcvParser = z11.object({
1946
- interval: z11.string(),
1947
- from: z11.string(),
1948
- to: z11.string(),
1949
- symbol: z11.string(),
1950
- limit: createLimit(500, 2e3)
1951
- });
1952
- var getOhlcvResponseParser = z11.object({
1953
- sync: z11.number(),
1954
- data: z11.array(ohlcvParser)
1955
- });
1956
- var openOrderParser = z11.object({
1957
- block_time: z11.string(),
1958
- order_id: z11.string(),
1959
- ordinal_order_id: z11.string(),
1960
- market_id: z11.number(),
1961
- quantity_init: z11.number().optional(),
1962
- quantity_curr: z11.number(),
1963
- price: z11.number(),
1964
- account_name: z11.string(),
1965
- order_side: z11.number(),
1966
- order_type: z11.number(),
1967
- trigger_price: z11.number(),
1968
- fill_type: z11.number(),
1969
- status: z11.string(),
1970
- filled_total: z11.number().optional(),
1971
- filled_amount: z11.number().optional(),
1972
- filled_fee: z11.number().optional(),
1973
- created_at: z11.string(),
1974
- updated_at: z11.string()
1975
- });
1976
- var orderLogParser = z11.object({
1977
- seq: z11.string(),
1978
- block_num: z11.string(),
1979
- block_time: z11.string(),
1980
- order_id: z11.string(),
1981
- market_id: z11.number(),
1982
- quantity: z11.string(),
1983
- price: z11.string(),
1984
- account_name: z11.string(),
1985
- order_side: z11.number(),
1986
- order_type: z11.number(),
1987
- trigger_price: z11.string(),
1988
- fill_type: z11.number(),
1989
- status: z11.string(),
1990
- quantity_change: z11.string(),
1991
- trx_id: z11.string()
1992
- });
1993
- var orderHistoryParser = z11.object({
1994
- block_num: z11.string(),
1995
- block_time: z11.string(),
1996
- order_id: z11.string(),
1997
- ordinal_order_id: z11.string(),
1998
- market_id: z11.number(),
1999
- quantity_init: z11.number().optional(),
2000
- quantity_curr: z11.number(),
2001
- price: z11.number(),
2002
- account_name: z11.string(),
2003
- order_side: z11.number(),
2004
- order_type: z11.number(),
2005
- trigger_price: z11.number(),
2006
- fill_type: z11.number(),
2007
- status: z11.string(),
2008
- quantity_change: z11.number(),
2009
- filled_total: z11.number().optional(),
2010
- filled_amount: z11.number().optional(),
2011
- filled_fee: z11.number().optional(),
2012
- seq: z11.string(),
2013
- trx_id: z11.string()
2014
- });
2015
- var getOpenOrdersParser = z11.object({
2016
- account: z11.string(),
2017
- symbol: z11.string().optional(),
2018
- offset: createOffset(0),
2019
- limit: createLimit(100, 250),
2020
- ordinal_order_ids: ordinalOrderIdsParser
2021
- });
2022
- var getOpenOrdersResponseParser = z11.object({
2023
- sync: z11.number(),
2024
- count: z11.number(),
2025
- data: z11.array(openOrderParser)
2026
- });
2027
- var getOrderHistoryParser = z11.object({
2028
- account: z11.string(),
2029
- symbol: z11.string().optional(),
2030
- offset: createOffset(0),
2031
- limit: createLimit(100, 250),
2032
- ordinal_order_ids: ordinalOrderIdsParser,
2033
- trx_id: z11.string().optional(),
2034
- status: z11.string().optional()
2035
- });
2036
- var getOrderHistoryResponseParser = z11.object({
2037
- sync: z11.number(),
2038
- count: z11.number(),
2039
- data: z11.array(orderHistoryParser)
2040
- });
2041
- var getOrderLifecycleParser = z11.object({
2042
- order_id: z11.string().optional(),
2043
- ordinal_order_id: z11.string().optional()
2044
- });
2045
- var getOrderLifecycleResponseParser = z11.object({
2046
- sync: z11.number(),
2047
- data: z11.array(orderHistoryParser)
2048
- });
2049
- var postSubmitOrderParser = z11.object({
2050
- serialized_tx_hex: z11.string(),
2051
- signatures: z11.array(z11.string())
2052
- });
2053
- var postSubmitOrderResponseParser = z11.object({
2054
- sync: z11.number(),
2055
- data: z11.object({
2056
- trx_id: z11.string(),
2057
- block_time: z11.string(),
2058
- orders: z11.array(
2059
- z11.object({
2060
- ordinal_order_id: z11.string(),
2061
- order_id: z11.string(),
2062
- status: z11.string()
2063
- })
2064
- )
2065
- })
2066
- });
2067
- var postSerializeOrderParser = z11.object({
2068
- transaction: z11.object({
2069
- actions: z11.array(
2070
- z11.object({
2071
- account: z11.string(),
2072
- name: z11.string(),
2073
- authorization: z11.array(authorizationParser),
2074
- data: z11.record(z11.any())
2075
- })
2076
- )
2077
- })
2078
- });
2079
- var postSerializeOrderResponseParser = z11.object({
2080
- data: z11.object({
2081
- serialized_tx_hex: z11.string(),
2082
- digest_hex: z11.string()
2083
- })
2084
- });
2085
- var depthParser = z11.object({
2086
- level: z11.number(),
2087
- ask: z11.number(),
2088
- bid: z11.number(),
2089
- count: z11.number()
2090
- });
2091
- var getDepthParser = z11.object({
2092
- symbol: z11.string(),
2093
- step: z11.coerce.number(),
2094
- limit: createLimit(100, 250)
2095
- });
2096
- var getDepthResponseParser = z11.object({
2097
- sync: z11.number(),
2098
- data: z11.object({
2099
- bids: z11.array(depthParser),
2100
- asks: z11.array(depthParser)
2101
- })
2102
- });
2103
- var dailyParser = z11.object({
2104
- market_id: z11.number(),
2105
- symbol: z11.string(),
2106
- open: z11.number(),
2107
- high: z11.number(),
2108
- low: z11.number(),
2109
- close: z11.number(),
2110
- volume_bid: z11.number(),
2111
- volume_ask: z11.number(),
2112
- change_percentage: z11.number()
2113
- });
2114
- var getDailyResponseParser = z11.object({
2115
- sync: z11.number(),
2116
- data: z11.array(dailyParser)
2117
- });
2118
- var marketParser = z11.object({
2119
- market_id: z11.number(),
2120
- symbol: z11.string(),
2121
- status_code: z11.number(),
2122
- type: z11.string(),
2123
- maker_fee: z11.number(),
2124
- taker_fee: z11.number(),
2125
- order_min: z11.number(),
2126
- bid_token: z11.object({
2127
- code: z11.string(),
2128
- precision: z11.number(),
2129
- contract: z11.string(),
2130
- multiplier: z11.number()
2131
- }),
2132
- ask_token: z11.object({
2133
- code: z11.string(),
2134
- precision: z11.number(),
2135
- contract: z11.string(),
2136
- multiplier: z11.number()
2137
- })
2138
- });
2139
- var dbMarketParser = z11.object({
2140
- market_id: z11.number(),
2141
- order_min: z11.string(),
2142
- status_code: z11.number(),
2143
- ask_oracle_index: z11.string(),
2144
- bid_token_c: z11.string(),
2145
- bid_token_s: z11.string(),
2146
- bid_token_m: z11.string(),
2147
- ask_token_c: z11.string(),
2148
- ask_token_s: z11.string(),
2149
- ask_token_m: z11.string(),
2150
- created_at: z11.date(),
2151
- updated_at: z11.date()
2152
- });
2153
- var getMarketsResponseParser = z11.object({
2154
- sync: z11.number(),
2155
- data: z11.array(marketParser)
2156
- });
2157
- var tradeLogParser = z11.object({
2158
- block_num: z11.string(),
2159
- block_time: z11.string(),
2160
- trade_id: z11.string(),
2161
- market_id: z11.number(),
2162
- price: z11.string(),
2163
- bid_user: z11.string(),
2164
- bid_user_order_id: z11.string(),
2165
- bid_total: z11.string(),
2166
- bid_amount: z11.string(),
2167
- bid_fee: z11.string(),
2168
- bid_referrer: z11.string(),
2169
- bid_referrer_fee: z11.string(),
2170
- ask_user: z11.string(),
2171
- ask_user_order_id: z11.string(),
2172
- ask_total: z11.string(),
2173
- ask_amount: z11.string(),
2174
- ask_fee: z11.string(),
2175
- ask_referrer: z11.string(),
2176
- ask_referrer_fee: z11.string(),
2177
- order_side: z11.number(),
2178
- trx_id: z11.string()
2179
- });
2180
- var tradeParser = z11.object({
2181
- block_num: z11.string(),
2182
- block_time: z11.string(),
2183
- trade_id: z11.string(),
2184
- market_id: z11.number(),
2185
- price: z11.number(),
2186
- bid_user: z11.string(),
2187
- bid_user_order_id: z11.string(),
2188
- bid_user_ordinal_order_id: z11.string(),
2189
- bid_total: z11.number(),
2190
- bid_amount: z11.number(),
2191
- bid_fee: z11.number(),
2192
- bid_referrer: z11.string(),
2193
- bid_referrer_fee: z11.number(),
2194
- ask_user: z11.string(),
2195
- ask_user_order_id: z11.string(),
2196
- ask_user_ordinal_order_id: z11.string(),
2197
- ask_total: z11.number(),
2198
- ask_amount: z11.number(),
2199
- ask_fee: z11.number(),
2200
- ask_referrer: z11.string(),
2201
- ask_referrer_fee: z11.number(),
2202
- order_side: z11.number(),
2203
- trx_id: z11.string()
2204
- });
2205
- var getTradesParser = z11.object({
2206
- symbol: z11.string(),
2207
- offset: createOffset(0),
2208
- limit: createLimit(100, 250)
2209
- });
2210
- var getTradesResponseParser = z11.object({
2211
- sync: z11.number(),
2212
- data: z11.array(tradeParser)
2213
- });
2214
- var getTradeHistoryParser = z11.object({
2215
- account: z11.string(),
2216
- symbol: z11.string().optional(),
2217
- offset: createOffset(0),
2218
- ordinal_order_ids: ordinalOrderIdsParser,
2219
- limit: createLimit(100, 250)
2220
- });
2221
- var getTradeHistoryResponseParser = z11.object({
2222
- sync: z11.number(),
2223
- count: z11.number(),
2224
- data: z11.array(tradeParser)
2225
- });
2226
- var syncParser = z11.object({
2227
- sourceid: z11.number(),
2228
- block_num: z11.string(),
2229
- block_time: z11.string(),
2230
- irreversible: z11.string(),
2231
- is_master: z11.number(),
2232
- last_updated: z11.string()
2233
- });
2234
- var getSyncResponseParser = z11.object({
2235
- dbSecondsBehind: z11.number(),
2236
- chronicleSecondsBehind: z11.number(),
2237
- maxSecondsBehind: z11.number()
2238
- });
2239
- var refferalTotalParser = z11.object({
2240
- referrer: z11.string(),
2241
- market_id: z11.number(),
2242
- bid_fee: z11.number(),
2243
- bid_total: z11.number(),
2244
- ask_fee: z11.number(),
2245
- ask_total: z11.number()
2246
- });
2247
- var getReferralTotalsParser = z11.object({
2248
- referrer: z11.string()
2249
- });
2250
- var getReferralTotalsResponseParser = z11.object({
2251
- sync: z11.number(),
2252
- data: z11.array(refferalTotalParser)
2253
- });
2254
- var refferalParser = z11.object({
2255
- referred_user: z11.string()
2256
- });
2257
- var getReferralsParser = z11.object({
2258
- referrer: z11.string()
2259
- });
2260
- var getReferralsResponseParser = z11.object({
2261
- sync: z11.number(),
2262
- data: z11.array(refferalParser)
2263
- });
2264
- var leaderboardParser = z11.object({
2265
- user: z11.string(),
2266
- total: z11.number()
2267
- });
2268
- var getLeaderboardParser = z11.object({
2269
- market_ids: marketIdsParser,
2270
- from: z11.string(),
2271
- to: z11.string(),
2272
- exclude_zero_fee: booleanParamSchema.default("true")
2273
- });
2274
- var getLeaderboardResponseParser = z11.object({
2275
- sync: z11.number(),
2276
- data: z11.array(leaderboardParser)
2277
- });
2278
- var historyPartialParser = z11.object({
2279
- expiration: z11.object({ utc_seconds: z11.string() }),
2280
- ref_block_num: z11.string(),
2281
- ref_block_prefix: z11.string(),
2282
- max_net_usage_words: z11.string(),
2283
- max_cpu_usage_ms: z11.string(),
2284
- delay_sec: z11.string(),
2285
- transaction_extensions: z11.array(z11.unknown()),
2286
- signatures: z11.array(z11.string()),
2287
- context_free_data: z11.array(z11.unknown())
2288
- });
2289
- var actParser = z11.object({
2290
- account: z11.string(),
2291
- name: z11.string(),
2292
- authorization: z11.array(authorizationParser),
2293
- data: z11.any()
2294
- });
2295
- var receiptParser = z11.object({
2296
- receiver: z11.string(),
2297
- act_digest: z11.string(),
2298
- global_sequence: z11.string(),
2299
- recv_sequence: z11.string(),
2300
- auth_sequence: z11.array(
2301
- z11.object({ account: z11.string(), sequence: z11.string() })
2302
- ),
2303
- code_sequence: z11.string(),
2304
- abi_sequence: z11.string()
2305
- });
2306
- var actionTraceParser = z11.object({
2307
- action_ordinal: z11.string(),
2308
- creator_action_ordinal: z11.string(),
2309
- receipt: receiptParser,
2310
- receiver: z11.string(),
2311
- act: actParser,
2312
- context_free: z11.string(),
2313
- elapsed: z11.string(),
2314
- console: z11.string(),
2315
- account_ram_deltas: z11.array(accountRamDeltaParser),
2316
- except: z11.string(),
2317
- error_code: z11.string().nullable(),
2318
- return_value: z11.string()
2319
- });
2320
- var traceParser = z11.object({
2321
- id: z11.string(),
2322
- status: z11.string(),
2323
- cpu_usage_us: z11.string(),
2324
- net_usage_words: z11.string(),
2325
- elapsed: z11.string(),
2326
- net_usage: z11.string(),
2327
- scheduled: z11.string(),
2328
- action_traces: z11.array(actionTraceParser),
2329
- account_ram_delta: z11.array(accountRamDeltaParser).nullable(),
2330
- except: z11.string(),
2331
- error_code: z11.string().nullable(),
2332
- failed_dtrx_trace: z11.array(z11.unknown()),
2333
- partial: historyPartialParser
2334
- });
2335
- var historyTransactionParser = z11.object({
2336
- seq: z11.string(),
2337
- block_num: z11.string(),
2338
- block_time: z11.string(),
2339
- trx_id: z11.string(),
2340
- trace: z11.object({
2341
- block_num: z11.string(),
2342
- block_timestamp: z11.string(),
2343
- trace: traceParser
2344
- }),
2345
- irreversible: z11.boolean()
2346
- });
2347
- var getHistoryTransactionResponseParser = z11.object({
2348
- data: historyTransactionParser.nullable()
2349
- });
2350
- var chronicleTransactionParser = z11.object({
2351
- block_num: z11.string(),
2352
- block_timestamp: z11.string(),
2353
- trace: traceParser
2354
- });
2355
- var dbHistoryTransactionParser = z11.object({
2356
- seq: z11.string(),
2357
- block_num: z11.string(),
2358
- block_time: z11.string(),
2359
- trx_id: z11.string(),
2360
- trace: z11.any()
2361
- });
2362
- var getHistoryActionsParser = z11.object({
2363
- account: z11.string().min(1, { message: "account is required" }),
2364
- contract_filters: contractFiltersParser,
2365
- account_seq_from: z11.string().optional(),
2366
- account_seq_to: z11.string().optional(),
2367
- date_from: z11.string().optional(),
2368
- date_to: z11.string().optional(),
2369
- direction: sortDirectionEnum.optional(),
2370
- limit: createLimit(100, 250)
2371
- });
2372
- var historyActionParser = z11.object({
2373
- block_num: z11.number(),
2374
- block_time: z11.string(),
2375
- trx_id: z11.string(),
2376
- account_action_seq: z11.number(),
2377
- global_action_seq: z11.number(),
2378
- action_trace: actionTraceParser,
2379
- irreversible: z11.boolean()
2380
- });
2381
- var getHistoryActionsResponseParser = z11.object({
2382
- sync: z11.number(),
2383
- last_irreversible_block_num: z11.number(),
2384
- data: z11.array(historyActionParser)
2385
- });
2386
- var getHistoryTransfersParser = z11.object({
2387
- transfer_from: z11.string().optional(),
2388
- transfer_to: z11.string().optional(),
2389
- contract: z11.string().optional(),
2390
- symbol: z11.string().optional(),
2391
- amount_precision: z11.string().optional(),
2392
- amount_min: z11.string().optional(),
2393
- amount_max: z11.string().optional(),
2394
- date_from: z11.string().optional(),
2395
- date_to: z11.string().optional(),
2396
- global_seq_from: z11.string().optional(),
2397
- global_seq_to: z11.string().optional(),
2398
- direction: sortDirectionEnum.optional(),
2399
- limit: createLimit(100, 250)
2400
- });
2401
- var historyTransferParser = z11.object({
2402
- block_num: z11.number(),
2403
- block_time: z11.string(),
2404
- trx_id: z11.string(),
2405
- account_action_seq: z11.number(),
2406
- global_action_seq: z11.number(),
2407
- action_trace: actionTraceParser,
2408
- irreversible: z11.boolean()
2409
- });
2410
- var getHistoryTransfersResponseParser = z11.object({
2411
- sync: z11.number(),
2412
- last_irreversible_block_num: z11.number(),
2413
- data: z11.array(historyTransferParser)
2414
- });
2415
- var marketOpenOrdersBalanceParser = z11.object({
2416
- market_id: z11.number(),
2417
- bid_token_quantity: z11.number(),
2418
- bid_token: z11.string(),
2419
- ask_token_quantity: z11.number(),
2420
- ask_token: z11.string()
2421
- });
2422
- var getOpenOrdersBalancesResponseParser = z11.object({
2423
- sync: z11.number(),
2424
- data: z11.array(marketOpenOrdersBalanceParser)
2425
- });
2426
- var orderType = /* @__PURE__ */ ((orderType2) => {
2427
- orderType2[orderType2["ORDERBOOK"] = 0] = "ORDERBOOK";
2428
- orderType2[orderType2["LIMIT"] = 1] = "LIMIT";
2429
- orderType2[orderType2["STOPLOSS"] = 2] = "STOPLOSS";
2430
- orderType2[orderType2["TAKEPROFIT"] = 3] = "TAKEPROFIT";
2431
- return orderType2;
2432
- })(orderType || {});
2433
- var orderSide = /* @__PURE__ */ ((orderSide2) => {
2434
- orderSide2[orderSide2["INVALID"] = 0] = "INVALID";
2435
- orderSide2[orderSide2["BUY"] = 1] = "BUY";
2436
- orderSide2[orderSide2["SELL"] = 2] = "SELL";
2437
- return orderSide2;
2438
- })(orderSide || {});
2439
- var fillType = /* @__PURE__ */ ((fillType2) => {
2440
- fillType2[fillType2["GTC"] = 0] = "GTC";
2441
- fillType2[fillType2["IOC"] = 1] = "IOC";
2442
- fillType2[fillType2["POST_ONLY"] = 2] = "POST_ONLY";
2443
- return fillType2;
2444
- })(fillType || {});
2445
- var logStatus = /* @__PURE__ */ ((logStatus2) => {
2446
- logStatus2["CREATE"] = "create";
2447
- logStatus2["UPDATE"] = "update";
2448
- logStatus2["TRANSFER"] = "transfer";
2449
- logStatus2["CANCEL"] = "cancel";
2450
- logStatus2["DELETE"] = "delete";
2451
- return logStatus2;
2452
- })(logStatus || {});
2453
- var ITopics = /* @__PURE__ */ ((ITopics2) => {
2454
- ITopics2["TRADES"] = "TRADES";
2455
- ITopics2["ORDERS"] = "ORDERS";
2456
- return ITopics2;
2457
- })(ITopics || {});
2458
- var TOPICS = {
2459
- ["TRADES" /* TRADES */]: {
2460
- topic: "TRADES" /* TRADES */
2461
- },
2462
- ["ORDERS" /* ORDERS */]: {
2463
- topic: "ORDERS" /* ORDERS */
2464
- }
1532
+ const booleanParamSchema = z.boolean().or(z.enum(["true", "false"]).transform((value) => value === "true"));
1533
+ const createLimit = (base, max) => z.coerce.number().default(base).refine((n) => +n > 0 && +n <= max, { error: `Limit must be between 0 and ${max}` });
1534
+ const createOffset = (base) => z.coerce.number().default(base);
1535
+ const ordinalOrderIdsParser = z.array(z.string()).or(z.string()).optional().transform((oids) => {
1536
+ if (!oids) return [];
1537
+ return Array.isArray(oids) ? oids : [oids];
1538
+ });
1539
+ const marketIdsParser = z.array(z.coerce.number()).or(z.coerce.number()).transform((mids) => Array.isArray(mids) ? mids : [mids]).refine((mids) => mids.length > 0, { error: "Must provide atleast one market ID" });
1540
+ const contractFiltersParser = z.array(z.string()).or(z.string()).optional().transform((oids) => {
1541
+ if (!oids) return [];
1542
+ return Array.isArray(oids) ? oids : [oids];
1543
+ });
1544
+ const sortDirectionEnum = z.enum(["asc", "desc"]);
1545
+ /**
1546
+ * OHLCV
1547
+ */
1548
+ const ohlcvParser = z.object({
1549
+ time: z.number(),
1550
+ open: z.number(),
1551
+ high: z.number(),
1552
+ low: z.number(),
1553
+ close: z.number(),
1554
+ volume: z.number(),
1555
+ volume_bid: z.number(),
1556
+ count: z.number()
1557
+ });
1558
+ const getOhlcvParser = z.object({
1559
+ interval: z.string(),
1560
+ from: z.string(),
1561
+ to: z.string(),
1562
+ symbol: z.string(),
1563
+ limit: createLimit(500, 2e3)
1564
+ });
1565
+ const getOhlcvResponseParser = z.object({
1566
+ sync: z.number(),
1567
+ data: z.array(ohlcvParser)
1568
+ });
1569
+ /**
1570
+ * Order History
1571
+ */
1572
+ const openOrderParser = z.object({
1573
+ block_time: z.string(),
1574
+ order_id: z.string(),
1575
+ ordinal_order_id: z.string(),
1576
+ market_id: z.number(),
1577
+ quantity_init: z.number().optional(),
1578
+ quantity_curr: z.number(),
1579
+ price: z.number(),
1580
+ account_name: z.string(),
1581
+ order_side: z.number(),
1582
+ order_type: z.number(),
1583
+ trigger_price: z.number(),
1584
+ fill_type: z.number(),
1585
+ status: z.string(),
1586
+ filled_total: z.number().optional(),
1587
+ filled_amount: z.number().optional(),
1588
+ filled_fee: z.number().optional(),
1589
+ created_at: z.string(),
1590
+ updated_at: z.string()
1591
+ });
1592
+ const orderLogParser = z.object({
1593
+ seq: z.string(),
1594
+ block_num: z.string(),
1595
+ block_time: z.string(),
1596
+ order_id: z.string(),
1597
+ market_id: z.number(),
1598
+ quantity: z.string(),
1599
+ price: z.string(),
1600
+ account_name: z.string(),
1601
+ order_side: z.number(),
1602
+ order_type: z.number(),
1603
+ trigger_price: z.string(),
1604
+ fill_type: z.number(),
1605
+ status: z.string(),
1606
+ quantity_change: z.string(),
1607
+ trx_id: z.string()
1608
+ });
1609
+ const orderHistoryParser = z.object({
1610
+ block_num: z.string(),
1611
+ block_time: z.string(),
1612
+ order_id: z.string(),
1613
+ ordinal_order_id: z.string(),
1614
+ market_id: z.number(),
1615
+ quantity_init: z.number().optional(),
1616
+ quantity_curr: z.number(),
1617
+ price: z.number(),
1618
+ account_name: z.string(),
1619
+ order_side: z.number(),
1620
+ order_type: z.number(),
1621
+ trigger_price: z.number(),
1622
+ fill_type: z.number(),
1623
+ status: z.string(),
1624
+ quantity_change: z.number(),
1625
+ filled_total: z.number().optional(),
1626
+ filled_amount: z.number().optional(),
1627
+ filled_fee: z.number().optional(),
1628
+ seq: z.string(),
1629
+ trx_id: z.string()
1630
+ });
1631
+ const getOpenOrdersParser = z.object({
1632
+ account: z.string(),
1633
+ symbol: z.string().optional(),
1634
+ offset: createOffset(0),
1635
+ limit: createLimit(100, 250),
1636
+ ordinal_order_ids: ordinalOrderIdsParser
1637
+ });
1638
+ const getOpenOrdersResponseParser = z.object({
1639
+ sync: z.number(),
1640
+ count: z.number(),
1641
+ data: z.array(openOrderParser)
1642
+ });
1643
+ const getOrderHistoryParser = z.object({
1644
+ account: z.string(),
1645
+ symbol: z.string().optional(),
1646
+ offset: createOffset(0),
1647
+ limit: createLimit(100, 250),
1648
+ ordinal_order_ids: ordinalOrderIdsParser,
1649
+ trx_id: z.string().optional(),
1650
+ status: z.string().optional()
1651
+ });
1652
+ const getOrderHistoryResponseParser = z.object({
1653
+ sync: z.number(),
1654
+ count: z.number(),
1655
+ data: z.array(orderHistoryParser)
1656
+ });
1657
+ const getOrderLifecycleParser = z.object({
1658
+ order_id: z.string().optional(),
1659
+ ordinal_order_id: z.string().optional()
1660
+ });
1661
+ const getOrderLifecycleResponseParser = z.object({
1662
+ sync: z.number(),
1663
+ data: z.array(orderHistoryParser)
1664
+ });
1665
+ /**
1666
+ * Submit Order
1667
+ */
1668
+ const postSubmitOrderParser = z.object({
1669
+ serialized_tx_hex: z.string(),
1670
+ signatures: z.array(z.string())
1671
+ });
1672
+ const postSubmitOrderResponseParser = z.object({
1673
+ sync: z.number(),
1674
+ data: z.object({
1675
+ trx_id: z.string(),
1676
+ block_time: z.string(),
1677
+ orders: z.array(z.object({
1678
+ ordinal_order_id: z.string(),
1679
+ order_id: z.string(),
1680
+ status: z.string()
1681
+ }))
1682
+ })
1683
+ });
1684
+ /**
1685
+ * Serialize Order
1686
+ */
1687
+ const postSerializeOrderParser = z.object({ transaction: z.object({ actions: z.array(z.object({
1688
+ account: z.string(),
1689
+ name: z.string(),
1690
+ authorization: z.array(authorizationParser),
1691
+ data: z.record(z.string(), z.any())
1692
+ })) }) });
1693
+ const postSerializeOrderResponseParser = z.object({ data: z.object({
1694
+ serialized_tx_hex: z.string(),
1695
+ digest_hex: z.string()
1696
+ }) });
1697
+ /**
1698
+ * Depth
1699
+ */
1700
+ const depthParser = z.object({
1701
+ level: z.number(),
1702
+ ask: z.number(),
1703
+ bid: z.number(),
1704
+ count: z.number()
1705
+ });
1706
+ const getDepthParser = z.object({
1707
+ symbol: z.string(),
1708
+ step: z.coerce.number(),
1709
+ limit: createLimit(100, 250)
1710
+ });
1711
+ const getDepthResponseParser = z.object({
1712
+ sync: z.number(),
1713
+ data: z.object({
1714
+ bids: z.array(depthParser),
1715
+ asks: z.array(depthParser)
1716
+ })
1717
+ });
1718
+ /**
1719
+ * Daily
1720
+ */
1721
+ const dailyParser = z.object({
1722
+ market_id: z.number(),
1723
+ symbol: z.string(),
1724
+ open: z.number(),
1725
+ high: z.number(),
1726
+ low: z.number(),
1727
+ close: z.number(),
1728
+ volume_bid: z.number(),
1729
+ volume_ask: z.number(),
1730
+ change_percentage: z.number()
1731
+ });
1732
+ const getDailyResponseParser = z.object({
1733
+ sync: z.number(),
1734
+ data: z.array(dailyParser)
1735
+ });
1736
+ /**
1737
+ * Markets
1738
+ */
1739
+ const marketParser = z.object({
1740
+ market_id: z.number(),
1741
+ symbol: z.string(),
1742
+ status_code: z.number(),
1743
+ type: z.string(),
1744
+ maker_fee: z.number(),
1745
+ taker_fee: z.number(),
1746
+ order_min: z.number(),
1747
+ bid_token: z.object({
1748
+ code: z.string(),
1749
+ precision: z.number(),
1750
+ contract: z.string(),
1751
+ multiplier: z.number()
1752
+ }),
1753
+ ask_token: z.object({
1754
+ code: z.string(),
1755
+ precision: z.number(),
1756
+ contract: z.string(),
1757
+ multiplier: z.number()
1758
+ })
1759
+ });
1760
+ const dbMarketParser = z.object({
1761
+ market_id: z.number(),
1762
+ order_min: z.string(),
1763
+ status_code: z.number(),
1764
+ ask_oracle_index: z.string(),
1765
+ bid_token_c: z.string(),
1766
+ bid_token_s: z.string(),
1767
+ bid_token_m: z.string(),
1768
+ ask_token_c: z.string(),
1769
+ ask_token_s: z.string(),
1770
+ ask_token_m: z.string(),
1771
+ created_at: z.date(),
1772
+ updated_at: z.date()
1773
+ });
1774
+ const getMarketsResponseParser = z.object({
1775
+ sync: z.number(),
1776
+ data: z.array(marketParser)
1777
+ });
1778
+ /**
1779
+ * Trades
1780
+ */
1781
+ const tradeLogParser = z.object({
1782
+ block_num: z.string(),
1783
+ block_time: z.string(),
1784
+ trade_id: z.string(),
1785
+ market_id: z.number(),
1786
+ price: z.string(),
1787
+ bid_user: z.string(),
1788
+ bid_user_order_id: z.string(),
1789
+ bid_total: z.string(),
1790
+ bid_amount: z.string(),
1791
+ bid_fee: z.string(),
1792
+ bid_referrer: z.string(),
1793
+ bid_referrer_fee: z.string(),
1794
+ ask_user: z.string(),
1795
+ ask_user_order_id: z.string(),
1796
+ ask_total: z.string(),
1797
+ ask_amount: z.string(),
1798
+ ask_fee: z.string(),
1799
+ ask_referrer: z.string(),
1800
+ ask_referrer_fee: z.string(),
1801
+ order_side: z.number(),
1802
+ trx_id: z.string()
1803
+ });
1804
+ const tradeParser = z.object({
1805
+ block_num: z.string(),
1806
+ block_time: z.string(),
1807
+ trade_id: z.string(),
1808
+ market_id: z.number(),
1809
+ price: z.number(),
1810
+ bid_user: z.string(),
1811
+ bid_user_order_id: z.string(),
1812
+ bid_user_ordinal_order_id: z.string(),
1813
+ bid_total: z.number(),
1814
+ bid_amount: z.number(),
1815
+ bid_fee: z.number(),
1816
+ bid_referrer: z.string(),
1817
+ bid_referrer_fee: z.number(),
1818
+ ask_user: z.string(),
1819
+ ask_user_order_id: z.string(),
1820
+ ask_user_ordinal_order_id: z.string(),
1821
+ ask_total: z.number(),
1822
+ ask_amount: z.number(),
1823
+ ask_fee: z.number(),
1824
+ ask_referrer: z.string(),
1825
+ ask_referrer_fee: z.number(),
1826
+ order_side: z.number(),
1827
+ trx_id: z.string()
1828
+ });
1829
+ const getTradesParser = z.object({
1830
+ symbol: z.string(),
1831
+ offset: createOffset(0),
1832
+ limit: createLimit(100, 250)
1833
+ });
1834
+ const getTradesResponseParser = z.object({
1835
+ sync: z.number(),
1836
+ data: z.array(tradeParser)
1837
+ });
1838
+ const getTradeHistoryParser = z.object({
1839
+ account: z.string(),
1840
+ symbol: z.string().optional(),
1841
+ offset: createOffset(0),
1842
+ ordinal_order_ids: ordinalOrderIdsParser,
1843
+ limit: createLimit(100, 250)
1844
+ });
1845
+ const getTradeHistoryResponseParser = z.object({
1846
+ sync: z.number(),
1847
+ count: z.number(),
1848
+ data: z.array(tradeParser)
1849
+ });
1850
+ /**
1851
+ * SYNC
1852
+ */
1853
+ const syncParser = z.object({
1854
+ sourceid: z.number(),
1855
+ block_num: z.string(),
1856
+ block_time: z.string(),
1857
+ irreversible: z.string(),
1858
+ is_master: z.number(),
1859
+ last_updated: z.string()
1860
+ });
1861
+ const getSyncResponseParser = z.object({
1862
+ dbSecondsBehind: z.number(),
1863
+ chronicleSecondsBehind: z.number(),
1864
+ maxSecondsBehind: z.number()
1865
+ });
1866
+ /**
1867
+ * Referral Totals
1868
+ */
1869
+ const refferalTotalParser = z.object({
1870
+ referrer: z.string(),
1871
+ market_id: z.number(),
1872
+ bid_fee: z.number(),
1873
+ bid_total: z.number(),
1874
+ ask_fee: z.number(),
1875
+ ask_total: z.number()
1876
+ });
1877
+ const getReferralTotalsParser = z.object({ referrer: z.string() });
1878
+ const getReferralTotalsResponseParser = z.object({
1879
+ sync: z.number(),
1880
+ data: z.array(refferalTotalParser)
1881
+ });
1882
+ /**
1883
+ * Referrals
1884
+ */
1885
+ const refferalParser = z.object({ referred_user: z.string() });
1886
+ const getReferralsParser = z.object({ referrer: z.string() });
1887
+ const getReferralsResponseParser = z.object({
1888
+ sync: z.number(),
1889
+ data: z.array(refferalParser)
1890
+ });
1891
+ /**
1892
+ * Leaderboard
1893
+ */
1894
+ const leaderboardParser = z.object({
1895
+ user: z.string(),
1896
+ total: z.number()
1897
+ });
1898
+ const getLeaderboardParser = z.object({
1899
+ market_ids: marketIdsParser,
1900
+ from: z.string(),
1901
+ to: z.string(),
1902
+ exclude_zero_fee: booleanParamSchema.prefault("true")
1903
+ });
1904
+ const getLeaderboardResponseParser = z.object({
1905
+ sync: z.number(),
1906
+ data: z.array(leaderboardParser)
1907
+ });
1908
+ /**
1909
+ * History Transaction
1910
+ */
1911
+ const historyPartialParser = z.object({
1912
+ expiration: z.object({ utc_seconds: z.string() }),
1913
+ ref_block_num: z.string(),
1914
+ ref_block_prefix: z.string(),
1915
+ max_net_usage_words: z.string(),
1916
+ max_cpu_usage_ms: z.string(),
1917
+ delay_sec: z.string(),
1918
+ transaction_extensions: z.array(z.unknown()),
1919
+ signatures: z.array(z.string()),
1920
+ context_free_data: z.array(z.unknown())
1921
+ });
1922
+ const actParser = z.object({
1923
+ account: z.string(),
1924
+ name: z.string(),
1925
+ authorization: z.array(authorizationParser),
1926
+ data: z.any()
1927
+ });
1928
+ const receiptParser = z.object({
1929
+ receiver: z.string(),
1930
+ act_digest: z.string(),
1931
+ global_sequence: z.string(),
1932
+ recv_sequence: z.string(),
1933
+ auth_sequence: z.array(z.object({
1934
+ account: z.string(),
1935
+ sequence: z.string()
1936
+ })),
1937
+ code_sequence: z.string(),
1938
+ abi_sequence: z.string()
1939
+ });
1940
+ const actionTraceParser = z.object({
1941
+ action_ordinal: z.string(),
1942
+ creator_action_ordinal: z.string(),
1943
+ receipt: receiptParser,
1944
+ receiver: z.string(),
1945
+ act: actParser,
1946
+ context_free: z.string(),
1947
+ elapsed: z.string(),
1948
+ console: z.string(),
1949
+ account_ram_deltas: z.array(accountRamDeltaParser),
1950
+ except: z.string(),
1951
+ error_code: z.string().nullable(),
1952
+ return_value: z.string()
1953
+ });
1954
+ const traceParser = z.object({
1955
+ id: z.string(),
1956
+ status: z.string(),
1957
+ cpu_usage_us: z.string(),
1958
+ net_usage_words: z.string(),
1959
+ elapsed: z.string(),
1960
+ net_usage: z.string(),
1961
+ scheduled: z.string(),
1962
+ action_traces: z.array(actionTraceParser),
1963
+ account_ram_delta: z.array(accountRamDeltaParser).nullable(),
1964
+ except: z.string(),
1965
+ error_code: z.string().nullable(),
1966
+ failed_dtrx_trace: z.array(z.unknown()),
1967
+ partial: historyPartialParser
1968
+ });
1969
+ const historyTransactionParser = z.object({
1970
+ seq: z.string(),
1971
+ block_num: z.string(),
1972
+ block_time: z.string(),
1973
+ trx_id: z.string(),
1974
+ trace: z.object({
1975
+ block_num: z.string(),
1976
+ block_timestamp: z.string(),
1977
+ trace: traceParser
1978
+ }),
1979
+ irreversible: z.boolean()
1980
+ });
1981
+ const getHistoryTransactionResponseParser = z.object({ data: historyTransactionParser.nullable() });
1982
+ const chronicleTransactionParser = z.object({
1983
+ block_num: z.string(),
1984
+ block_timestamp: z.string(),
1985
+ trace: traceParser
1986
+ });
1987
+ const dbHistoryTransactionParser = z.object({
1988
+ seq: z.string(),
1989
+ block_num: z.string(),
1990
+ block_time: z.string(),
1991
+ trx_id: z.string(),
1992
+ trace: z.any()
1993
+ });
1994
+ /**
1995
+ * History Actions
1996
+ */
1997
+ const getHistoryActionsParser = z.object({
1998
+ account: z.string().min(1, { error: "account is required" }),
1999
+ contract_filters: contractFiltersParser,
2000
+ account_seq_from: z.string().optional(),
2001
+ account_seq_to: z.string().optional(),
2002
+ date_from: z.string().optional(),
2003
+ date_to: z.string().optional(),
2004
+ direction: sortDirectionEnum.optional(),
2005
+ limit: createLimit(100, 250)
2006
+ });
2007
+ const historyActionParser = z.object({
2008
+ block_num: z.number(),
2009
+ block_time: z.string(),
2010
+ trx_id: z.string(),
2011
+ account_action_seq: z.number(),
2012
+ global_action_seq: z.number(),
2013
+ action_trace: actionTraceParser,
2014
+ irreversible: z.boolean()
2015
+ });
2016
+ const getHistoryActionsResponseParser = z.object({
2017
+ sync: z.number(),
2018
+ last_irreversible_block_num: z.number(),
2019
+ data: z.array(historyActionParser)
2020
+ });
2021
+ /**
2022
+ * History transfers
2023
+ */
2024
+ const getHistoryTransfersParser = z.object({
2025
+ transfer_from: z.string().optional(),
2026
+ transfer_to: z.string().optional(),
2027
+ contract: z.string().optional(),
2028
+ symbol: z.string().optional(),
2029
+ amount_precision: z.string().optional(),
2030
+ amount_min: z.string().optional(),
2031
+ amount_max: z.string().optional(),
2032
+ date_from: z.string().optional(),
2033
+ date_to: z.string().optional(),
2034
+ global_seq_from: z.string().optional(),
2035
+ global_seq_to: z.string().optional(),
2036
+ direction: sortDirectionEnum.optional(),
2037
+ limit: createLimit(100, 250)
2038
+ });
2039
+ const historyTransferParser = z.object({
2040
+ block_num: z.number(),
2041
+ block_time: z.string(),
2042
+ trx_id: z.string(),
2043
+ account_action_seq: z.number(),
2044
+ global_action_seq: z.number(),
2045
+ action_trace: actionTraceParser,
2046
+ irreversible: z.boolean()
2047
+ });
2048
+ const getHistoryTransfersResponseParser = z.object({
2049
+ sync: z.number(),
2050
+ last_irreversible_block_num: z.number(),
2051
+ data: z.array(historyTransferParser)
2052
+ });
2053
+ /**
2054
+ * Open orders Balances
2055
+ */
2056
+ const marketOpenOrdersBalanceParser = z.object({
2057
+ market_id: z.number(),
2058
+ bid_token_quantity: z.number(),
2059
+ bid_token: z.string(),
2060
+ ask_token_quantity: z.number(),
2061
+ ask_token: z.string()
2062
+ });
2063
+ const getOpenOrdersBalancesResponseParser = z.object({
2064
+ sync: z.number(),
2065
+ data: z.array(marketOpenOrdersBalanceParser)
2066
+ });
2067
+ /**
2068
+ * Basic Types
2069
+ */
2070
+ let orderType = /* @__PURE__ */ function(orderType) {
2071
+ orderType[orderType["ORDERBOOK"] = 0] = "ORDERBOOK";
2072
+ orderType[orderType["LIMIT"] = 1] = "LIMIT";
2073
+ orderType[orderType["STOPLOSS"] = 2] = "STOPLOSS";
2074
+ orderType[orderType["TAKEPROFIT"] = 3] = "TAKEPROFIT";
2075
+ return orderType;
2076
+ }({});
2077
+ let orderSide = /* @__PURE__ */ function(orderSide) {
2078
+ orderSide[orderSide["INVALID"] = 0] = "INVALID";
2079
+ orderSide[orderSide["BUY"] = 1] = "BUY";
2080
+ orderSide[orderSide["SELL"] = 2] = "SELL";
2081
+ return orderSide;
2082
+ }({});
2083
+ let fillType = /* @__PURE__ */ function(fillType) {
2084
+ fillType[fillType["GTC"] = 0] = "GTC";
2085
+ fillType[fillType["IOC"] = 1] = "IOC";
2086
+ fillType[fillType["POST_ONLY"] = 2] = "POST_ONLY";
2087
+ return fillType;
2088
+ }({});
2089
+ let logStatus = /* @__PURE__ */ function(logStatus) {
2090
+ logStatus["CREATE"] = "create";
2091
+ logStatus["UPDATE"] = "update";
2092
+ logStatus["TRANSFER"] = "transfer";
2093
+ logStatus["CANCEL"] = "cancel";
2094
+ logStatus["DELETE"] = "delete";
2095
+ return logStatus;
2096
+ }({});
2097
+ let ITopics = /* @__PURE__ */ function(ITopics) {
2098
+ ITopics["TRADES"] = "TRADES";
2099
+ ITopics["ORDERS"] = "ORDERS";
2100
+ return ITopics;
2101
+ }({});
2102
+ const TOPICS = {
2103
+ ["TRADES"]: { topic: "TRADES" },
2104
+ ["ORDERS"]: { topic: "ORDERS" }
2465
2105
  };
2466
-
2467
2106
  // src/parsers/login.ts
2468
- import * as z12 from "zod";
2469
- var loginAccountParamsV3Parser = z12.object({
2470
- email: z12.string().optional(),
2471
- verificationCode: z12.string().optional()
2472
- }).merge(generateAuthParser);
2473
-
2107
+ const loginAccountParamsV3Parser = generateAuthParser.extend({
2108
+ email: z.string().optional(),
2109
+ verificationCode: z.string().optional()
2110
+ });
2474
2111
  // src/utils.ts
2475
- var isSameToken = (token1, token2) => {
2476
- return token1.xtokenSymbol === token2.xtokenSymbol && token1.xtokenPrecision === token2.xtokenPrecision && token1.xtokenContract === token2.xtokenContract;
2112
+ const isSameToken = (token1, token2) => {
2113
+ return token1.xtokenSymbol === token2.xtokenSymbol && token1.xtokenPrecision === token2.xtokenPrecision && token1.xtokenContract === token2.xtokenContract;
2477
2114
  };
2478
- var median = (numbers) => {
2479
- const sorted = numbers.slice().sort((a, b) => a - b);
2480
- const middle = Math.floor(sorted.length / 2);
2481
- if (sorted.length % 2 === 0) {
2482
- return (sorted[middle - 1] + sorted[middle]) / 2;
2483
- }
2484
- return sorted[middle];
2115
+ const median = (numbers) => {
2116
+ const sorted = numbers.slice().sort((a, b) => a - b);
2117
+ const middle = Math.floor(sorted.length / 2);
2118
+ if (sorted.length % 2 === 0) return (sorted[middle - 1] + sorted[middle]) / 2;
2119
+ return sorted[middle];
2485
2120
  };
2486
-
2487
2121
  // src/graph.ts
2488
- import cloneDeep from "lodash.clonedeep";
2489
2122
  var INode = class {
2490
- constructor(key, data) {
2491
- this.key = key;
2492
- if (data) {
2493
- this.data = data;
2494
- }
2495
- }
2496
- key;
2497
- data = {};
2123
+ constructor(key, data) {
2124
+ this.key = key;
2125
+ this.data = {};
2126
+ if (data) this.data = data;
2127
+ }
2498
2128
  };
2499
2129
  var ILink = class {
2500
- constructor(from, to, data) {
2501
- this.from = from;
2502
- this.to = to;
2503
- if (data) {
2504
- this.data = data;
2505
- }
2506
- }
2507
- from;
2508
- to;
2509
- data = {};
2130
+ constructor(from, to, data) {
2131
+ this.from = from;
2132
+ this.to = to;
2133
+ this.data = {};
2134
+ if (data) this.data = data;
2135
+ }
2510
2136
  };
2511
2137
  var Graph = class {
2512
- nodes = [];
2513
- links = [];
2514
- lastPathFound = [];
2515
- isEquals = (a, b) => a.key === b.key;
2516
- addNode(k, v) {
2517
- const node = this.findNode(k);
2518
- if (!node) {
2519
- this.nodes.push(new INode(k, v));
2520
- }
2521
- }
2522
- addNodes(...nodes) {
2523
- nodes.forEach((node) => typeof node === "string" ? this.addNode(node) : this.addNode(node[0], node[1]));
2524
- }
2525
- findNode(k) {
2526
- const inode = new INode(k);
2527
- return this.nodes.find((node) => this.isEquals(node, inode));
2528
- }
2529
- findNodes(...keys) {
2530
- return keys.map((k) => this.findNode(k));
2531
- }
2532
- requireFindNodes(...keys) {
2533
- const nodes = this.findNodes(...keys);
2534
- if (nodes.some((n) => n === void 0)) {
2535
- throw new Error("One of the nodes does not exist");
2536
- }
2537
- return nodes;
2538
- }
2539
- addLink(nodeA, nodeB, data) {
2540
- const [inodeA, inodeB] = this.requireFindNodes(nodeA, nodeB);
2541
- this.links.push(new ILink(inodeA, inodeB, data));
2542
- }
2543
- addLinks(...links) {
2544
- links.forEach((link) => this.addLink(...link));
2545
- }
2546
- /**
2547
- * Get all nodes linked
2548
- * to from `node`.
2549
- */
2550
- findLinkedNodes(node) {
2551
- return this.links.reduce((acc, link) => {
2552
- if (this.isEquals(link.from, node)) {
2553
- acc.push(link.to);
2554
- }
2555
- return acc;
2556
- }, []);
2557
- }
2558
- findAllPaths(from, to) {
2559
- const allPaths = [];
2560
- const [fromNode, toNode] = this.requireFindNodes(from, to);
2561
- const path = [fromNode];
2562
- let seen = /* @__PURE__ */ new Set();
2563
- const stuck = (x) => {
2564
- if (this.isEquals(x, toNode)) {
2565
- return false;
2566
- }
2567
- for (const y of this.findLinkedNodes(x)) {
2568
- if (!seen.has(y.key)) {
2569
- seen.add(y.key);
2570
- if (!stuck(y)) {
2571
- return false;
2572
- }
2573
- }
2574
- }
2575
- return true;
2576
- };
2577
- const search = (x) => {
2578
- if (this.isEquals(x, toNode)) {
2579
- allPaths.push(cloneDeep(path));
2580
- return;
2581
- }
2582
- seen = new Set(path.map((p) => p.key));
2583
- if (stuck(x)) {
2584
- return;
2585
- }
2586
- for (const y of this.findLinkedNodes(x)) {
2587
- if (!path.includes(y)) {
2588
- path.push(y);
2589
- search(y);
2590
- path.pop();
2591
- }
2592
- }
2593
- };
2594
- search(fromNode);
2595
- return allPaths;
2596
- }
2138
+ constructor() {
2139
+ this.nodes = [];
2140
+ this.links = [];
2141
+ this.lastPathFound = [];
2142
+ this.isEquals = (a, b) => a.key === b.key;
2143
+ }
2144
+ addNode(k, v) {
2145
+ if (!this.findNode(k)) this.nodes.push(new INode(k, v));
2146
+ }
2147
+ addNodes(...nodes) {
2148
+ nodes.forEach((node) => typeof node === "string" ? this.addNode(node) : this.addNode(node[0], node[1]));
2149
+ }
2150
+ findNode(k) {
2151
+ const inode = new INode(k);
2152
+ return this.nodes.find((node) => this.isEquals(node, inode));
2153
+ }
2154
+ findNodes(...keys) {
2155
+ return keys.map((k) => this.findNode(k));
2156
+ }
2157
+ requireFindNodes(...keys) {
2158
+ const nodes = this.findNodes(...keys);
2159
+ if (nodes.some((n) => n === void 0)) throw new Error("One of the nodes does not exist");
2160
+ return nodes;
2161
+ }
2162
+ addLink(nodeA, nodeB, data) {
2163
+ const [inodeA, inodeB] = this.requireFindNodes(nodeA, nodeB);
2164
+ this.links.push(new ILink(inodeA, inodeB, data));
2165
+ }
2166
+ addLinks(...links) {
2167
+ links.forEach((link) => this.addLink(...link));
2168
+ }
2169
+ /**
2170
+ * Get all nodes linked
2171
+ * to from `node`.
2172
+ */
2173
+ findLinkedNodes(node) {
2174
+ return this.links.reduce((acc, link) => {
2175
+ if (this.isEquals(link.from, node)) acc.push(link.to);
2176
+ return acc;
2177
+ }, []);
2178
+ }
2179
+ findAllPaths(from, to) {
2180
+ const allPaths = [];
2181
+ const [fromNode, toNode] = this.requireFindNodes(from, to);
2182
+ const path = [fromNode];
2183
+ let seen = /* @__PURE__ */ new Set();
2184
+ const stuck = (x) => {
2185
+ if (this.isEquals(x, toNode)) return false;
2186
+ for (const y of this.findLinkedNodes(x)) if (!seen.has(y.key)) {
2187
+ seen.add(y.key);
2188
+ if (!stuck(y)) return false;
2189
+ }
2190
+ return true;
2191
+ };
2192
+ const search = (x) => {
2193
+ if (this.isEquals(x, toNode)) {
2194
+ allPaths.push(cloneDeep(path));
2195
+ return;
2196
+ }
2197
+ seen = new Set(path.map((p) => p.key));
2198
+ if (stuck(x)) return;
2199
+ for (const y of this.findLinkedNodes(x)) if (!path.includes(y)) {
2200
+ path.push(y);
2201
+ search(y);
2202
+ path.pop();
2203
+ }
2204
+ };
2205
+ search(fromNode);
2206
+ return allPaths;
2207
+ }
2597
2208
  };
2598
-
2599
2209
  // src/math.ts
2600
- import BN from "bignumber.js";
2601
- var compute_transfer = (pool1, pool2, swap, exchange_fee, precision) => {
2602
- const term1 = pool2;
2603
- const term2over = pool1.times(pool2);
2604
- const term2under = pool1.plus(swap);
2605
- const term2 = term2over.div(term2under).integerValue(BN.ROUND_DOWN);
2606
- const term = term1.minus(term2);
2607
- const fee = new BN(exchange_fee).div(FEE_FACTOR);
2608
- const result = term.minus(term.times(fee));
2609
- return result.integerValue(BN.ROUND_DOWN).shiftedBy(-precision);
2610
- };
2611
- var compute_transfer_curve = (reserve_in, reserve_out, amount_in, exchange_fee, precision, amplifier) => {
2612
- if (amplifier === 0) {
2613
- return compute_transfer(
2614
- new BN(reserve_in),
2615
- new BN(reserve_out),
2616
- new BN(amount_in),
2617
- exchange_fee,
2618
- precision
2619
- );
2620
- }
2621
- const MAX_ITERATIONS = 10;
2622
- const sum = reserve_in + reserve_out;
2623
- let D = sum;
2624
- let D_prev = 0;
2625
- const F = (v) => {
2626
- return (v >= 0 ? 1 : -1) * Math.floor(Math.abs(v));
2627
- };
2628
- let i = MAX_ITERATIONS;
2629
- while (D != D_prev && i--) {
2630
- const prod1 = F(F(D * D / (reserve_in * 2)) * D / (reserve_out * 2));
2631
- D_prev = D;
2632
- D = F(
2633
- 2 * D * (amplifier * sum + prod1) / ((2 * amplifier - 1) * D + 3 * prod1)
2634
- );
2635
- }
2636
- const b = reserve_in + amount_in + F(D / (amplifier * 2)) - D;
2637
- const c = F(
2638
- F(D * D / ((reserve_in + amount_in) * 2)) * D / (amplifier * 4)
2639
- );
2640
- let x = D, x_prev = 0;
2641
- i = MAX_ITERATIONS;
2642
- while (x != x_prev && i--) {
2643
- x_prev = F(x);
2644
- x = +new BN(x * x + c).div(2 * x + b).toFixed(0, BN.ROUND_DOWN);
2645
- }
2646
- if (reserve_out <= x) {
2647
- throw new Error("curve: insufficient reserve out");
2648
- }
2649
- const amount_out_with_fee = new BN(reserve_out - x);
2650
- const fee = amount_out_with_fee.times(exchange_fee).div(FEE_FACTOR).plus(1).toFixed(0, BN.ROUND_DOWN);
2651
- const amount_out = amount_out_with_fee.minus(fee);
2652
- return amount_out.integerValue(BN.ROUND_DOWN).shiftedBy(-precision);
2210
+ /**
2211
+ * XPR<>XUSDT (XPR -> XUSDT)
2212
+ *
2213
+ * pool1 * pool2
2214
+ * term = pool2 - --------------
2215
+ * pool1 + swap
2216
+ *
2217
+ * result = term - (term * fee)
2218
+ */
2219
+ const compute_transfer = (pool1, pool2, swap, exchange_fee, precision) => {
2220
+ const term1 = pool2;
2221
+ const term2over = pool1.times(pool2);
2222
+ const term2under = pool1.plus(swap);
2223
+ const term2 = term2over.div(term2under).integerValue(BN.ROUND_DOWN);
2224
+ const term = term1.minus(term2);
2225
+ const fee = new BN(exchange_fee).div(FEE_FACTOR);
2226
+ return term.minus(term.times(fee)).integerValue(BN.ROUND_DOWN).shiftedBy(-precision);
2653
2227
  };
2654
- var compute_liquidity = (amount_lt, pool, lt_supply, precision) => {
2655
- const over = amount_lt.times(pool);
2656
- const under = lt_supply;
2657
- const result = over.div(under).integerValue(BN.ROUND_DOWN);
2658
- return +result.shiftedBy(-precision).toFixed(precision, BN.ROUND_DOWN);
2228
+ const compute_transfer_curve = (reserve_in, reserve_out, amount_in, exchange_fee, precision, amplifier) => {
2229
+ if (amplifier === 0) return compute_transfer(new BN(reserve_in), new BN(reserve_out), new BN(amount_in), exchange_fee, precision);
2230
+ const MAX_ITERATIONS = 10;
2231
+ const sum = reserve_in + reserve_out;
2232
+ let D = sum;
2233
+ let D_prev = 0;
2234
+ const F = (v) => {
2235
+ return (v >= 0 ? 1 : -1) * Math.floor(Math.abs(v));
2236
+ };
2237
+ let i = MAX_ITERATIONS;
2238
+ while (D != D_prev && i--) {
2239
+ const prod1 = F(F(D * D / (reserve_in * 2)) * D / (reserve_out * 2));
2240
+ D_prev = D;
2241
+ D = F(2 * D * (amplifier * sum + prod1) / ((2 * amplifier - 1) * D + 3 * prod1));
2242
+ }
2243
+ const b = reserve_in + amount_in + F(D / (amplifier * 2)) - D;
2244
+ const c = F(F(D * D / ((reserve_in + amount_in) * 2)) * D / (amplifier * 4));
2245
+ let x = D, x_prev = 0;
2246
+ i = MAX_ITERATIONS;
2247
+ while (x != x_prev && i--) {
2248
+ x_prev = F(x);
2249
+ x = +new BN(x * x + c).div(2 * x + b).toFixed(0, BN.ROUND_DOWN);
2250
+ }
2251
+ if (reserve_out <= x) throw new Error("curve: insufficient reserve out");
2252
+ const amount_out_with_fee = new BN(reserve_out - x);
2253
+ const fee = amount_out_with_fee.times(exchange_fee).div(FEE_FACTOR).plus(1).toFixed(0, BN.ROUND_DOWN);
2254
+ return amount_out_with_fee.minus(fee).integerValue(BN.ROUND_DOWN).shiftedBy(-precision);
2659
2255
  };
2660
- var isInputInvalid = (data, value, pool) => {
2661
- value = String(value);
2662
- const isBackspace = data === null;
2663
- const isNumber = !/[0-9]|\./.test(data);
2664
- const isDoubleDot = data === "." && value.indexOf(".") !== value.length - 1;
2665
- const isPrecisionTooHigh = value && value.indexOf(".") !== -1 && value.split(".")[1].length > pool.xtokenPrecision;
2666
- const isInvalid = !isBackspace && Boolean(isNumber || isDoubleDot || isPrecisionTooHigh);
2667
- return isInvalid;
2256
+ const compute_liquidity = (amount_lt, pool, lt_supply, precision) => {
2257
+ const over = amount_lt.times(pool);
2258
+ const under = lt_supply;
2259
+ return +over.div(under).integerValue(BN.ROUND_DOWN).shiftedBy(-precision).toFixed(precision, BN.ROUND_DOWN);
2668
2260
  };
2669
- var applyDiscountToFee = (fee, staked) => {
2670
- if (staked >= 1e7) {
2671
- return fee * 0;
2672
- } else if (staked >= 1e6) {
2673
- return fee * 0.33;
2674
- } else if (staked >= 1e5) {
2675
- return fee * 0.66;
2676
- } else {
2677
- return fee;
2678
- }
2261
+ const isInputInvalid = (data, value, pool) => {
2262
+ value = String(value);
2263
+ const isBackspace = data === null;
2264
+ const isNumber = !/[0-9]|\./.test(data);
2265
+ const isDoubleDot = data === "." && value.indexOf(".") !== value.length - 1;
2266
+ const isPrecisionTooHigh = value && value.indexOf(".") !== -1 && value.split(".")[1].length > pool.xtokenPrecision;
2267
+ return !isBackspace && Boolean(isNumber || isDoubleDot || isPrecisionTooHigh);
2679
2268
  };
2680
- export {
2681
- Chains,
2682
- ExtendedAssetParser,
2683
- FEE_FACTOR,
2684
- Graph,
2685
- ILink,
2686
- INode,
2687
- ITopics,
2688
- Networks,
2689
- Providers,
2690
- Status,
2691
- TOPICS,
2692
- Type,
2693
- WRAP_AUTH_ACTION,
2694
- WRAP_CONTRACT,
2695
- accountParser,
2696
- accountRamDeltaParser,
2697
- actParser,
2698
- actionTraceParser,
2699
- addressParser,
2700
- applyDiscountToFee,
2701
- authorizationParser,
2702
- authorizationsParser,
2703
- baseActionParser,
2704
- baseActionSerializedParser,
2705
- bloksRatesParser,
2706
- chronicleTransactionParser,
2707
- compute_liquidity,
2708
- compute_transfer,
2709
- compute_transfer_curve,
2710
- createAbstractAuthParser,
2711
- dailyParser,
2712
- dbHistoryTransactionParser,
2713
- dbMarketParser,
2714
- depositBodyParser,
2715
- depthParser,
2716
- exchangeRateParser,
2717
- exchangeRatesParser,
2718
- explorerLinkByChain,
2719
- fillType,
2720
- generateAddressBodyParser,
2721
- generateAddressResponse,
2722
- generateAuthParser,
2723
- getDailyResponseParser,
2724
- getDepthParser,
2725
- getDepthResponseParser,
2726
- getHistoryActionsParser,
2727
- getHistoryActionsResponseParser,
2728
- getHistoryTransactionResponseParser,
2729
- getHistoryTransfersParser,
2730
- getHistoryTransfersResponseParser,
2731
- getLeaderboardParser,
2732
- getLeaderboardResponseParser,
2733
- getMarketsResponseParser,
2734
- getOhlcvParser,
2735
- getOhlcvResponseParser,
2736
- getOpenOrdersBalancesResponseParser,
2737
- getOpenOrdersParser,
2738
- getOpenOrdersResponseParser,
2739
- getOrderHistoryParser,
2740
- getOrderHistoryResponseParser,
2741
- getOrderLifecycleParser,
2742
- getOrderLifecycleResponseParser,
2743
- getReferralTotalsParser,
2744
- getReferralTotalsResponseParser,
2745
- getReferralsParser,
2746
- getReferralsResponseParser,
2747
- getSyncResponseParser,
2748
- getTradeHistoryParser,
2749
- getTradeHistoryResponseParser,
2750
- getTradesParser,
2751
- getTradesResponseParser,
2752
- historyActionParser,
2753
- historyPartialParser,
2754
- historyTransactionParser,
2755
- historyTransferParser,
2756
- initializeCoins,
2757
- initializeConstants,
2758
- isInputInvalid,
2759
- isSameToken,
2760
- leaderboardParser,
2761
- logStatus,
2762
- loginAccountParamsV3Parser,
2763
- marketOpenOrdersBalanceParser,
2764
- marketParser,
2765
- median,
2766
- metalTransactionParser,
2767
- ohlcvParser,
2768
- openOrderParser,
2769
- orderHistoryParser,
2770
- orderLogParser,
2771
- orderSide,
2772
- orderType,
2773
- otcOrderResponseParser,
2774
- otcQuoteBodyParser,
2775
- otcQuoteResponseParser,
2776
- postSerializeOrderParser,
2777
- postSerializeOrderResponseParser,
2778
- postSubmitOrderParser,
2779
- postSubmitOrderResponseParser,
2780
- protonExplorerTxUrl,
2781
- rateParser,
2782
- receiptParser,
2783
- refferalParser,
2784
- refferalTotalParser,
2785
- similarChains,
2786
- singleActionTransactionParser,
2787
- sortDirectionEnum,
2788
- syncParser,
2789
- traceParser,
2790
- tradeLogParser,
2791
- tradeParser,
2792
- webauthActionParser,
2793
- withdrawBodyParser,
2794
- withdrawHistoryMetalResponseParser,
2795
- withdrawHistoryMetalSwapParser,
2796
- withdrawMetalResponseParser,
2797
- withdrawalFeeQuoteParser,
2798
- wrapParser,
2799
- wrapSetConfParser,
2800
- wrapStartParser
2269
+ const applyDiscountToFee = (fee, staked) => {
2270
+ if (staked >= 1e7) return fee * 0;
2271
+ else if (staked >= 1e6) return fee * .33;
2272
+ else if (staked >= 1e5) return fee * .66;
2273
+ else return fee;
2801
2274
  };
2275
+ export { Chains, ExtendedAssetParser, FEE_FACTOR, Graph, ILink, INode, ITopics, Networks, Providers, Status, TOPICS, Type, WRAP_AUTH_ACTION, WRAP_CONTRACT, accountParser, accountRamDeltaParser, actParser, actionTraceParser, addressParser, applyDiscountToFee, authorizationParser, authorizationsParser, baseActionParser, baseActionSerializedParser, bloksRatesParser, chronicleTransactionParser, compute_liquidity, compute_transfer, compute_transfer_curve, createAbstractAuthParser, dailyParser, dbHistoryTransactionParser, dbMarketParser, depositBodyParser, depthParser, exchangeRateParser, exchangeRatesParser, explorerLinkByChain, fillType, generateAddressBodyParser, generateAddressResponse, generateAuthActionsBaseParser, generateAuthParser, getDailyResponseParser, getDepthParser, getDepthResponseParser, getHistoryActionsParser, getHistoryActionsResponseParser, getHistoryTransactionResponseParser, getHistoryTransfersParser, getHistoryTransfersResponseParser, getLeaderboardParser, getLeaderboardResponseParser, getMarketsResponseParser, getOhlcvParser, getOhlcvResponseParser, getOpenOrdersBalancesResponseParser, getOpenOrdersParser, getOpenOrdersResponseParser, getOrderHistoryParser, getOrderHistoryResponseParser, getOrderLifecycleParser, getOrderLifecycleResponseParser, getReferralTotalsParser, getReferralTotalsResponseParser, getReferralsParser, getReferralsResponseParser, getSyncResponseParser, getTradeHistoryParser, getTradeHistoryResponseParser, getTradesParser, getTradesResponseParser, historyActionParser, historyPartialParser, historyTransactionParser, historyTransferParser, initializeCoins, initializeConstants, isInputInvalid, isSameToken, leaderboardParser, logStatus, loginAccountParamsV3Parser, marketOpenOrdersBalanceParser, marketParser, median, metalTransactionParser, ohlcvParser, openOrderParser, orderHistoryParser, orderLogParser, orderSide, orderType, otcOrderResponseParser, otcQuoteBodyParser, otcQuoteResponseParser, postSerializeOrderParser, postSerializeOrderResponseParser, postSubmitOrderParser, postSubmitOrderResponseParser, protonExplorerTxUrl, rateParser, receiptParser, refferalParser, refferalTotalParser, similarChains, singleActionTransactionParser, sortDirectionEnum, syncParser, traceParser, tradeLogParser, tradeParser, webauthActionParser, withdrawBodyBaseAction, withdrawBodyParser, withdrawHistoryMetalResponseParser, withdrawHistoryMetalSwapParser, withdrawMetalResponseParser, withdrawalFeeQuoteParser, wrapParser, wrapSetConfParser, wrapStartParser };