@proton/wrap-constants 0.2.71 → 0.2.73

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 ADDED
@@ -0,0 +1,3680 @@
1
+ // src/coins.ts
2
+ var Chains = /* @__PURE__ */ ((Chains2) => {
3
+ Chains2["BitcoinMainnet"] = "Bitcoin";
4
+ Chains2["BitcoinTestnet"] = "Bitcoin (Testnet)";
5
+ Chains2["EthereumMainnet"] = "Ethereum";
6
+ Chains2["EthereumRopsten"] = "Ethereum (Ropsten)";
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
+ return Chains2;
35
+ })(Chains || {});
36
+ var Networks = /* @__PURE__ */ ((Networks2) => {
37
+ Networks2["Mainnet"] = "mainnet";
38
+ Networks2["Testnet"] = "testnet";
39
+ Networks2["Ropsten"] = "ropsten";
40
+ Networks2["ERC20"] = "erc20";
41
+ Networks2["BEP20"] = "bep20";
42
+ Networks2["XLM"] = "xlm";
43
+ Networks2["AVM"] = "avm";
44
+ Networks2["EVM"] = "evm";
45
+ return Networks2;
46
+ })(Networks || {});
47
+ var similarChains = {
48
+ ["Ethereum" /* EthereumMainnet */]: ["Binance (BEP20)" /* BinanceBEP20 */],
49
+ ["Binance (BEP20)" /* BinanceBEP20 */]: ["Ethereum" /* EthereumMainnet */]
50
+ };
51
+ var Providers = /* @__PURE__ */ ((Providers2) => {
52
+ Providers2["FIREBLOCKS"] = "fireblocks";
53
+ Providers2["METAL"] = "metal";
54
+ return Providers2;
55
+ })(Providers || {});
56
+ var explorerLinkByChain = {
57
+ ["Bitcoin" /* BitcoinMainnet */]: (txid) => `https://blockchain.com/btc/tx/${txid}`,
58
+ ["Bitcoin (Testnet)" /* BitcoinTestnet */]: (txid) => `https://blockstream.info/testnet/tx/${txid}`,
59
+ ["Ethereum" /* EthereumMainnet */]: (txid) => `https://etherscan.io/tx/${txid}`,
60
+ ["Ethereum (Ropsten)" /* EthereumRopsten */]: (txid) => `https://ropsten.etherscan.io/tx/${txid}`,
61
+ ["Litecoin" /* LitecoinMainnet */]: (txid) => `https://blockchair.com/litecoin/transaction/${txid}`,
62
+ ["Litecoin (Testnet)" /* LitecoinTestnet */]: (txid) => `https://blockexplorer.one/litecoin/testnet/blockHash/${txid}`,
63
+ ["Bitcoin Cash" /* BitcoinCashMainnet */]: (txid) => `https://blockchair.com/bitcoin-cash/transaction/${txid}`,
64
+ ["Bitcoin Cash (Testnet)" /* BitcoinCashTestnet */]: (txid) => `https://blockexplorer.one/bitcoin-cash/testnet/blockHash/${txid}`,
65
+ ["Stellar" /* StellarMainnet */]: (txid) => `https://blockchair.com/stellar/transaction/${txid}`,
66
+ ["Stellar (Testnet)" /* StellarTestnet */]: (txid) => `https://testnet.steexp.com/tx/${txid}`,
67
+ ["Proton" /* ProtonMainnet */]: (txid, traces) => `https://proton.bloks.io/transaction/${txid}${traces ? "?tab=traces" : ""}`,
68
+ ["Proton (Testnet)" /* ProtonTestnet */]: (txid, traces) => `https://proton-test.bloks.io/transaction/${txid}${traces ? "?tab=traces" : ""}`,
69
+ ["Polkadot" /* PolkadotMainnet */]: (txid) => `https://polkadot.subscan.io/extrinsic/${txid}`,
70
+ ["Binance (BEP2)" /* BinanceBEP2 */]: (txid) => `https://binance.mintscan.io/txs/${txid}`,
71
+ ["Binance (BEP20)" /* BinanceBEP20 */]: (txid) => `https://bscscan.com/tx/${txid}`,
72
+ ["EOS" /* EosMainnet */]: (txid) => `https://bloks.io/transaction/${txid}`,
73
+ ["EOS (Jungle Testnet)" /* EosTestnet */]: (txid) => `https://jungle.bloks.io/transaction/${txid}`,
74
+ ["Hedera (Mainnet)" /* HederaMainnet */]: (txid) => `https://app.dragonglass.me/transactions/${txid}`,
75
+ ["Hedera (Testnet)" /* HederaTestnet */]: (txid) => `https://testnet.dragonglass.me/transactions/${txid}`,
76
+ ["Dogecoin" /* DogeMainnet */]: (txid) => `https://blockchair.com/dogecoin/transaction/${txid}`,
77
+ ["Cardano" /* CardanoMainnet */]: (txid) => `https://explorer.cardano.org/en/transaction?id=${txid}`,
78
+ ["Avalanche X-Chain" /* AvalancheXChain */]: (txid) => `https://avascan.info/blockchain/x/tx/${txid}`,
79
+ ["Avalanche C-Chain" /* AvalancheCChain */]: (txid) => `https://snowtrace.io/tx/${txid}`,
80
+ ["Polygon" /* PolygonMainnet */]: (txid) => `https://polygonscan.com/tx/${txid}`,
81
+ ["Terra" /* TerraMainnet */]: (txid) => `https://terra.stake.id/?#/tx/${txid}`,
82
+ ["Ripple" /* RippleMainnet */]: (txid) => `https://xrpscan.com/tx/${txid}`,
83
+ ["Solana" /* SolanaMainnet */]: (txid) => `https://explorer.solana.com/tx/${txid}`,
84
+ ["Metal X-Chain (Testnet)" /* MetalXTestnet */]: (txid) => `https://metalscan.io/tx/${txid}`,
85
+ ["Metal C-Chain (Testnet)" /* MetalCTestnet */]: (txid) => `https://tahoe.metaltrace.io/tx/${txid}`,
86
+ ["Metal C-Chain" /* MetalCMainnet */]: (txid) => `https://metalscan.io/tx/${txid}`,
87
+ ["XDC Network" /* XDCMainnet */]: (txid) => `https://xdc.blocksscan.io/txs/${txid}`
88
+ };
89
+ var protonExplorerTxUrl = (chain, txId, traces) => chain === "proton" ? explorerLinkByChain["Proton" /* ProtonMainnet */](txId, traces) : explorerLinkByChain["Proton (Testnet)" /* ProtonTestnet */](txId, traces);
90
+ var initializeCoins = (protonChain) => {
91
+ const IS_MAINNET = protonChain === "proton";
92
+ const IS_TESTNET = protonChain === "proton-test";
93
+ const coins = [
94
+ {
95
+ allowSwap: true,
96
+ allowBridge: IS_MAINNET,
97
+ allowLend: true,
98
+ allowBorrow: true,
99
+ name: "Proton",
100
+ coin: "XPR",
101
+ xtokenSymbol: "XPR",
102
+ xtokenPrecision: 4,
103
+ xtokenContract: "eosio.token",
104
+ wallets: [
105
+ ...IS_MAINNET ? [
106
+ {
107
+ wallet: "XPR-ERC20",
108
+ symbol: "XPR",
109
+ chain: "Ethereum" /* EthereumMainnet */,
110
+ network: "erc20" /* ERC20 */,
111
+ precision: 4,
112
+ contract: "0xD7EFB00D12C2C13131FD319336FDF952525DA2AF",
113
+ provider: "fireblocks" /* FIREBLOCKS */,
114
+ hasWithdrawMemo: false
115
+ },
116
+ {
117
+ wallet: "XPR-BEP20",
118
+ symbol: "XPR",
119
+ chain: "Binance (BEP20)" /* BinanceBEP20 */,
120
+ network: "bep20" /* BEP20 */,
121
+ precision: 4,
122
+ contract: "0x5DE3939B2F811A61D830E6F52D13B066881412AB",
123
+ provider: "fireblocks" /* FIREBLOCKS */,
124
+ hasWithdrawMemo: false
125
+ }
126
+ ] : []
127
+ ],
128
+ image: "https://www.proton.org/images/tokens/eosio-tokenXPR.png",
129
+ coingeckoId: "proton"
130
+ },
131
+ {
132
+ allowSwap: true,
133
+ allowBridge: true,
134
+ allowLend: true,
135
+ allowBorrow: true,
136
+ name: "USD Coin",
137
+ coin: "USDC",
138
+ xtokenSymbol: "XUSDC",
139
+ xtokenPrecision: 6,
140
+ xtokenContract: "xtokens",
141
+ wallets: [
142
+ ...IS_MAINNET ? [
143
+ {
144
+ wallet: "USDC",
145
+ symbol: "USDC",
146
+ chain: "Ethereum" /* EthereumMainnet */,
147
+ network: "erc20" /* ERC20 */,
148
+ precision: 6,
149
+ contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
150
+ provider: "fireblocks" /* FIREBLOCKS */,
151
+ hasWithdrawMemo: false
152
+ },
153
+ // {
154
+ // wallet: 'USDC-BEP20',
155
+ // symbol: 'USDC',
156
+ // chain: Chains.BinanceBEP20,
157
+ // network: Networks.BEP20,
158
+ // precision: 18,
159
+ // contract: '0x8AC76A51CC950D9822D68B83FE1AD97B32CD580D',
160
+ // provider: Providers.FIREBLOCKS,
161
+ // hasWithdrawMemo: false
162
+ // },
163
+ {
164
+ wallet: "USDC-XLM",
165
+ symbol: "USDC",
166
+ chain: "Stellar" /* StellarMainnet */,
167
+ network: "xlm" /* XLM */,
168
+ precision: 7,
169
+ contract: void 0,
170
+ provider: "fireblocks" /* FIREBLOCKS */,
171
+ hasWithdrawMemo: true
172
+ }
173
+ ] : [],
174
+ ...IS_TESTNET ? [
175
+ {
176
+ wallet: "USDC",
177
+ symbol: "USDC",
178
+ chain: "Ethereum (Ropsten)" /* EthereumRopsten */,
179
+ network: "ropsten" /* Ropsten */,
180
+ precision: 6,
181
+ contract: "0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48",
182
+ provider: "fireblocks" /* FIREBLOCKS */,
183
+ hasWithdrawMemo: false
184
+ },
185
+ {
186
+ wallet: "USDC-XLM",
187
+ symbol: "USDC",
188
+ chain: "Stellar (Testnet)" /* StellarTestnet */,
189
+ network: "xlm" /* XLM */,
190
+ precision: 7,
191
+ contract: void 0,
192
+ provider: "fireblocks" /* FIREBLOCKS */,
193
+ hasWithdrawMemo: true
194
+ }
195
+ ] : []
196
+ ],
197
+ image: "https://www.proton.org/images/tokens/xtokensXUSDC.png",
198
+ coingeckoId: "usd-coin"
199
+ },
200
+ {
201
+ allowSwap: true,
202
+ allowBridge: IS_MAINNET,
203
+ allowLend: true,
204
+ allowBorrow: true,
205
+ name: "Metal DAO",
206
+ coin: "MTL",
207
+ xtokenSymbol: "XMT",
208
+ xtokenPrecision: 8,
209
+ xtokenContract: "xtokens",
210
+ wallets: [
211
+ ...IS_MAINNET ? [
212
+ {
213
+ wallet: "MTL",
214
+ symbol: "MTL",
215
+ chain: "Ethereum" /* EthereumMainnet */,
216
+ network: "erc20" /* ERC20 */,
217
+ precision: 8,
218
+ contract: "0xF433089366899D83A9F26A773D59EC7ECF30355E",
219
+ provider: "fireblocks" /* FIREBLOCKS */,
220
+ hasWithdrawMemo: false
221
+ }
222
+ ] : []
223
+ ],
224
+ image: "https://www.proton.org/images/tokens/xtokensXMT.png",
225
+ coingeckoId: "metal"
226
+ },
227
+ {
228
+ allowSwap: true,
229
+ allowBridge: true,
230
+ allowLend: false,
231
+ allowBorrow: false,
232
+ name: "Metal Blockchain",
233
+ coin: "METAL",
234
+ xtokenSymbol: "METAL",
235
+ xtokenPrecision: 8,
236
+ xtokenContract: "xtokens",
237
+ wallets: [
238
+ ...IS_TESTNET ? [
239
+ {
240
+ wallet: "METAL",
241
+ symbol: "METAL",
242
+ chain: "Metal C-Chain (Testnet)" /* MetalCTestnet */,
243
+ network: "evm" /* EVM */,
244
+ precision: 18,
245
+ contract: "",
246
+ provider: "metal" /* METAL */,
247
+ hasWithdrawMemo: false
248
+ }
249
+ ] : [],
250
+ ...IS_MAINNET ? [
251
+ {
252
+ wallet: "METAL",
253
+ symbol: "METAL",
254
+ chain: "Metal C-Chain" /* MetalCMainnet */,
255
+ network: "evm" /* EVM */,
256
+ precision: 18,
257
+ contract: "",
258
+ provider: "metal" /* METAL */,
259
+ hasWithdrawMemo: false
260
+ },
261
+ {
262
+ wallet: "METAL",
263
+ symbol: "METAL",
264
+ chain: "Ethereum" /* EthereumMainnet */,
265
+ network: "erc20" /* ERC20 */,
266
+ precision: 18,
267
+ contract: "",
268
+ provider: "fireblocks" /* FIREBLOCKS */,
269
+ hasWithdrawMemo: false
270
+ }
271
+ ] : []
272
+ ],
273
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/metal-chain.png",
274
+ coingeckoId: "metal-blockchain"
275
+ },
276
+ {
277
+ allowSwap: true,
278
+ allowBridge: true,
279
+ allowLend: true,
280
+ allowBorrow: true,
281
+ name: "Bitcoin",
282
+ coin: "BTC",
283
+ xtokenSymbol: "XBTC",
284
+ xtokenPrecision: 8,
285
+ xtokenContract: "xtokens",
286
+ wallets: [
287
+ ...IS_MAINNET ? [
288
+ {
289
+ wallet: "BTC",
290
+ symbol: "BTC",
291
+ chain: "Bitcoin" /* BitcoinMainnet */,
292
+ network: "mainnet" /* Mainnet */,
293
+ precision: 8,
294
+ contract: void 0,
295
+ provider: "fireblocks" /* FIREBLOCKS */,
296
+ hasWithdrawMemo: false
297
+ }
298
+ ] : [],
299
+ ...IS_TESTNET ? [
300
+ {
301
+ wallet: "BTC",
302
+ symbol: "BTC",
303
+ chain: "Bitcoin (Testnet)" /* BitcoinTestnet */,
304
+ network: "testnet" /* Testnet */,
305
+ precision: 8,
306
+ contract: void 0,
307
+ provider: "fireblocks" /* FIREBLOCKS */,
308
+ hasWithdrawMemo: false
309
+ }
310
+ ] : []
311
+ ],
312
+ image: "https://www.proton.org/images/tokens/xtokensXBTC.png",
313
+ coingeckoId: "bitcoin"
314
+ },
315
+ {
316
+ allowSwap: true,
317
+ allowBridge: true,
318
+ allowLend: true,
319
+ allowBorrow: true,
320
+ name: "Ethereum",
321
+ coin: "ETH",
322
+ xtokenSymbol: "XETH",
323
+ xtokenPrecision: 8,
324
+ xtokenContract: "xtokens",
325
+ wallets: [
326
+ ...IS_MAINNET ? [
327
+ {
328
+ wallet: "ETH",
329
+ symbol: "ETH",
330
+ chain: "Ethereum" /* EthereumMainnet */,
331
+ network: "mainnet" /* Mainnet */,
332
+ precision: 18,
333
+ contract: "0x0000000000000000000000000000000000000000",
334
+ provider: "fireblocks" /* FIREBLOCKS */,
335
+ hasWithdrawMemo: false
336
+ }
337
+ ] : [],
338
+ ...IS_TESTNET ? [
339
+ {
340
+ wallet: "ETH",
341
+ symbol: "ETH",
342
+ chain: "Ethereum (Ropsten)" /* EthereumRopsten */,
343
+ network: "ropsten" /* Ropsten */,
344
+ precision: 18,
345
+ contract: "0x0000000000000000000000000000000000000000",
346
+ provider: "fireblocks" /* FIREBLOCKS */,
347
+ hasWithdrawMemo: false
348
+ }
349
+ ] : []
350
+ ],
351
+ image: "https://www.proton.org/images/tokens/xtokensXETH.png",
352
+ coingeckoId: "ethereum"
353
+ },
354
+ {
355
+ allowSwap: true,
356
+ allowBridge: false,
357
+ allowLend: false,
358
+ allowBorrow: false,
359
+ name: "Loan",
360
+ coin: "LOAN",
361
+ xtokenSymbol: "LOAN",
362
+ xtokenPrecision: 4,
363
+ xtokenContract: "loan.token",
364
+ wallets: [],
365
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/loan.png",
366
+ coingeckoId: "proton-loan"
367
+ },
368
+ {
369
+ allowSwap: true,
370
+ allowBridge: true,
371
+ allowLend: false,
372
+ allowBorrow: false,
373
+ name: "Tether",
374
+ coin: "USDT",
375
+ xtokenSymbol: "XUSDT",
376
+ xtokenPrecision: 6,
377
+ xtokenContract: "xtokens",
378
+ wallets: [
379
+ ...IS_MAINNET ? [
380
+ {
381
+ wallet: "USDT",
382
+ symbol: "USDT",
383
+ chain: "Ethereum" /* EthereumMainnet */,
384
+ network: "erc20" /* ERC20 */,
385
+ precision: 6,
386
+ contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
387
+ provider: "fireblocks" /* FIREBLOCKS */,
388
+ hasWithdrawMemo: false
389
+ }
390
+ ] : [],
391
+ ...IS_MAINNET ? [
392
+ {
393
+ wallet: "USDT-BEP20",
394
+ symbol: "USDT",
395
+ chain: "Binance (BEP20)" /* BinanceBEP20 */,
396
+ network: "bep20" /* BEP20 */,
397
+ precision: 18,
398
+ contract: "0x55d398326f99059fF775485246999027B3197955",
399
+ provider: "fireblocks" /* FIREBLOCKS */,
400
+ hasWithdrawMemo: false
401
+ }
402
+ ] : [],
403
+ ...IS_TESTNET ? [
404
+ {
405
+ wallet: "USDT",
406
+ symbol: "USDT",
407
+ chain: "Ethereum (Ropsten)" /* EthereumRopsten */,
408
+ network: "ropsten" /* Ropsten */,
409
+ precision: 6,
410
+ contract: "0xDAC17F958D2EE523A2206206994597C13D831EC7",
411
+ provider: "fireblocks" /* FIREBLOCKS */,
412
+ hasWithdrawMemo: false
413
+ }
414
+ ] : []
415
+ ],
416
+ image: "https://www.proton.org/images/tokens/xtokensXUSDT.png",
417
+ coingeckoId: "tether"
418
+ },
419
+ {
420
+ allowSwap: false,
421
+ allowBridge: IS_MAINNET,
422
+ allowLend: false,
423
+ allowBorrow: false,
424
+ name: "TrueUSD",
425
+ coin: "TUSD",
426
+ xtokenSymbol: "XTUSD",
427
+ xtokenPrecision: 6,
428
+ xtokenContract: "xtokens",
429
+ wallets: [
430
+ ...IS_MAINNET ? [
431
+ {
432
+ wallet: "TUSD",
433
+ symbol: "TUSD",
434
+ chain: "Ethereum" /* EthereumMainnet */,
435
+ network: "erc20" /* ERC20 */,
436
+ precision: 18,
437
+ contract: "0x0000000000085D4780B73119B644AE5ECD22B376",
438
+ provider: "fireblocks" /* FIREBLOCKS */,
439
+ hasWithdrawMemo: false
440
+ }
441
+ ] : []
442
+ ],
443
+ image: "https://www.proton.org/images/tokens/xtokensXTUSD.png",
444
+ coingeckoId: "true-usd"
445
+ },
446
+ {
447
+ allowSwap: false,
448
+ allowBridge: IS_MAINNET,
449
+ allowLend: false,
450
+ allowBorrow: false,
451
+ name: "Euro Coin",
452
+ coin: "EUROC",
453
+ xtokenSymbol: "XEUROC",
454
+ xtokenPrecision: 6,
455
+ xtokenContract: "xtokens",
456
+ wallets: [
457
+ ...IS_MAINNET ? [
458
+ {
459
+ wallet: "EUROC",
460
+ symbol: "EUROC-ERC20",
461
+ chain: "Ethereum" /* EthereumMainnet */,
462
+ network: "erc20" /* ERC20 */,
463
+ precision: 6,
464
+ contract: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
465
+ provider: "fireblocks" /* FIREBLOCKS */,
466
+ hasWithdrawMemo: false
467
+ }
468
+ ] : []
469
+ ],
470
+ image: "https://assets.coingecko.com/coins/images/26045/small/euro-coin.png?1655394420",
471
+ coingeckoId: "euro-coin"
472
+ },
473
+ {
474
+ allowSwap: false,
475
+ allowBridge: IS_MAINNET,
476
+ allowLend: false,
477
+ allowBorrow: false,
478
+ name: "XDC Network",
479
+ coin: "XDC",
480
+ xtokenSymbol: "XDC",
481
+ xtokenPrecision: 4,
482
+ xtokenContract: "xtokens",
483
+ wallets: [
484
+ ...IS_MAINNET ? [
485
+ {
486
+ wallet: "XDC",
487
+ symbol: "XDC",
488
+ chain: "XDC Network" /* XDCMainnet */,
489
+ network: "mainnet" /* Mainnet */,
490
+ precision: 18,
491
+ contract: "",
492
+ provider: "fireblocks" /* FIREBLOCKS */,
493
+ hasWithdrawMemo: false
494
+ }
495
+ ] : []
496
+ ],
497
+ image: "https://assets.coingecko.com/coins/images/2912/small/xdc-icon.png?1633700890",
498
+ coingeckoId: "xdce-crowd-sale"
499
+ },
500
+ {
501
+ allowSwap: false,
502
+ allowBridge: IS_MAINNET,
503
+ allowLend: false,
504
+ allowBorrow: false,
505
+ name: "Paxos Dollar",
506
+ coin: "PAX",
507
+ xtokenSymbol: "XPAX",
508
+ xtokenPrecision: 6,
509
+ xtokenContract: "xtokens",
510
+ wallets: [
511
+ ...IS_MAINNET ? [
512
+ {
513
+ wallet: "PAX",
514
+ symbol: "PAX",
515
+ chain: "Ethereum" /* EthereumMainnet */,
516
+ network: "erc20" /* ERC20 */,
517
+ precision: 18,
518
+ contract: "0x8E870D67F660D95D5BE530380D0EC0BD388289E1",
519
+ provider: "fireblocks" /* FIREBLOCKS */,
520
+ hasWithdrawMemo: false
521
+ }
522
+ ] : []
523
+ ],
524
+ image: "https://www.proton.org/images/tokens/xtokensXPAX.png",
525
+ coingeckoId: "paxos-standard"
526
+ },
527
+ {
528
+ allowSwap: false,
529
+ allowBridge: true,
530
+ allowLend: false,
531
+ allowBorrow: false,
532
+ name: "Paxos Gold",
533
+ coin: "PAXG",
534
+ xtokenSymbol: "XPAXG",
535
+ xtokenPrecision: 8,
536
+ xtokenContract: "xtokens",
537
+ wallets: [
538
+ ...IS_MAINNET ? [
539
+ {
540
+ wallet: "PAXG",
541
+ symbol: "PAXG",
542
+ chain: "Ethereum" /* EthereumMainnet */,
543
+ network: "erc20" /* ERC20 */,
544
+ precision: 18,
545
+ contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
546
+ provider: "fireblocks" /* FIREBLOCKS */,
547
+ hasWithdrawMemo: false
548
+ }
549
+ ] : [],
550
+ ...IS_TESTNET ? [
551
+ {
552
+ wallet: "PAXG",
553
+ symbol: "PAXG",
554
+ chain: "Ethereum (Ropsten)" /* EthereumRopsten */,
555
+ network: "ropsten" /* Ropsten */,
556
+ precision: 18,
557
+ contract: "0x45804880DE22913DAFE09F4980848ECE6ECBAF78",
558
+ provider: "fireblocks" /* FIREBLOCKS */,
559
+ hasWithdrawMemo: false
560
+ }
561
+ ] : []
562
+ ],
563
+ image: "https://www.proton.org/images/tokens/xtokensXPAXG.png",
564
+ coingeckoId: "pax-gold"
565
+ },
566
+ {
567
+ allowSwap: IS_MAINNET,
568
+ allowBridge: false,
569
+ allowLend: false,
570
+ allowBorrow: false,
571
+ name: "Storex",
572
+ coin: "STRX",
573
+ xtokenSymbol: "STRX",
574
+ xtokenPrecision: 4,
575
+ xtokenContract: "storex",
576
+ wallets: [],
577
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/strx.png",
578
+ coingeckoId: ""
579
+ },
580
+ {
581
+ allowSwap: false,
582
+ allowBridge: false,
583
+ allowLend: false,
584
+ allowBorrow: false,
585
+ name: "Mint",
586
+ coin: "MINT",
587
+ xtokenSymbol: "MINT",
588
+ xtokenPrecision: 4,
589
+ xtokenContract: "protonmint",
590
+ wallets: [],
591
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/PMLogo-04.png",
592
+ coingeckoId: ""
593
+ },
594
+ {
595
+ allowSwap: IS_MAINNET,
596
+ allowBridge: false,
597
+ allowLend: false,
598
+ allowBorrow: false,
599
+ name: "Snipcoins",
600
+ coin: "SNIPS",
601
+ xtokenSymbol: "SNIPS",
602
+ xtokenPrecision: 4,
603
+ xtokenContract: "snipcoins",
604
+ wallets: [],
605
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/snips.png",
606
+ coingeckoId: ""
607
+ },
608
+ {
609
+ allowSwap: IS_MAINNET,
610
+ allowBridge: true,
611
+ allowLend: false,
612
+ allowBorrow: false,
613
+ name: "Uniswap",
614
+ coin: "UNI",
615
+ xtokenSymbol: "XUNI",
616
+ xtokenPrecision: 6,
617
+ xtokenContract: "xtokens",
618
+ wallets: [
619
+ ...IS_MAINNET ? [
620
+ {
621
+ wallet: "UNI",
622
+ symbol: "UNI",
623
+ chain: "Ethereum" /* EthereumMainnet */,
624
+ network: "erc20" /* ERC20 */,
625
+ precision: 18,
626
+ contract: "0x1F9840A85D5AF5BF1D1762F925BDADDC4201F984",
627
+ provider: "fireblocks" /* FIREBLOCKS */,
628
+ hasWithdrawMemo: false
629
+ }
630
+ ] : [],
631
+ ...IS_TESTNET ? [
632
+ {
633
+ wallet: "UNI",
634
+ symbol: "UNI",
635
+ chain: "Ethereum (Ropsten)" /* EthereumRopsten */,
636
+ network: "ropsten" /* Ropsten */,
637
+ precision: 18,
638
+ contract: "0x1F9840A85D5AF5BF1D1762F925BDADDC4201F984",
639
+ provider: "fireblocks" /* FIREBLOCKS */,
640
+ hasWithdrawMemo: false
641
+ }
642
+ ] : []
643
+ ],
644
+ image: "https://www.proton.org/images/tokens/xtokensXUNI.png",
645
+ coingeckoId: "uniswap"
646
+ },
647
+ {
648
+ allowSwap: false,
649
+ allowBridge: false,
650
+ allowLend: false,
651
+ allowBorrow: false,
652
+ name: "1INCH",
653
+ coin: "1INCH",
654
+ xtokenSymbol: "XINCH",
655
+ xtokenPrecision: 6,
656
+ xtokenContract: "xtokens",
657
+ wallets: [
658
+ ...IS_MAINNET ? [
659
+ {
660
+ wallet: "1INCH",
661
+ symbol: "1INCH",
662
+ chain: "Ethereum" /* EthereumMainnet */,
663
+ network: "erc20" /* ERC20 */,
664
+ precision: 18,
665
+ contract: "0x111111111117DC0AA78B770FA6A738034120C302",
666
+ provider: "fireblocks" /* FIREBLOCKS */,
667
+ hasWithdrawMemo: false
668
+ }
669
+ ] : []
670
+ ],
671
+ image: "https://www.proton.org/images/tokens/xtokensXINCH.png",
672
+ coingeckoId: "1inch"
673
+ },
674
+ {
675
+ allowSwap: false,
676
+ allowBridge: false,
677
+ allowLend: false,
678
+ allowBorrow: false,
679
+ name: "Chainlink",
680
+ coin: "LINK",
681
+ xtokenSymbol: "XLINK",
682
+ xtokenPrecision: 6,
683
+ xtokenContract: "xtokens",
684
+ wallets: [
685
+ ...IS_MAINNET ? [
686
+ {
687
+ wallet: "LINK",
688
+ symbol: "LINK",
689
+ chain: "Ethereum" /* EthereumMainnet */,
690
+ network: "erc20" /* ERC20 */,
691
+ precision: 18,
692
+ contract: "0x514910771AF9CA656AF840DFF83E8264ECF986CA",
693
+ provider: "fireblocks" /* FIREBLOCKS */,
694
+ hasWithdrawMemo: false
695
+ }
696
+ ] : []
697
+ ],
698
+ image: "https://www.proton.org/images/tokens/xtokensXLINK.png",
699
+ coingeckoId: "chainlink"
700
+ },
701
+ {
702
+ allowSwap: IS_MAINNET,
703
+ allowBridge: true,
704
+ allowLend: false,
705
+ allowBorrow: false,
706
+ name: "Litecoin",
707
+ coin: "LTC",
708
+ xtokenSymbol: "XLTC",
709
+ xtokenPrecision: 8,
710
+ xtokenContract: "xtokens",
711
+ wallets: [
712
+ ...IS_MAINNET ? [
713
+ {
714
+ wallet: "LTC",
715
+ symbol: "LTC",
716
+ chain: "Litecoin" /* LitecoinMainnet */,
717
+ network: "mainnet" /* Mainnet */,
718
+ precision: 8,
719
+ contract: void 0,
720
+ provider: "fireblocks" /* FIREBLOCKS */,
721
+ hasWithdrawMemo: false
722
+ }
723
+ ] : [],
724
+ ...IS_TESTNET ? [
725
+ {
726
+ wallet: "LTC",
727
+ symbol: "LTC",
728
+ chain: "Litecoin (Testnet)" /* LitecoinTestnet */,
729
+ network: "testnet" /* Testnet */,
730
+ precision: 8,
731
+ contract: void 0,
732
+ provider: "fireblocks" /* FIREBLOCKS */,
733
+ hasWithdrawMemo: false
734
+ }
735
+ ] : []
736
+ ],
737
+ image: "https://www.proton.org/images/tokens/xtokensXLTC.png",
738
+ coingeckoId: "litecoin"
739
+ },
740
+ {
741
+ allowSwap: false,
742
+ allowBridge: true,
743
+ allowLend: false,
744
+ allowBorrow: false,
745
+ name: "Bitcoin Cash",
746
+ coin: "BCH",
747
+ xtokenSymbol: "XBCH",
748
+ xtokenPrecision: 8,
749
+ xtokenContract: "xtokens",
750
+ wallets: [
751
+ ...IS_MAINNET ? [
752
+ {
753
+ wallet: "BCH",
754
+ symbol: "BCH",
755
+ chain: "Bitcoin Cash" /* BitcoinCashMainnet */,
756
+ network: "mainnet" /* Mainnet */,
757
+ precision: 8,
758
+ contract: void 0,
759
+ provider: "fireblocks" /* FIREBLOCKS */,
760
+ hasWithdrawMemo: false
761
+ }
762
+ ] : [],
763
+ ...IS_TESTNET ? [
764
+ {
765
+ wallet: "BCH",
766
+ symbol: "BCH",
767
+ chain: "Bitcoin Cash (Testnet)" /* BitcoinCashTestnet */,
768
+ network: "testnet" /* Testnet */,
769
+ precision: 8,
770
+ contract: void 0,
771
+ provider: "fireblocks" /* FIREBLOCKS */,
772
+ hasWithdrawMemo: false
773
+ }
774
+ ] : []
775
+ ],
776
+ image: "https://www.proton.org/images/tokens/xtokensXBCH.png",
777
+ coingeckoId: "bitcoin-cash"
778
+ },
779
+ {
780
+ allowSwap: true,
781
+ allowBridge: true,
782
+ allowLend: false,
783
+ allowBorrow: false,
784
+ name: "LunarCrush",
785
+ coin: "LUNR",
786
+ xtokenSymbol: "XLUNR",
787
+ xtokenPrecision: 4,
788
+ xtokenContract: "xtokens",
789
+ wallets: [
790
+ ...IS_MAINNET ? [
791
+ {
792
+ wallet: "LUNR",
793
+ symbol: "LUNR",
794
+ chain: "Ethereum" /* EthereumMainnet */,
795
+ network: "erc20" /* ERC20 */,
796
+ precision: 4,
797
+ contract: void 0,
798
+ provider: "fireblocks" /* FIREBLOCKS */,
799
+ hasWithdrawMemo: false
800
+ }
801
+ ] : []
802
+ ],
803
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/xlunr.png",
804
+ coingeckoId: "lunr-token"
805
+ },
806
+ {
807
+ allowSwap: false,
808
+ allowBridge: IS_TESTNET,
809
+ allowLend: false,
810
+ allowBorrow: false,
811
+ name: "Stellar",
812
+ coin: "XLM",
813
+ xtokenSymbol: "XXLM",
814
+ xtokenPrecision: 6,
815
+ xtokenContract: "xtokens",
816
+ wallets: [
817
+ ...IS_MAINNET ? [
818
+ {
819
+ wallet: "XLM",
820
+ symbol: "XLM",
821
+ chain: "Stellar" /* StellarMainnet */,
822
+ network: "mainnet" /* Mainnet */,
823
+ precision: 7,
824
+ contract: void 0,
825
+ provider: "fireblocks" /* FIREBLOCKS */,
826
+ hasWithdrawMemo: true
827
+ }
828
+ ] : [],
829
+ ...IS_TESTNET ? [
830
+ {
831
+ wallet: "XLM",
832
+ symbol: "XLM",
833
+ chain: "Stellar (Testnet)" /* StellarTestnet */,
834
+ network: "testnet" /* Testnet */,
835
+ precision: 7,
836
+ contract: void 0,
837
+ provider: "fireblocks" /* FIREBLOCKS */,
838
+ hasWithdrawMemo: true
839
+ }
840
+ ] : []
841
+ ],
842
+ image: "https://www.proton.org/images/tokens/xtokensXXLM.png",
843
+ coingeckoId: "stellar"
844
+ },
845
+ {
846
+ allowSwap: false,
847
+ allowBridge: false,
848
+ allowLend: false,
849
+ allowBorrow: false,
850
+ name: "Sense",
851
+ coin: "SENSE",
852
+ xtokenSymbol: "XSENSE",
853
+ xtokenPrecision: 4,
854
+ xtokenContract: "sense",
855
+ wallets: [],
856
+ image: "https://www.proton.org/images/tokens/senseXSENSE.png",
857
+ coingeckoId: "sense"
858
+ },
859
+ {
860
+ allowSwap: false,
861
+ allowBridge: false,
862
+ allowLend: false,
863
+ allowBorrow: false,
864
+ name: "Polkadot",
865
+ coin: "DOT",
866
+ xtokenSymbol: "XDOT",
867
+ xtokenPrecision: 8,
868
+ xtokenContract: "xtokens",
869
+ wallets: [
870
+ ...IS_MAINNET ? [
871
+ {
872
+ wallet: "DOT",
873
+ symbol: "DOT",
874
+ chain: "Polkadot" /* PolkadotMainnet */,
875
+ network: "mainnet" /* Mainnet */,
876
+ precision: 10,
877
+ contract: void 0,
878
+ provider: "fireblocks" /* FIREBLOCKS */,
879
+ hasWithdrawMemo: false
880
+ }
881
+ ] : []
882
+ ],
883
+ image: "https://www.proton.org/images/tokens/xtokensXDOT.png",
884
+ coingeckoId: "polkadot"
885
+ },
886
+ {
887
+ allowSwap: true,
888
+ allowBridge: IS_MAINNET,
889
+ allowLend: false,
890
+ allowBorrow: false,
891
+ name: "Binance Coin",
892
+ coin: "BNB",
893
+ xtokenSymbol: "XBNB",
894
+ xtokenPrecision: 8,
895
+ xtokenContract: "xtokens",
896
+ wallets: [
897
+ ...IS_MAINNET ? [
898
+ {
899
+ wallet: "BNB",
900
+ symbol: "BNB",
901
+ chain: "Binance (BEP20)" /* BinanceBEP20 */,
902
+ network: "bep20" /* BEP20 */,
903
+ precision: 18,
904
+ contract: void 0,
905
+ provider: "fireblocks" /* FIREBLOCKS */,
906
+ hasWithdrawMemo: false
907
+ }
908
+ ] : []
909
+ ],
910
+ image: "https://www.proton.org/images/tokens/xtokensXBNB.png",
911
+ coingeckoId: "binancecoin"
912
+ },
913
+ {
914
+ allowSwap: false,
915
+ allowBridge: false,
916
+ allowLend: false,
917
+ allowBorrow: false,
918
+ name: "Binance USD",
919
+ coin: "BUSD",
920
+ xtokenSymbol: "XBUSD",
921
+ xtokenPrecision: 6,
922
+ xtokenContract: "xtokens",
923
+ wallets: [
924
+ // ...(IS_MAINNET ? [{
925
+ // wallet: 'BUSD-BEP20',
926
+ // symbol: 'BUSD',
927
+ // chain: Chains.BinanceBEP20,
928
+ // network: Networks.BEP20,
929
+ // precision: 18,
930
+ // contract: '0xe9e7cea3dedca5984780bafc599bd69add087d56',
931
+ // provider: Providers.FIREBLOCKS,
932
+ // hasWithdrawMemo: false
933
+ // }]: [])
934
+ ],
935
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/xbusd.png",
936
+ coingeckoId: "binance-usd"
937
+ },
938
+ {
939
+ allowSwap: true,
940
+ allowBridge: true,
941
+ allowLend: false,
942
+ allowBorrow: false,
943
+ name: "EOS",
944
+ coin: "EOS",
945
+ xtokenSymbol: "XEOS",
946
+ xtokenPrecision: 4,
947
+ xtokenContract: "xtokens",
948
+ wallets: [
949
+ ...IS_MAINNET ? [
950
+ {
951
+ wallet: "EOS",
952
+ symbol: "EOS",
953
+ chain: "EOS" /* EosMainnet */,
954
+ network: "mainnet" /* Mainnet */,
955
+ precision: 4,
956
+ contract: void 0,
957
+ provider: "fireblocks" /* FIREBLOCKS */,
958
+ hasWithdrawMemo: true
959
+ }
960
+ ] : [],
961
+ ...IS_TESTNET ? [
962
+ {
963
+ wallet: "EOS",
964
+ symbol: "EOS",
965
+ chain: "EOS (Jungle Testnet)" /* EosTestnet */,
966
+ network: "testnet" /* Testnet */,
967
+ precision: 4,
968
+ contract: void 0,
969
+ provider: "fireblocks" /* FIREBLOCKS */,
970
+ hasWithdrawMemo: true
971
+ }
972
+ ] : []
973
+ ],
974
+ image: "https://www.proton.org/images/tokens/xtokensXEOS.png",
975
+ coingeckoId: "eos"
976
+ },
977
+ {
978
+ allowSwap: IS_MAINNET,
979
+ allowBridge: IS_MAINNET,
980
+ allowLend: true,
981
+ allowBorrow: true,
982
+ name: "Dogecoin",
983
+ coin: "DOGE",
984
+ xtokenSymbol: "XDOGE",
985
+ xtokenPrecision: 6,
986
+ xtokenContract: "xtokens",
987
+ wallets: [
988
+ ...IS_MAINNET ? [
989
+ {
990
+ wallet: "DOGE",
991
+ symbol: "DOGE",
992
+ chain: "Dogecoin" /* DogeMainnet */,
993
+ network: "mainnet" /* Mainnet */,
994
+ precision: 8,
995
+ contract: void 0,
996
+ provider: "fireblocks" /* FIREBLOCKS */,
997
+ hasWithdrawMemo: false
998
+ }
999
+ ] : []
1000
+ ],
1001
+ image: "https://www.proton.org/images/tokens/xtokensXDOGE.png",
1002
+ coingeckoId: "dogecoin"
1003
+ },
1004
+ {
1005
+ allowSwap: IS_MAINNET,
1006
+ allowBridge: IS_MAINNET,
1007
+ allowLend: false,
1008
+ allowBorrow: false,
1009
+ name: "Cardano",
1010
+ coin: "ADA",
1011
+ xtokenSymbol: "XADA",
1012
+ xtokenPrecision: 6,
1013
+ xtokenContract: "xtokens",
1014
+ wallets: [
1015
+ ...IS_MAINNET ? [
1016
+ {
1017
+ wallet: "ADA",
1018
+ symbol: "ADA",
1019
+ chain: "Cardano" /* CardanoMainnet */,
1020
+ network: "mainnet" /* Mainnet */,
1021
+ precision: 6,
1022
+ contract: void 0,
1023
+ provider: "fireblocks" /* FIREBLOCKS */,
1024
+ hasWithdrawMemo: false
1025
+ }
1026
+ ] : []
1027
+ ],
1028
+ image: "https://www.proton.org/images/tokens/xtokensXADA.png",
1029
+ coingeckoId: "cardano"
1030
+ },
1031
+ // Adding
1032
+ {
1033
+ allowSwap: false,
1034
+ allowBridge: false,
1035
+ allowLend: false,
1036
+ allowBorrow: false,
1037
+ name: "Terra",
1038
+ coin: "LUNA",
1039
+ xtokenSymbol: "XLUNA",
1040
+ xtokenPrecision: 6,
1041
+ xtokenContract: "xtokens",
1042
+ wallets: [
1043
+ // ...(IS_MAINNET ? [{
1044
+ // wallet: 'LUNA',
1045
+ // symbol: 'LUNA',
1046
+ // chain: Chains.TerraMainnet,
1047
+ // network: Networks.Mainnet,
1048
+ // precision: 6,
1049
+ // contract: undefined,
1050
+ // provider: Providers.FIREBLOCKS,
1051
+ // hasWithdrawMemo: true
1052
+ // }]: [])
1053
+ ],
1054
+ image: "https://www.proton.org/images/tokens/xtokensXLUNA.png",
1055
+ coingeckoId: "terra-luna"
1056
+ },
1057
+ {
1058
+ allowSwap: false,
1059
+ allowBridge: false,
1060
+ allowLend: false,
1061
+ allowBorrow: false,
1062
+ name: "TerraUSD",
1063
+ coin: "UST",
1064
+ xtokenSymbol: "XUST",
1065
+ xtokenPrecision: 6,
1066
+ xtokenContract: "xtokens",
1067
+ wallets: [
1068
+ ...IS_MAINNET ? [
1069
+ {
1070
+ wallet: "UST",
1071
+ symbol: "UST",
1072
+ chain: "Terra" /* TerraMainnet */,
1073
+ network: "mainnet" /* Mainnet */,
1074
+ precision: 6,
1075
+ contract: void 0,
1076
+ provider: "fireblocks" /* FIREBLOCKS */,
1077
+ hasWithdrawMemo: true
1078
+ }
1079
+ ] : []
1080
+ ],
1081
+ image: "https://www.proton.org/images/tokens/xtokensXUST.png",
1082
+ coingeckoId: "terrausd"
1083
+ },
1084
+ {
1085
+ allowSwap: false,
1086
+ allowBridge: IS_MAINNET,
1087
+ allowLend: false,
1088
+ allowBorrow: false,
1089
+ name: "Solana",
1090
+ coin: "SOL",
1091
+ xtokenSymbol: "XSOL",
1092
+ xtokenPrecision: 6,
1093
+ xtokenContract: "xtokens",
1094
+ wallets: [
1095
+ ...IS_MAINNET ? [
1096
+ {
1097
+ wallet: "SOL",
1098
+ symbol: "SOL",
1099
+ chain: "Solana" /* SolanaMainnet */,
1100
+ network: "mainnet" /* Mainnet */,
1101
+ precision: 9,
1102
+ contract: void 0,
1103
+ provider: "fireblocks" /* FIREBLOCKS */,
1104
+ hasWithdrawMemo: false
1105
+ }
1106
+ ] : []
1107
+ ],
1108
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/xsol.png",
1109
+ coingeckoId: "solana"
1110
+ },
1111
+ {
1112
+ allowSwap: false,
1113
+ allowBridge: IS_MAINNET,
1114
+ allowLend: false,
1115
+ allowBorrow: false,
1116
+ name: "Ripple",
1117
+ coin: "XRP",
1118
+ xtokenSymbol: "XXRP",
1119
+ xtokenPrecision: 6,
1120
+ xtokenContract: "xtokens",
1121
+ wallets: [
1122
+ ...IS_MAINNET ? [
1123
+ {
1124
+ wallet: "XRP",
1125
+ symbol: "XRP",
1126
+ chain: "Ripple" /* RippleMainnet */,
1127
+ network: "mainnet" /* Mainnet */,
1128
+ precision: 6,
1129
+ contract: void 0,
1130
+ provider: "fireblocks" /* FIREBLOCKS */,
1131
+ hasWithdrawMemo: true
1132
+ }
1133
+ ] : []
1134
+ ],
1135
+ image: "https://raw.githubusercontent.com/eoscafe/eos-airdrops/master/logos/xxrp.png",
1136
+ coingeckoId: "ripple"
1137
+ },
1138
+ // Future
1139
+ {
1140
+ allowSwap: false,
1141
+ allowBridge: false,
1142
+ allowLend: false,
1143
+ allowBorrow: false,
1144
+ name: "Avalanche",
1145
+ coin: "AVAX",
1146
+ xtokenSymbol: "XAVAX",
1147
+ xtokenPrecision: 9,
1148
+ xtokenContract: "xtokens",
1149
+ wallets: [
1150
+ ...IS_MAINNET ? [
1151
+ {
1152
+ wallet: "AVAX",
1153
+ symbol: "AVAX",
1154
+ chain: "Avalanche C-Chain" /* AvalancheCChain */,
1155
+ network: "mainnet" /* Mainnet */,
1156
+ precision: 9,
1157
+ contract: void 0,
1158
+ provider: "fireblocks" /* FIREBLOCKS */,
1159
+ hasWithdrawMemo: false
1160
+ }
1161
+ ] : []
1162
+ ],
1163
+ image: "https://www.proton.org/images/tokens/xtokensXAVAX.png",
1164
+ coingeckoId: "avalanche-2"
1165
+ },
1166
+ {
1167
+ allowSwap: false,
1168
+ allowBridge: false,
1169
+ allowLend: false,
1170
+ allowBorrow: false,
1171
+ name: "Polygon",
1172
+ coin: "MATIC",
1173
+ xtokenSymbol: "XMATIC",
1174
+ xtokenPrecision: 8,
1175
+ xtokenContract: "xtokens",
1176
+ wallets: [
1177
+ ...IS_MAINNET ? [
1178
+ {
1179
+ wallet: "MATIC",
1180
+ symbol: "MATIC",
1181
+ chain: "Polygon" /* PolygonMainnet */,
1182
+ network: "mainnet" /* Mainnet */,
1183
+ precision: 18,
1184
+ contract: "0x0000000000000000000000000000000000000000",
1185
+ provider: "fireblocks" /* FIREBLOCKS */,
1186
+ hasWithdrawMemo: false
1187
+ }
1188
+ ] : []
1189
+ ],
1190
+ image: "https://www.proton.org/images/tokens/xtokensXMATIC.png",
1191
+ coingeckoId: "matic-network"
1192
+ },
1193
+ {
1194
+ allowSwap: true,
1195
+ allowBridge: false,
1196
+ allowLend: false,
1197
+ allowBorrow: false,
1198
+ name: "Metal Dollar",
1199
+ coin: "XMD",
1200
+ xtokenSymbol: "XMD",
1201
+ xtokenPrecision: 6,
1202
+ xtokenContract: "xmd.token",
1203
+ wallets: [],
1204
+ image: "https://github.com/eoscafe/eos-airdrops/blob/master/logos/xmd.png?raw=true",
1205
+ coingeckoId: ""
1206
+ },
1207
+ {
1208
+ allowSwap: false,
1209
+ allowBridge: IS_TESTNET,
1210
+ allowLend: false,
1211
+ allowBorrow: false,
1212
+ name: "HBAR",
1213
+ coin: "HBAR",
1214
+ xtokenSymbol: "XHBAR",
1215
+ xtokenPrecision: 6,
1216
+ xtokenContract: "xtokens",
1217
+ wallets: [
1218
+ ...IS_TESTNET ? [
1219
+ {
1220
+ wallet: "HBAR",
1221
+ symbol: "HBAR",
1222
+ chain: "Hedera (Testnet)" /* HederaTestnet */,
1223
+ network: "testnet" /* Testnet */,
1224
+ precision: 8,
1225
+ contract: void 0,
1226
+ provider: "fireblocks" /* FIREBLOCKS */,
1227
+ hasWithdrawMemo: true
1228
+ }
1229
+ ] : []
1230
+ ],
1231
+ image: "https://www.proton.org/images/tokens/xtokensXHBAR.png",
1232
+ coingeckoId: "hedera-hashgraph"
1233
+ }
1234
+ ];
1235
+ const walletWithDuplicateChains = coins.find((coin) => {
1236
+ const chains = coin.wallets.map((wallet) => wallet.chain);
1237
+ return new Set(chains).size !== chains.length;
1238
+ });
1239
+ if (walletWithDuplicateChains) {
1240
+ throw new Error(
1241
+ `Coin ${walletWithDuplicateChains.coin} has duplicate chains in wallet`
1242
+ );
1243
+ }
1244
+ return {
1245
+ allCoins: coins,
1246
+ swapCoins: coins.filter((coin) => coin.allowSwap),
1247
+ bridgeCoins: coins.filter((coin) => coin.allowBridge),
1248
+ lendCoins: coins.filter((coin) => coin.allowLend),
1249
+ borrowCoins: coins.filter((coin) => coin.allowBorrow),
1250
+ loanCoins: coins.filter((coin) => coin.allowLend || coin.allowBorrow),
1251
+ allEnabledCoins: coins.filter(
1252
+ (coin) => coin.allowSwap || coin.allowBridge || coin.xtokenSymbol === "XMD"
1253
+ )
1254
+ };
1255
+ };
1256
+
1257
+ // src/parsers/actions.ts
1258
+ import * as z2 from "zod";
1259
+
1260
+ // src/parsers/base.ts
1261
+ import * as z from "zod";
1262
+ var accountParser = z.string().regex(/^[.1-5a-z]{0,12}[.1-5a-j]?$/);
1263
+ var authorizationParser = z.object({
1264
+ actor: accountParser,
1265
+ permission: z.string()
1266
+ });
1267
+ var authorizationsParser = z.array(authorizationParser).min(1);
1268
+ var ExtendedAssetParser = z.object({
1269
+ quantity: z.string(),
1270
+ contract: accountParser
1271
+ });
1272
+
1273
+ // src/parsers/actions.ts
1274
+ var actionParser = z2.object({
1275
+ account: z2.string(),
1276
+ name: z2.string(),
1277
+ authorization: z2.array(
1278
+ z2.object({
1279
+ actor: z2.string(),
1280
+ permission: z2.string()
1281
+ })
1282
+ ),
1283
+ data: z2.any(),
1284
+ hex_data: z2.string().optional()
1285
+ });
1286
+ var transactionExtensionsParser = z2.array(z2.number().or(z2.string())).optional();
1287
+ var rawTransactionParser = z2.object({
1288
+ expiration: z2.string(),
1289
+ ref_block_num: z2.number(),
1290
+ ref_block_prefix: z2.number(),
1291
+ max_net_usage_words: z2.number(),
1292
+ max_cpu_usage_ms: z2.number(),
1293
+ delay_sec: z2.number(),
1294
+ context_free_actions: z2.array(actionParser),
1295
+ transaction_extensions: z2.array(transactionExtensionsParser)
1296
+ });
1297
+ var baseActionParser = (contract, action, data) => z2.object({
1298
+ account: contract === "*" ? accountParser : z2.literal(contract),
1299
+ name: z2.literal(action),
1300
+ data: z2.object(data),
1301
+ authorization: authorizationsParser
1302
+ });
1303
+ var baseActionSerializedParser = (contract, action, data) => z2.object({
1304
+ account: contract === "*" ? accountParser : z2.literal(contract),
1305
+ name: z2.literal(action),
1306
+ data: z2.string().or(z2.object(data)),
1307
+ authorization: authorizationsParser
1308
+ });
1309
+ var webauthActionParser = (contract, action, data) => z2.object({
1310
+ account: z2.literal("webauthn"),
1311
+ name: z2.literal("exec"),
1312
+ data: z2.object({
1313
+ account: accountParser,
1314
+ key: z2.object({
1315
+ key: z2.array(z2.string().or(z2.object({
1316
+ modulus: z2.string(),
1317
+ exponent: z2.string()
1318
+ }))),
1319
+ user_presence: z2.number(),
1320
+ rpid: z2.string()
1321
+ }),
1322
+ nonce: z2.number(),
1323
+ permissions: authorizationsParser,
1324
+ signature: z2.object({
1325
+ auth_data: z2.string(),
1326
+ client_json: z2.string(),
1327
+ signature: z2.string()
1328
+ }),
1329
+ trx: rawTransactionParser.merge(
1330
+ z2.object({
1331
+ actions: z2.array(
1332
+ baseActionSerializedParser(contract, action, data)
1333
+ ).length(1)
1334
+ })
1335
+ )
1336
+ }),
1337
+ authorization: authorizationsParser
1338
+ });
1339
+ var singleActionTransactionParser = (contract, action, data) => {
1340
+ const baseAction = baseActionParser(contract, action, data);
1341
+ const webauthAction = webauthActionParser(contract, action, data);
1342
+ return rawTransactionParser.merge(z2.object({
1343
+ actions: z2.array(baseAction.or(webauthAction)).length(1)
1344
+ }));
1345
+ };
1346
+
1347
+ // src/parsers/address.ts
1348
+ import * as z4 from "zod";
1349
+
1350
+ // src/parsers/auth.ts
1351
+ import * as z3 from "zod";
1352
+
1353
+ // src/constants.ts
1354
+ var WRAP_CONTRACT = "proton.wrap";
1355
+ var WRAP_AUTH_ACTION = "generateauth";
1356
+ var FEE_FACTOR = 1e4;
1357
+ var initializeConstants = (chain) => {
1358
+ const { swapCoins, bridgeCoins, allEnabledCoins, allCoins, lendCoins, borrowCoins, loanCoins } = initializeCoins(chain);
1359
+ const constants = {
1360
+ SWAP_CONTRACT: "proton.swaps",
1361
+ DEX_CONTRACT: "dex",
1362
+ FEE_FACTOR,
1363
+ GOOGLE_MAPS_KEY: "AIzaSyDb2_CrK032kSIqBXbkdwmaLKWELl0SxVs",
1364
+ SWAP_URL: chain === "proton" ? "https://otc.protonswap.com" : "https://otc-test.protonswap.com",
1365
+ WRAP_SERVER_URL: chain === "proton" ? "https://www.api.bloks.io/proton-wrap-public2" : "https://www.api.bloks.io/proton-wrap-testnet-public2",
1366
+ WRAP_CONTRACT,
1367
+ WRAP_ACTIONS: {
1368
+ SAVE_ADDRESS: "saveaddress2",
1369
+ DELETE_ADDRESS: "deladdress2",
1370
+ WRAP_START: "wrapstart2",
1371
+ WRAP_FINISH: "wrapfinish2",
1372
+ WRAP_PROCESS: "wrapprocess2",
1373
+ WRAP_SET_CONF: "wrapsetconf2"
1374
+ },
1375
+ WRAP_TABLES: {
1376
+ ADDRESSES: "addresses2",
1377
+ WRAPS: "wraps2"
1378
+ },
1379
+ ADDRESSES_INDEXES: {
1380
+ BY_ACCOUNT: 2,
1381
+ BY_ADDR_HASH: 3
1382
+ },
1383
+ WRAPS_INDEXES: {
1384
+ BY_ACCOUNT: 2,
1385
+ BY_STATUS: 3,
1386
+ BY_WRAP_HASH: 4
1387
+ },
1388
+ WRAP_PROCESS_TIMER: 5e3,
1389
+ FARM_CONTRACT: "yield.farms",
1390
+ WEBHOOK_PERMISSION: "webhook",
1391
+ PUBLIC_PERMISSION: "public",
1392
+ LIGHT_PERMISSION: "light",
1393
+ WRAP_AUTH_ACTION,
1394
+ METAL_ENDPOINT: chain === "proton" ? "https://cirrus.metalpay.com" : "https://cirrus-dev.metalpay.com",
1395
+ METAL_PROTON_ENDPOINT: chain === "proton" ? "https://api.protonchain.com" : "https://api-dev.protonchain.com",
1396
+ METAL_DEX_HTTP_ENDPOINT: chain === "proton" ? "https://metal-dexdb.global.binfra.one/dex" : "https://metallicus-dbapi-dev01.binfra.one/dex",
1397
+ METAL_DEX_WS_ENDPOINT: chain === "proton" ? "wss://metal-dexdb.global.binfra.one/dexws" : "wss://metallicus-dbapi-dev01.binfra.one/dexws",
1398
+ PROTON_ENDPOINTS: chain === "proton" ? ["https://metal-proton-rpc.global.binfra.one", "https://proton.greymass.com", "https://proton.eoscafeblock.com", "https://proton.cryptolions.io", "https://proton.eosusa.news"] : ["https://metal-protontest-rpc.global.binfra.one", "https://testnet.protonchain.com"],
1399
+ CHAIN_ID: chain === "proton" ? "384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0" : "71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd",
1400
+ DEX_PROCESS_SIZE: 30,
1401
+ DEX_SLTPPROCESS_SIZE: 10,
1402
+ MAX_PRICE: "9223372036854775806",
1403
+ MAX_ITEMS_PER_PAGE_DESKTOP: 25,
1404
+ MIN_PRICE: 1,
1405
+ DEFAULT_DEX_SYMBOL: chain === "proton" ? "XPR_XMD" : "XPR_XUSDC",
1406
+ CHAIN: chain,
1407
+ SWAP_COINS: swapCoins,
1408
+ BRIDGE_COINS: bridgeCoins,
1409
+ ALL_ENABLED_COINS: allEnabledCoins,
1410
+ LEND_COINS: lendCoins,
1411
+ BORROW_COINS: borrowCoins,
1412
+ LOAN_COINS: loanCoins,
1413
+ ALL_COINS: allCoins,
1414
+ findBridgeCoinWalletByXtokenAndChain(xtokenSymbol, chain2) {
1415
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin2) => bridgeCoin2.xtokenSymbol === xtokenSymbol);
1416
+ if (!bridgeCoin)
1417
+ return void 0;
1418
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet2) => bridgeWallet2.chain === chain2);
1419
+ if (!bridgeWallet)
1420
+ return void 0;
1421
+ return {
1422
+ ...bridgeCoin,
1423
+ ...bridgeWallet
1424
+ };
1425
+ },
1426
+ findBridgeCoinWallet(coin, wallet) {
1427
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin2) => bridgeCoin2.coin === coin);
1428
+ if (!bridgeCoin)
1429
+ return void 0;
1430
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet2) => bridgeWallet2.wallet === wallet);
1431
+ if (!bridgeWallet)
1432
+ return void 0;
1433
+ return {
1434
+ ...bridgeCoin,
1435
+ ...bridgeWallet
1436
+ };
1437
+ },
1438
+ findBridgeCoinNetwork(coin, network) {
1439
+ const bridgeCoin = constants.BRIDGE_COINS.find((bridgeCoin2) => bridgeCoin2.coin === coin);
1440
+ if (!bridgeCoin)
1441
+ return void 0;
1442
+ const bridgeWallet = bridgeCoin.wallets.find((bridgeWallet2) => bridgeWallet2.network === network);
1443
+ if (!bridgeWallet)
1444
+ return void 0;
1445
+ return {
1446
+ ...bridgeCoin,
1447
+ ...bridgeWallet
1448
+ };
1449
+ }
1450
+ };
1451
+ return constants;
1452
+ };
1453
+
1454
+ // src/parsers/auth.ts
1455
+ var createAbstractAuthParser = (contract, action, data) => {
1456
+ return z3.object({
1457
+ signer: authorizationParser,
1458
+ signatures: z3.array(z3.string()).length(1),
1459
+ transaction: singleActionTransactionParser(contract, action, data)
1460
+ });
1461
+ };
1462
+ var generateAuthData = {
1463
+ time: z3.string(),
1464
+ protonAccount: z3.string()
1465
+ };
1466
+ var generateAuthActionsBaseParser = baseActionParser(WRAP_CONTRACT, WRAP_AUTH_ACTION, generateAuthData);
1467
+ var generateAuthParser = createAbstractAuthParser(WRAP_CONTRACT, WRAP_AUTH_ACTION, generateAuthData);
1468
+
1469
+ // src/parsers/address.ts
1470
+ var addressParser = z4.object({
1471
+ index: z4.number(),
1472
+ account: accountParser,
1473
+ chain: z4.string(),
1474
+ address: z4.string(),
1475
+ address_hash: z4.string()
1476
+ });
1477
+ var generateAddressBodyParser = z4.object({
1478
+ coin: z4.string(),
1479
+ wallet: z4.string()
1480
+ }).merge(generateAuthParser);
1481
+ var generateAddressResponse = z4.object({
1482
+ id: z4.string(),
1483
+ // "2448834505708930950",
1484
+ address: z4.string(),
1485
+ // "0x617C03C1E2Bf81C062A4CEfbE312c070E1d86d18",
1486
+ coin: z4.string(),
1487
+ // "ETH",
1488
+ wallet: z4.string(),
1489
+ // "ETH",
1490
+ memo: z4.string().optional()
1491
+ });
1492
+
1493
+ // src/parsers/currency.ts
1494
+ import * as z5 from "zod";
1495
+ var rateParser = z5.object({
1496
+ counterCurrency: z5.string(),
1497
+ price: z5.number(),
1498
+ priceChangePercent: z5.number(),
1499
+ marketCap: z5.number(),
1500
+ volume: z5.number(),
1501
+ timestamp: z5.number()
1502
+ });
1503
+ var exchangeRateParser = z5.object({
1504
+ contract: z5.string(),
1505
+ symbol: z5.string(),
1506
+ rank: z5.number(),
1507
+ rates: z5.array(rateParser)
1508
+ });
1509
+ var exchangeRatesParser = z5.array(exchangeRateParser);
1510
+ var bloksRatesParser = z5.array(z5.object({
1511
+ contract: z5.string(),
1512
+ symbol: z5.string(),
1513
+ rank: z5.number(),
1514
+ rates: z5.array(rateParser)
1515
+ }));
1516
+
1517
+ // src/parsers/deposit.ts
1518
+ import * as z6 from "zod";
1519
+ var Type = /* @__PURE__ */ ((Type2) => {
1520
+ Type2["RECEIVE"] = "receive";
1521
+ Type2["SEND"] = "send";
1522
+ return Type2;
1523
+ })(Type || {});
1524
+ var depositBodyParser = z6.object({
1525
+ id: z6.string(),
1526
+ // "0x000010203121388fac991"
1527
+ type: z6.nativeEnum(Type),
1528
+ // "receive" or "send"
1529
+ hash: z6.string(),
1530
+ // "0x000010203121388fac991"
1531
+ coin: z6.string(),
1532
+ // "ETH" or "XPR"
1533
+ wallet: z6.string(),
1534
+ // "ETH-ROPSTEN" or "XPR-MAINNET"
1535
+ network: z6.string()
1536
+ // "erc29"
1537
+ });
1538
+ var transactionParser = z6.object({
1539
+ id: z6.string(),
1540
+ // "2629304740076324677"
1541
+ wallet: z6.string(),
1542
+ // "ETH"
1543
+ value: z6.number(),
1544
+ // 10000000000000000
1545
+ valueString: z6.string(),
1546
+ // "10000000000000000"
1547
+ address: z6.string(),
1548
+ // "0x0000"
1549
+ type: z6.nativeEnum(Type),
1550
+ // "receive" or "send"
1551
+ state: z6.string(),
1552
+ // "confirmed"
1553
+ confirmations: z6.number(),
1554
+ // 1
1555
+ hash: z6.string(),
1556
+ // "b4781422be95fee8fbbf720e3e0fa9705ae834474ef25f5724cdd0f5d23211ed"
1557
+ blockHash: z6.string().optional().nullable(),
1558
+ // "000000000000000000089b270eb99f75107d6a9cde37ec944cb80a2998df7b43"
1559
+ blockHeight: z6.number().optional().nullable()
1560
+ // 643159
1561
+ });
1562
+
1563
+ // src/parsers/otc.ts
1564
+ import * as z7 from "zod";
1565
+ var otcOrderResponseParser = z7.object({
1566
+ success: z7.boolean(),
1567
+ transaction_id: z7.string(),
1568
+ errormsg: z7.string().optional()
1569
+ });
1570
+ var otcQuoteBodyParser = z7.object({
1571
+ baseAmount: z7.number(),
1572
+ baseSymbol: z7.string(),
1573
+ quoteSymbol: z7.string()
1574
+ });
1575
+ var otcQuoteResponseParser = z7.object({
1576
+ success: z7.boolean(),
1577
+ token: z7.string(),
1578
+ qty: z7.number(),
1579
+ errormsg: z7.string().optional()
1580
+ });
1581
+
1582
+ // src/parsers/withdraw.ts
1583
+ import * as z8 from "zod";
1584
+ var withdrawData = {
1585
+ from: z8.string().refine((val) => val !== WRAP_CONTRACT, {
1586
+ message: `${WRAP_CONTRACT} must be receiver`
1587
+ }),
1588
+ to: z8.literal(WRAP_CONTRACT),
1589
+ quantity: z8.string(),
1590
+ memo: z8.string()
1591
+ };
1592
+ var withdrawBodyBaseAction = baseActionParser("*", "transfer", withdrawData);
1593
+ var withdrawBodyParser = z8.object({
1594
+ signer: authorizationParser,
1595
+ signatures: z8.array(z8.string()).length(1),
1596
+ transaction: singleActionTransactionParser("*", "transfer", withdrawData),
1597
+ quoteId: z8.string(),
1598
+ provider: z8.string().optional()
1599
+ });
1600
+ var withdrawMetalResponseParser = z8.object({
1601
+ success: z8.boolean(),
1602
+ id: z8.string()
1603
+ });
1604
+ var withdrawalFeeQuoteParser = z8.object({
1605
+ quoteId: z8.string(),
1606
+ estimatedFee: z8.string(),
1607
+ currency: z8.string(),
1608
+ network: z8.string()
1609
+ });
1610
+
1611
+ // src/parsers/withdrawalHistory.ts
1612
+ import * as z9 from "zod";
1613
+ var withdrawHistoryMetalSwapParser = z9.object({
1614
+ id: z9.string(),
1615
+ status: z9.string(),
1616
+ amount: z9.string(),
1617
+ currency: z9.string(),
1618
+ network: z9.string(),
1619
+ created: z9.string(),
1620
+ withdrawalAddress: z9.string(),
1621
+ withdrawalHash: z9.string().optional()
1622
+ });
1623
+ var withdrawHistoryMetalResponseParser = z9.object({
1624
+ swaps: z9.array(withdrawHistoryMetalSwapParser),
1625
+ page: z9.number(),
1626
+ pageSize: z9.number(),
1627
+ numberOfElements: z9.number(),
1628
+ totalPages: z9.number(),
1629
+ totalElements: z9.number()
1630
+ });
1631
+
1632
+ // src/parsers/wrap.ts
1633
+ import * as z10 from "zod";
1634
+ var Status = /* @__PURE__ */ ((Status2) => {
1635
+ Status2["PENDING"] = "pending";
1636
+ Status2["SUCCESS"] = "success";
1637
+ Status2["FAIL"] = "fail";
1638
+ Status2["PROCESSING"] = "processing";
1639
+ return Status2;
1640
+ })(Status || {});
1641
+ var wrapStartParser = z10.object({
1642
+ balance: ExtendedAssetParser,
1643
+ id: z10.string(),
1644
+ txid: z10.string(),
1645
+ chain: z10.string(),
1646
+ deposit_address: z10.string(),
1647
+ confirmations: z10.number()
1648
+ });
1649
+ var wrapSetConfParser = z10.object({
1650
+ wrap_hash: z10.string(),
1651
+ confirmations: z10.number()
1652
+ });
1653
+ var wrapParser = z10.object({
1654
+ index: z10.number(),
1655
+ proton_account: z10.string(),
1656
+ balance: ExtendedAssetParser,
1657
+ id: z10.string(),
1658
+ txid: z10.string(),
1659
+ chain: z10.string(),
1660
+ deposit_address: z10.string(),
1661
+ status: z10.nativeEnum(Status),
1662
+ finish_txid: z10.string(),
1663
+ wrap_hash: z10.string(),
1664
+ confirmations: z10.number()
1665
+ });
1666
+
1667
+ // src/parsers/dex.ts
1668
+ import * as z11 from "zod";
1669
+ var ohlcvParser = z11.object({
1670
+ time: z11.number(),
1671
+ open: z11.number(),
1672
+ high: z11.number(),
1673
+ low: z11.number(),
1674
+ close: z11.number(),
1675
+ volume: z11.number(),
1676
+ volume_bid: z11.number(),
1677
+ count: z11.number()
1678
+ });
1679
+ var getOhlcvParser = z11.object({
1680
+ interval: z11.string(),
1681
+ from: z11.string(),
1682
+ to: z11.string(),
1683
+ symbol: z11.string(),
1684
+ limit: z11.string().default("500").refine((n) => +n <= 1e3, "Max limit is 1000")
1685
+ });
1686
+ var getOhlcvResponseParser = z11.object({
1687
+ sync: z11.number(),
1688
+ data: z11.array(ohlcvParser)
1689
+ });
1690
+ var orderHistoryParser = z11.object({
1691
+ seq: z11.number(),
1692
+ block_num: z11.number(),
1693
+ block_time: z11.string(),
1694
+ order_id: z11.number(),
1695
+ market_id: z11.number(),
1696
+ quantity_init: z11.number().optional(),
1697
+ quantity_curr: z11.number(),
1698
+ price: z11.number(),
1699
+ account_name: z11.string(),
1700
+ order_side: z11.number(),
1701
+ order_type: z11.number(),
1702
+ trigger_price: z11.number(),
1703
+ fill_type: z11.number(),
1704
+ status: z11.string(),
1705
+ quantity_change: z11.number(),
1706
+ trx_id: z11.string()
1707
+ });
1708
+ var getOpenOrdersParser = z11.object({
1709
+ account: z11.string(),
1710
+ symbol: z11.string().optional(),
1711
+ offset: z11.string().default("0"),
1712
+ limit: z11.string().default("100").refine((n) => +n <= 250, "Max limit is 250")
1713
+ });
1714
+ var getOpenOrdersResponseParser = z11.object({
1715
+ sync: z11.number(),
1716
+ count: z11.number(),
1717
+ data: z11.array(orderHistoryParser)
1718
+ });
1719
+ var getOrderHistoryParser = z11.object({
1720
+ account: z11.string(),
1721
+ symbol: z11.string().optional(),
1722
+ offset: z11.string().default("0"),
1723
+ limit: z11.string().default("100").refine((n) => +n <= 250, "Max limit is 250"),
1724
+ trx_id: z11.string().optional(),
1725
+ status: z11.string().optional()
1726
+ });
1727
+ var getOrderHistoryResponseParser = z11.object({
1728
+ sync: z11.number(),
1729
+ count: z11.number(),
1730
+ data: z11.array(orderHistoryParser)
1731
+ });
1732
+ var getOrderParser = z11.object({
1733
+ order_id: z11.string()
1734
+ });
1735
+ var getOrderResponseParser = z11.object({
1736
+ sync: z11.number(),
1737
+ data: z11.array(orderHistoryParser)
1738
+ });
1739
+ var depthParser = z11.object({
1740
+ level: z11.number(),
1741
+ ask: z11.number(),
1742
+ bid: z11.number(),
1743
+ count: z11.number()
1744
+ });
1745
+ var getDepthParser = z11.object({
1746
+ symbol: z11.string(),
1747
+ step: z11.string(),
1748
+ limit: z11.string().default("100").refine((n) => +n <= 250, "Max limit is 250")
1749
+ });
1750
+ var getDepthResponseParser = z11.object({
1751
+ sync: z11.number(),
1752
+ data: z11.object({
1753
+ bids: z11.array(depthParser),
1754
+ asks: z11.array(depthParser)
1755
+ })
1756
+ });
1757
+ var dailyParser = z11.object({
1758
+ market_id: z11.number(),
1759
+ first: z11.number(),
1760
+ last: z11.number(),
1761
+ bid: z11.number(),
1762
+ ask: z11.number(),
1763
+ change_percentage_24hr: z11.number(),
1764
+ high: z11.number(),
1765
+ low: z11.number()
1766
+ });
1767
+ var getDailyResponseParser = z11.object({
1768
+ sync: z11.number(),
1769
+ data: z11.array(dailyParser)
1770
+ });
1771
+ var marketParser = z11.object({
1772
+ market_id: z11.number(),
1773
+ symbol: z11.string(),
1774
+ status_code: z11.number(),
1775
+ type: z11.string(),
1776
+ maker_fee: z11.number(),
1777
+ taker_fee: z11.number(),
1778
+ order_min: z11.number(),
1779
+ bid_token: z11.object({
1780
+ code: z11.string(),
1781
+ precision: z11.number(),
1782
+ contract: z11.string(),
1783
+ multiplier: z11.number()
1784
+ }),
1785
+ ask_token: z11.object({
1786
+ code: z11.string(),
1787
+ precision: z11.number(),
1788
+ contract: z11.string(),
1789
+ multiplier: z11.number()
1790
+ })
1791
+ });
1792
+ var getMarketsResponseParser = z11.object({
1793
+ sync: z11.number(),
1794
+ data: z11.array(marketParser)
1795
+ });
1796
+ var tradeParser = z11.object({
1797
+ block_num: z11.number(),
1798
+ block_time: z11.string(),
1799
+ trade_id: z11.number(),
1800
+ market_id: z11.number(),
1801
+ price: z11.number(),
1802
+ bid_user: z11.string(),
1803
+ bid_user_order_id: z11.number(),
1804
+ bid_total: z11.number(),
1805
+ bid_amount: z11.number(),
1806
+ bid_fee: z11.number(),
1807
+ ask_user: z11.string(),
1808
+ ask_user_order_id: z11.number(),
1809
+ ask_total: z11.number(),
1810
+ ask_amount: z11.number(),
1811
+ ask_fee: z11.number(),
1812
+ order_side: z11.number(),
1813
+ trx_id: z11.string()
1814
+ });
1815
+ var getTradesParser = z11.object({
1816
+ symbol: z11.string(),
1817
+ offset: z11.string().default("0"),
1818
+ limit: z11.string().default("100").refine((n) => +n <= 250, "Max limit is 250")
1819
+ });
1820
+ var getTradesResponseParser = z11.object({
1821
+ sync: z11.number(),
1822
+ data: z11.array(tradeParser)
1823
+ });
1824
+ var getTradeHistoryParser = z11.object({
1825
+ account: z11.string(),
1826
+ symbol: z11.string().optional(),
1827
+ offset: z11.string().default("0"),
1828
+ limit: z11.string().default("100").refine((n) => +n <= 250, "Max limit is 250")
1829
+ });
1830
+ var getTradeHistoryResponseParser = z11.object({
1831
+ sync: z11.number(),
1832
+ count: z11.number(),
1833
+ data: z11.array(tradeParser)
1834
+ });
1835
+ var syncParser = z11.object({
1836
+ sourceid: z11.number(),
1837
+ block_num: z11.string(),
1838
+ block_time: z11.string(),
1839
+ irreversible: z11.string(),
1840
+ is_master: z11.number(),
1841
+ last_updated: z11.string()
1842
+ });
1843
+ var getSyncResponseParser = z11.object({
1844
+ dbSecondsBehind: z11.number(),
1845
+ chronicleSecondsBehind: z11.number(),
1846
+ maxSecondsBehind: z11.number()
1847
+ });
1848
+ var refferalTotalParser = z11.object({
1849
+ referrer: z11.string(),
1850
+ market_id: z11.number(),
1851
+ bid_fee: z11.number(),
1852
+ bid_total: z11.number(),
1853
+ ask_fee: z11.number(),
1854
+ ask_total: z11.number()
1855
+ });
1856
+ var getReferralTotalsParser = z11.object({
1857
+ referrer: z11.string()
1858
+ });
1859
+ var getReferralTotalsResponseParser = z11.object({
1860
+ sync: z11.number(),
1861
+ data: z11.array(refferalTotalParser)
1862
+ });
1863
+ var refferalParser = z11.object({
1864
+ referred_user: z11.string()
1865
+ });
1866
+ var getReferralsParser = z11.object({
1867
+ referrer: z11.string()
1868
+ });
1869
+ var getReferralsResponseParser = z11.object({
1870
+ sync: z11.number(),
1871
+ data: z11.array(refferalParser)
1872
+ });
1873
+ var leaderboardParser = z11.object({
1874
+ user: z11.string(),
1875
+ total: z11.number()
1876
+ });
1877
+ var getLeaderboardParser = z11.object({
1878
+ market_ids: z11.array(z11.string()),
1879
+ from: z11.string(),
1880
+ to: z11.string()
1881
+ });
1882
+ var getLeaderboardResponseParser = z11.object({
1883
+ sync: z11.number(),
1884
+ data: z11.array(leaderboardParser)
1885
+ });
1886
+ var orderType = /* @__PURE__ */ ((orderType2) => {
1887
+ orderType2[orderType2["ORDERBOOK"] = 0] = "ORDERBOOK";
1888
+ orderType2[orderType2["LIMIT"] = 1] = "LIMIT";
1889
+ orderType2[orderType2["STOPLOSS"] = 2] = "STOPLOSS";
1890
+ orderType2[orderType2["TAKEPROFIT"] = 3] = "TAKEPROFIT";
1891
+ return orderType2;
1892
+ })(orderType || {});
1893
+ var orderSide = /* @__PURE__ */ ((orderSide2) => {
1894
+ orderSide2[orderSide2["INVALID"] = 0] = "INVALID";
1895
+ orderSide2[orderSide2["BUY"] = 1] = "BUY";
1896
+ orderSide2[orderSide2["SELL"] = 2] = "SELL";
1897
+ return orderSide2;
1898
+ })(orderSide || {});
1899
+ var fillType = /* @__PURE__ */ ((fillType2) => {
1900
+ fillType2[fillType2["GTC"] = 0] = "GTC";
1901
+ fillType2[fillType2["IOC"] = 1] = "IOC";
1902
+ fillType2[fillType2["POST_ONLY"] = 2] = "POST_ONLY";
1903
+ return fillType2;
1904
+ })(fillType || {});
1905
+ var logStatus = /* @__PURE__ */ ((logStatus2) => {
1906
+ logStatus2["CREATE"] = "create";
1907
+ logStatus2["UPDATE"] = "update";
1908
+ logStatus2["TRANSFER"] = "transfer";
1909
+ logStatus2["CANCEL"] = "cancel";
1910
+ logStatus2["DELETE"] = "delete";
1911
+ return logStatus2;
1912
+ })(logStatus || {});
1913
+ var ITopics = /* @__PURE__ */ ((ITopics2) => {
1914
+ ITopics2["TRADES"] = "TRADES";
1915
+ ITopics2["ORDERS"] = "ORDERS";
1916
+ return ITopics2;
1917
+ })(ITopics || {});
1918
+ var TOPICS = {
1919
+ ["TRADES" /* TRADES */]: {
1920
+ topic: "TRADES" /* TRADES */
1921
+ },
1922
+ ["ORDERS" /* ORDERS */]: {
1923
+ topic: "ORDERS" /* ORDERS */
1924
+ }
1925
+ };
1926
+
1927
+ // src/parsers/login.ts
1928
+ import * as z12 from "zod";
1929
+ var loginAccountParamsV3Parser = z12.object({
1930
+ email: z12.string().optional(),
1931
+ verificationCode: z12.string().optional()
1932
+ }).merge(generateAuthParser);
1933
+
1934
+ // src/utils.ts
1935
+ var isSameToken = (token1, token2) => {
1936
+ return token1.xtokenSymbol === token2.xtokenSymbol && token1.xtokenPrecision === token2.xtokenPrecision && token1.xtokenContract === token2.xtokenContract;
1937
+ };
1938
+ var median = (numbers) => {
1939
+ const sorted = numbers.slice().sort((a, b) => a - b);
1940
+ const middle = Math.floor(sorted.length / 2);
1941
+ if (sorted.length % 2 === 0) {
1942
+ return (sorted[middle - 1] + sorted[middle]) / 2;
1943
+ }
1944
+ return sorted[middle];
1945
+ };
1946
+
1947
+ // src/graph.ts
1948
+ import cloneDeep from "lodash.clonedeep";
1949
+ var INode = class {
1950
+ constructor(key, data) {
1951
+ this.key = key;
1952
+ this.data = {};
1953
+ if (data) {
1954
+ this.data = data;
1955
+ }
1956
+ }
1957
+ };
1958
+ var ILink = class {
1959
+ constructor(from, to, data) {
1960
+ this.from = from;
1961
+ this.to = to;
1962
+ this.data = {};
1963
+ if (data) {
1964
+ this.data = data;
1965
+ }
1966
+ }
1967
+ };
1968
+ var Graph = class {
1969
+ constructor() {
1970
+ this.nodes = [];
1971
+ this.links = [];
1972
+ this.lastPathFound = [];
1973
+ this.isEquals = (a, b) => a.key === b.key;
1974
+ }
1975
+ addNode(k, v) {
1976
+ const node = this.findNode(k);
1977
+ if (!node) {
1978
+ this.nodes.push(new INode(k, v));
1979
+ }
1980
+ }
1981
+ addNodes(...nodes) {
1982
+ nodes.forEach((node) => typeof node === "string" ? this.addNode(node) : this.addNode(node[0], node[1]));
1983
+ }
1984
+ findNode(k) {
1985
+ const inode = new INode(k);
1986
+ return this.nodes.find((node) => this.isEquals(node, inode));
1987
+ }
1988
+ findNodes(...keys) {
1989
+ return keys.map((k) => this.findNode(k));
1990
+ }
1991
+ requireFindNodes(...keys) {
1992
+ const nodes = this.findNodes(...keys);
1993
+ if (nodes.some((n) => n === void 0)) {
1994
+ throw new Error("One of the nodes does not exist");
1995
+ }
1996
+ return nodes;
1997
+ }
1998
+ addLink(nodeA, nodeB, data) {
1999
+ const [inodeA, inodeB] = this.requireFindNodes(nodeA, nodeB);
2000
+ this.links.push(new ILink(inodeA, inodeB, data));
2001
+ }
2002
+ addLinks(...links) {
2003
+ links.forEach((link) => this.addLink(...link));
2004
+ }
2005
+ /**
2006
+ * Get all nodes linked
2007
+ * to from `node`.
2008
+ */
2009
+ findLinkedNodes(node) {
2010
+ return this.links.reduce((acc, link) => {
2011
+ if (this.isEquals(link.from, node)) {
2012
+ acc.push(link.to);
2013
+ }
2014
+ return acc;
2015
+ }, []);
2016
+ }
2017
+ findAllPaths(from, to) {
2018
+ const allPaths = [];
2019
+ const [fromNode, toNode] = this.requireFindNodes(from, to);
2020
+ const path = [fromNode];
2021
+ let seen = /* @__PURE__ */ new Set();
2022
+ const stuck = (x) => {
2023
+ if (this.isEquals(x, toNode)) {
2024
+ return false;
2025
+ }
2026
+ for (const y of this.findLinkedNodes(x)) {
2027
+ if (!seen.has(y.key)) {
2028
+ seen.add(y.key);
2029
+ if (!stuck(y)) {
2030
+ return false;
2031
+ }
2032
+ }
2033
+ }
2034
+ return true;
2035
+ };
2036
+ const search = (x) => {
2037
+ if (this.isEquals(x, toNode)) {
2038
+ allPaths.push(cloneDeep(path));
2039
+ return;
2040
+ }
2041
+ seen = new Set(path.map((p) => p.key));
2042
+ if (stuck(x)) {
2043
+ return;
2044
+ }
2045
+ for (const y of this.findLinkedNodes(x)) {
2046
+ if (!path.includes(y)) {
2047
+ path.push(y);
2048
+ search(y);
2049
+ path.pop();
2050
+ }
2051
+ }
2052
+ };
2053
+ search(fromNode);
2054
+ return allPaths;
2055
+ }
2056
+ };
2057
+
2058
+ // node_modules/bignumber.js/bignumber.mjs
2059
+ var isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
2060
+ var mathceil = Math.ceil;
2061
+ var mathfloor = Math.floor;
2062
+ var bignumberError = "[BigNumber Error] ";
2063
+ var tooManyDigits = bignumberError + "Number primitive has more than 15 significant digits: ";
2064
+ var BASE = 1e14;
2065
+ var LOG_BASE = 14;
2066
+ var MAX_SAFE_INTEGER = 9007199254740991;
2067
+ var POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13];
2068
+ var SQRT_BASE = 1e7;
2069
+ var MAX = 1e9;
2070
+ function clone(configObject) {
2071
+ var div, convertBase, parseNumeric, P = BigNumber2.prototype = { constructor: BigNumber2, toString: null, valueOf: null }, ONE = new BigNumber2(1), DECIMAL_PLACES = 20, ROUNDING_MODE = 4, TO_EXP_NEG = -7, TO_EXP_POS = 21, MIN_EXP = -1e7, MAX_EXP = 1e7, CRYPTO = false, MODULO_MODE = 1, POW_PRECISION = 0, FORMAT = {
2072
+ prefix: "",
2073
+ groupSize: 3,
2074
+ secondaryGroupSize: 0,
2075
+ groupSeparator: ",",
2076
+ decimalSeparator: ".",
2077
+ fractionGroupSize: 0,
2078
+ fractionGroupSeparator: "\xA0",
2079
+ // non-breaking space
2080
+ suffix: ""
2081
+ }, ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz", alphabetHasNormalDecimalDigits = true;
2082
+ function BigNumber2(v, b) {
2083
+ var alphabet, c, caseChanged, e, i, isNum, len, str, x = this;
2084
+ if (!(x instanceof BigNumber2))
2085
+ return new BigNumber2(v, b);
2086
+ if (b == null) {
2087
+ if (v && v._isBigNumber === true) {
2088
+ x.s = v.s;
2089
+ if (!v.c || v.e > MAX_EXP) {
2090
+ x.c = x.e = null;
2091
+ } else if (v.e < MIN_EXP) {
2092
+ x.c = [x.e = 0];
2093
+ } else {
2094
+ x.e = v.e;
2095
+ x.c = v.c.slice();
2096
+ }
2097
+ return;
2098
+ }
2099
+ if ((isNum = typeof v == "number") && v * 0 == 0) {
2100
+ x.s = 1 / v < 0 ? (v = -v, -1) : 1;
2101
+ if (v === ~~v) {
2102
+ for (e = 0, i = v; i >= 10; i /= 10, e++)
2103
+ ;
2104
+ if (e > MAX_EXP) {
2105
+ x.c = x.e = null;
2106
+ } else {
2107
+ x.e = e;
2108
+ x.c = [v];
2109
+ }
2110
+ return;
2111
+ }
2112
+ str = String(v);
2113
+ } else {
2114
+ if (!isNumeric.test(str = String(v)))
2115
+ return parseNumeric(x, str, isNum);
2116
+ x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
2117
+ }
2118
+ if ((e = str.indexOf(".")) > -1)
2119
+ str = str.replace(".", "");
2120
+ if ((i = str.search(/e/i)) > 0) {
2121
+ if (e < 0)
2122
+ e = i;
2123
+ e += +str.slice(i + 1);
2124
+ str = str.substring(0, i);
2125
+ } else if (e < 0) {
2126
+ e = str.length;
2127
+ }
2128
+ } else {
2129
+ intCheck(b, 2, ALPHABET.length, "Base");
2130
+ if (b == 10 && alphabetHasNormalDecimalDigits) {
2131
+ x = new BigNumber2(v);
2132
+ return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
2133
+ }
2134
+ str = String(v);
2135
+ if (isNum = typeof v == "number") {
2136
+ if (v * 0 != 0)
2137
+ return parseNumeric(x, str, isNum, b);
2138
+ x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;
2139
+ if (BigNumber2.DEBUG && str.replace(/^0\.0*|\./, "").length > 15) {
2140
+ throw Error(tooManyDigits + v);
2141
+ }
2142
+ } else {
2143
+ x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
2144
+ }
2145
+ alphabet = ALPHABET.slice(0, b);
2146
+ e = i = 0;
2147
+ for (len = str.length; i < len; i++) {
2148
+ if (alphabet.indexOf(c = str.charAt(i)) < 0) {
2149
+ if (c == ".") {
2150
+ if (i > e) {
2151
+ e = len;
2152
+ continue;
2153
+ }
2154
+ } else if (!caseChanged) {
2155
+ if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) {
2156
+ caseChanged = true;
2157
+ i = -1;
2158
+ e = 0;
2159
+ continue;
2160
+ }
2161
+ }
2162
+ return parseNumeric(x, String(v), isNum, b);
2163
+ }
2164
+ }
2165
+ isNum = false;
2166
+ str = convertBase(str, b, 10, x.s);
2167
+ if ((e = str.indexOf(".")) > -1)
2168
+ str = str.replace(".", "");
2169
+ else
2170
+ e = str.length;
2171
+ }
2172
+ for (i = 0; str.charCodeAt(i) === 48; i++)
2173
+ ;
2174
+ for (len = str.length; str.charCodeAt(--len) === 48; )
2175
+ ;
2176
+ if (str = str.slice(i, ++len)) {
2177
+ len -= i;
2178
+ if (isNum && BigNumber2.DEBUG && len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {
2179
+ throw Error(tooManyDigits + x.s * v);
2180
+ }
2181
+ if ((e = e - i - 1) > MAX_EXP) {
2182
+ x.c = x.e = null;
2183
+ } else if (e < MIN_EXP) {
2184
+ x.c = [x.e = 0];
2185
+ } else {
2186
+ x.e = e;
2187
+ x.c = [];
2188
+ i = (e + 1) % LOG_BASE;
2189
+ if (e < 0)
2190
+ i += LOG_BASE;
2191
+ if (i < len) {
2192
+ if (i)
2193
+ x.c.push(+str.slice(0, i));
2194
+ for (len -= LOG_BASE; i < len; ) {
2195
+ x.c.push(+str.slice(i, i += LOG_BASE));
2196
+ }
2197
+ i = LOG_BASE - (str = str.slice(i)).length;
2198
+ } else {
2199
+ i -= len;
2200
+ }
2201
+ for (; i--; str += "0")
2202
+ ;
2203
+ x.c.push(+str);
2204
+ }
2205
+ } else {
2206
+ x.c = [x.e = 0];
2207
+ }
2208
+ }
2209
+ BigNumber2.clone = clone;
2210
+ BigNumber2.ROUND_UP = 0;
2211
+ BigNumber2.ROUND_DOWN = 1;
2212
+ BigNumber2.ROUND_CEIL = 2;
2213
+ BigNumber2.ROUND_FLOOR = 3;
2214
+ BigNumber2.ROUND_HALF_UP = 4;
2215
+ BigNumber2.ROUND_HALF_DOWN = 5;
2216
+ BigNumber2.ROUND_HALF_EVEN = 6;
2217
+ BigNumber2.ROUND_HALF_CEIL = 7;
2218
+ BigNumber2.ROUND_HALF_FLOOR = 8;
2219
+ BigNumber2.EUCLID = 9;
2220
+ BigNumber2.config = BigNumber2.set = function(obj) {
2221
+ var p, v;
2222
+ if (obj != null) {
2223
+ if (typeof obj == "object") {
2224
+ if (obj.hasOwnProperty(p = "DECIMAL_PLACES")) {
2225
+ v = obj[p];
2226
+ intCheck(v, 0, MAX, p);
2227
+ DECIMAL_PLACES = v;
2228
+ }
2229
+ if (obj.hasOwnProperty(p = "ROUNDING_MODE")) {
2230
+ v = obj[p];
2231
+ intCheck(v, 0, 8, p);
2232
+ ROUNDING_MODE = v;
2233
+ }
2234
+ if (obj.hasOwnProperty(p = "EXPONENTIAL_AT")) {
2235
+ v = obj[p];
2236
+ if (v && v.pop) {
2237
+ intCheck(v[0], -MAX, 0, p);
2238
+ intCheck(v[1], 0, MAX, p);
2239
+ TO_EXP_NEG = v[0];
2240
+ TO_EXP_POS = v[1];
2241
+ } else {
2242
+ intCheck(v, -MAX, MAX, p);
2243
+ TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
2244
+ }
2245
+ }
2246
+ if (obj.hasOwnProperty(p = "RANGE")) {
2247
+ v = obj[p];
2248
+ if (v && v.pop) {
2249
+ intCheck(v[0], -MAX, -1, p);
2250
+ intCheck(v[1], 1, MAX, p);
2251
+ MIN_EXP = v[0];
2252
+ MAX_EXP = v[1];
2253
+ } else {
2254
+ intCheck(v, -MAX, MAX, p);
2255
+ if (v) {
2256
+ MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
2257
+ } else {
2258
+ throw Error(bignumberError + p + " cannot be zero: " + v);
2259
+ }
2260
+ }
2261
+ }
2262
+ if (obj.hasOwnProperty(p = "CRYPTO")) {
2263
+ v = obj[p];
2264
+ if (v === !!v) {
2265
+ if (v) {
2266
+ if (typeof crypto != "undefined" && crypto && (crypto.getRandomValues || crypto.randomBytes)) {
2267
+ CRYPTO = v;
2268
+ } else {
2269
+ CRYPTO = !v;
2270
+ throw Error(bignumberError + "crypto unavailable");
2271
+ }
2272
+ } else {
2273
+ CRYPTO = v;
2274
+ }
2275
+ } else {
2276
+ throw Error(bignumberError + p + " not true or false: " + v);
2277
+ }
2278
+ }
2279
+ if (obj.hasOwnProperty(p = "MODULO_MODE")) {
2280
+ v = obj[p];
2281
+ intCheck(v, 0, 9, p);
2282
+ MODULO_MODE = v;
2283
+ }
2284
+ if (obj.hasOwnProperty(p = "POW_PRECISION")) {
2285
+ v = obj[p];
2286
+ intCheck(v, 0, MAX, p);
2287
+ POW_PRECISION = v;
2288
+ }
2289
+ if (obj.hasOwnProperty(p = "FORMAT")) {
2290
+ v = obj[p];
2291
+ if (typeof v == "object")
2292
+ FORMAT = v;
2293
+ else
2294
+ throw Error(bignumberError + p + " not an object: " + v);
2295
+ }
2296
+ if (obj.hasOwnProperty(p = "ALPHABET")) {
2297
+ v = obj[p];
2298
+ if (typeof v == "string" && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) {
2299
+ alphabetHasNormalDecimalDigits = v.slice(0, 10) == "0123456789";
2300
+ ALPHABET = v;
2301
+ } else {
2302
+ throw Error(bignumberError + p + " invalid: " + v);
2303
+ }
2304
+ }
2305
+ } else {
2306
+ throw Error(bignumberError + "Object expected: " + obj);
2307
+ }
2308
+ }
2309
+ return {
2310
+ DECIMAL_PLACES,
2311
+ ROUNDING_MODE,
2312
+ EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
2313
+ RANGE: [MIN_EXP, MAX_EXP],
2314
+ CRYPTO,
2315
+ MODULO_MODE,
2316
+ POW_PRECISION,
2317
+ FORMAT,
2318
+ ALPHABET
2319
+ };
2320
+ };
2321
+ BigNumber2.isBigNumber = function(v) {
2322
+ if (!v || v._isBigNumber !== true)
2323
+ return false;
2324
+ if (!BigNumber2.DEBUG)
2325
+ return true;
2326
+ var i, n, c = v.c, e = v.e, s = v.s;
2327
+ out:
2328
+ if ({}.toString.call(c) == "[object Array]") {
2329
+ if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {
2330
+ if (c[0] === 0) {
2331
+ if (e === 0 && c.length === 1)
2332
+ return true;
2333
+ break out;
2334
+ }
2335
+ i = (e + 1) % LOG_BASE;
2336
+ if (i < 1)
2337
+ i += LOG_BASE;
2338
+ if (String(c[0]).length == i) {
2339
+ for (i = 0; i < c.length; i++) {
2340
+ n = c[i];
2341
+ if (n < 0 || n >= BASE || n !== mathfloor(n))
2342
+ break out;
2343
+ }
2344
+ if (n !== 0)
2345
+ return true;
2346
+ }
2347
+ }
2348
+ } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {
2349
+ return true;
2350
+ }
2351
+ throw Error(bignumberError + "Invalid BigNumber: " + v);
2352
+ };
2353
+ BigNumber2.maximum = BigNumber2.max = function() {
2354
+ return maxOrMin(arguments, P.lt);
2355
+ };
2356
+ BigNumber2.minimum = BigNumber2.min = function() {
2357
+ return maxOrMin(arguments, P.gt);
2358
+ };
2359
+ BigNumber2.random = function() {
2360
+ var pow2_53 = 9007199254740992;
2361
+ var random53bitInt = Math.random() * pow2_53 & 2097151 ? function() {
2362
+ return mathfloor(Math.random() * pow2_53);
2363
+ } : function() {
2364
+ return (Math.random() * 1073741824 | 0) * 8388608 + (Math.random() * 8388608 | 0);
2365
+ };
2366
+ return function(dp) {
2367
+ var a, b, e, k, v, i = 0, c = [], rand = new BigNumber2(ONE);
2368
+ if (dp == null)
2369
+ dp = DECIMAL_PLACES;
2370
+ else
2371
+ intCheck(dp, 0, MAX);
2372
+ k = mathceil(dp / LOG_BASE);
2373
+ if (CRYPTO) {
2374
+ if (crypto.getRandomValues) {
2375
+ a = crypto.getRandomValues(new Uint32Array(k *= 2));
2376
+ for (; i < k; ) {
2377
+ v = a[i] * 131072 + (a[i + 1] >>> 11);
2378
+ if (v >= 9e15) {
2379
+ b = crypto.getRandomValues(new Uint32Array(2));
2380
+ a[i] = b[0];
2381
+ a[i + 1] = b[1];
2382
+ } else {
2383
+ c.push(v % 1e14);
2384
+ i += 2;
2385
+ }
2386
+ }
2387
+ i = k / 2;
2388
+ } else if (crypto.randomBytes) {
2389
+ a = crypto.randomBytes(k *= 7);
2390
+ for (; i < k; ) {
2391
+ v = (a[i] & 31) * 281474976710656 + a[i + 1] * 1099511627776 + a[i + 2] * 4294967296 + a[i + 3] * 16777216 + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];
2392
+ if (v >= 9e15) {
2393
+ crypto.randomBytes(7).copy(a, i);
2394
+ } else {
2395
+ c.push(v % 1e14);
2396
+ i += 7;
2397
+ }
2398
+ }
2399
+ i = k / 7;
2400
+ } else {
2401
+ CRYPTO = false;
2402
+ throw Error(bignumberError + "crypto unavailable");
2403
+ }
2404
+ }
2405
+ if (!CRYPTO) {
2406
+ for (; i < k; ) {
2407
+ v = random53bitInt();
2408
+ if (v < 9e15)
2409
+ c[i++] = v % 1e14;
2410
+ }
2411
+ }
2412
+ k = c[--i];
2413
+ dp %= LOG_BASE;
2414
+ if (k && dp) {
2415
+ v = POWS_TEN[LOG_BASE - dp];
2416
+ c[i] = mathfloor(k / v) * v;
2417
+ }
2418
+ for (; c[i] === 0; c.pop(), i--)
2419
+ ;
2420
+ if (i < 0) {
2421
+ c = [e = 0];
2422
+ } else {
2423
+ for (e = -1; c[0] === 0; c.splice(0, 1), e -= LOG_BASE)
2424
+ ;
2425
+ for (i = 1, v = c[0]; v >= 10; v /= 10, i++)
2426
+ ;
2427
+ if (i < LOG_BASE)
2428
+ e -= LOG_BASE - i;
2429
+ }
2430
+ rand.e = e;
2431
+ rand.c = c;
2432
+ return rand;
2433
+ };
2434
+ }();
2435
+ BigNumber2.sum = function() {
2436
+ var i = 1, args = arguments, sum = new BigNumber2(args[0]);
2437
+ for (; i < args.length; )
2438
+ sum = sum.plus(args[i++]);
2439
+ return sum;
2440
+ };
2441
+ convertBase = function() {
2442
+ var decimal = "0123456789";
2443
+ function toBaseOut(str, baseIn, baseOut, alphabet) {
2444
+ var j, arr = [0], arrL, i = 0, len = str.length;
2445
+ for (; i < len; ) {
2446
+ for (arrL = arr.length; arrL--; arr[arrL] *= baseIn)
2447
+ ;
2448
+ arr[0] += alphabet.indexOf(str.charAt(i++));
2449
+ for (j = 0; j < arr.length; j++) {
2450
+ if (arr[j] > baseOut - 1) {
2451
+ if (arr[j + 1] == null)
2452
+ arr[j + 1] = 0;
2453
+ arr[j + 1] += arr[j] / baseOut | 0;
2454
+ arr[j] %= baseOut;
2455
+ }
2456
+ }
2457
+ }
2458
+ return arr.reverse();
2459
+ }
2460
+ return function(str, baseIn, baseOut, sign, callerIsToString) {
2461
+ var alphabet, d, e, k, r, x, xc, y, i = str.indexOf("."), dp = DECIMAL_PLACES, rm = ROUNDING_MODE;
2462
+ if (i >= 0) {
2463
+ k = POW_PRECISION;
2464
+ POW_PRECISION = 0;
2465
+ str = str.replace(".", "");
2466
+ y = new BigNumber2(baseIn);
2467
+ x = y.pow(str.length - i);
2468
+ POW_PRECISION = k;
2469
+ y.c = toBaseOut(
2470
+ toFixedPoint(coeffToString(x.c), x.e, "0"),
2471
+ 10,
2472
+ baseOut,
2473
+ decimal
2474
+ );
2475
+ y.e = y.c.length;
2476
+ }
2477
+ xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET));
2478
+ e = k = xc.length;
2479
+ for (; xc[--k] == 0; xc.pop())
2480
+ ;
2481
+ if (!xc[0])
2482
+ return alphabet.charAt(0);
2483
+ if (i < 0) {
2484
+ --e;
2485
+ } else {
2486
+ x.c = xc;
2487
+ x.e = e;
2488
+ x.s = sign;
2489
+ x = div(x, y, dp, rm, baseOut);
2490
+ xc = x.c;
2491
+ r = x.r;
2492
+ e = x.e;
2493
+ }
2494
+ d = e + dp + 1;
2495
+ i = xc[d];
2496
+ k = baseOut / 2;
2497
+ r = r || d < 0 || xc[d + 1] != null;
2498
+ r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : i > k || i == k && (rm == 4 || r || rm == 6 && xc[d - 1] & 1 || rm == (x.s < 0 ? 8 : 7));
2499
+ if (d < 1 || !xc[0]) {
2500
+ str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
2501
+ } else {
2502
+ xc.length = d;
2503
+ if (r) {
2504
+ for (--baseOut; ++xc[--d] > baseOut; ) {
2505
+ xc[d] = 0;
2506
+ if (!d) {
2507
+ ++e;
2508
+ xc = [1].concat(xc);
2509
+ }
2510
+ }
2511
+ }
2512
+ for (k = xc.length; !xc[--k]; )
2513
+ ;
2514
+ for (i = 0, str = ""; i <= k; str += alphabet.charAt(xc[i++]))
2515
+ ;
2516
+ str = toFixedPoint(str, e, alphabet.charAt(0));
2517
+ }
2518
+ return str;
2519
+ };
2520
+ }();
2521
+ div = function() {
2522
+ function multiply(x, k, base) {
2523
+ var m, temp, xlo, xhi, carry = 0, i = x.length, klo = k % SQRT_BASE, khi = k / SQRT_BASE | 0;
2524
+ for (x = x.slice(); i--; ) {
2525
+ xlo = x[i] % SQRT_BASE;
2526
+ xhi = x[i] / SQRT_BASE | 0;
2527
+ m = khi * xlo + xhi * klo;
2528
+ temp = klo * xlo + m % SQRT_BASE * SQRT_BASE + carry;
2529
+ carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
2530
+ x[i] = temp % base;
2531
+ }
2532
+ if (carry)
2533
+ x = [carry].concat(x);
2534
+ return x;
2535
+ }
2536
+ function compare2(a, b, aL, bL) {
2537
+ var i, cmp;
2538
+ if (aL != bL) {
2539
+ cmp = aL > bL ? 1 : -1;
2540
+ } else {
2541
+ for (i = cmp = 0; i < aL; i++) {
2542
+ if (a[i] != b[i]) {
2543
+ cmp = a[i] > b[i] ? 1 : -1;
2544
+ break;
2545
+ }
2546
+ }
2547
+ }
2548
+ return cmp;
2549
+ }
2550
+ function subtract(a, b, aL, base) {
2551
+ var i = 0;
2552
+ for (; aL--; ) {
2553
+ a[aL] -= i;
2554
+ i = a[aL] < b[aL] ? 1 : 0;
2555
+ a[aL] = i * base + a[aL] - b[aL];
2556
+ }
2557
+ for (; !a[0] && a.length > 1; a.splice(0, 1))
2558
+ ;
2559
+ }
2560
+ return function(x, y, dp, rm, base) {
2561
+ var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, yL, yz, s = x.s == y.s ? 1 : -1, xc = x.c, yc = y.c;
2562
+ if (!xc || !xc[0] || !yc || !yc[0]) {
2563
+ return new BigNumber2(
2564
+ // Return NaN if either NaN, or both Infinity or 0.
2565
+ !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : (
2566
+ // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
2567
+ xc && xc[0] == 0 || !yc ? s * 0 : s / 0
2568
+ )
2569
+ );
2570
+ }
2571
+ q = new BigNumber2(s);
2572
+ qc = q.c = [];
2573
+ e = x.e - y.e;
2574
+ s = dp + e + 1;
2575
+ if (!base) {
2576
+ base = BASE;
2577
+ e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
2578
+ s = s / LOG_BASE | 0;
2579
+ }
2580
+ for (i = 0; yc[i] == (xc[i] || 0); i++)
2581
+ ;
2582
+ if (yc[i] > (xc[i] || 0))
2583
+ e--;
2584
+ if (s < 0) {
2585
+ qc.push(1);
2586
+ more = true;
2587
+ } else {
2588
+ xL = xc.length;
2589
+ yL = yc.length;
2590
+ i = 0;
2591
+ s += 2;
2592
+ n = mathfloor(base / (yc[0] + 1));
2593
+ if (n > 1) {
2594
+ yc = multiply(yc, n, base);
2595
+ xc = multiply(xc, n, base);
2596
+ yL = yc.length;
2597
+ xL = xc.length;
2598
+ }
2599
+ xi = yL;
2600
+ rem = xc.slice(0, yL);
2601
+ remL = rem.length;
2602
+ for (; remL < yL; rem[remL++] = 0)
2603
+ ;
2604
+ yz = yc.slice();
2605
+ yz = [0].concat(yz);
2606
+ yc0 = yc[0];
2607
+ if (yc[1] >= base / 2)
2608
+ yc0++;
2609
+ do {
2610
+ n = 0;
2611
+ cmp = compare2(yc, rem, yL, remL);
2612
+ if (cmp < 0) {
2613
+ rem0 = rem[0];
2614
+ if (yL != remL)
2615
+ rem0 = rem0 * base + (rem[1] || 0);
2616
+ n = mathfloor(rem0 / yc0);
2617
+ if (n > 1) {
2618
+ if (n >= base)
2619
+ n = base - 1;
2620
+ prod = multiply(yc, n, base);
2621
+ prodL = prod.length;
2622
+ remL = rem.length;
2623
+ while (compare2(prod, rem, prodL, remL) == 1) {
2624
+ n--;
2625
+ subtract(prod, yL < prodL ? yz : yc, prodL, base);
2626
+ prodL = prod.length;
2627
+ cmp = 1;
2628
+ }
2629
+ } else {
2630
+ if (n == 0) {
2631
+ cmp = n = 1;
2632
+ }
2633
+ prod = yc.slice();
2634
+ prodL = prod.length;
2635
+ }
2636
+ if (prodL < remL)
2637
+ prod = [0].concat(prod);
2638
+ subtract(rem, prod, remL, base);
2639
+ remL = rem.length;
2640
+ if (cmp == -1) {
2641
+ while (compare2(yc, rem, yL, remL) < 1) {
2642
+ n++;
2643
+ subtract(rem, yL < remL ? yz : yc, remL, base);
2644
+ remL = rem.length;
2645
+ }
2646
+ }
2647
+ } else if (cmp === 0) {
2648
+ n++;
2649
+ rem = [0];
2650
+ }
2651
+ qc[i++] = n;
2652
+ if (rem[0]) {
2653
+ rem[remL++] = xc[xi] || 0;
2654
+ } else {
2655
+ rem = [xc[xi]];
2656
+ remL = 1;
2657
+ }
2658
+ } while ((xi++ < xL || rem[0] != null) && s--);
2659
+ more = rem[0] != null;
2660
+ if (!qc[0])
2661
+ qc.splice(0, 1);
2662
+ }
2663
+ if (base == BASE) {
2664
+ for (i = 1, s = qc[0]; s >= 10; s /= 10, i++)
2665
+ ;
2666
+ round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);
2667
+ } else {
2668
+ q.e = e;
2669
+ q.r = +more;
2670
+ }
2671
+ return q;
2672
+ };
2673
+ }();
2674
+ function format(n, i, rm, id) {
2675
+ var c0, e, ne, len, str;
2676
+ if (rm == null)
2677
+ rm = ROUNDING_MODE;
2678
+ else
2679
+ intCheck(rm, 0, 8);
2680
+ if (!n.c)
2681
+ return n.toString();
2682
+ c0 = n.c[0];
2683
+ ne = n.e;
2684
+ if (i == null) {
2685
+ str = coeffToString(n.c);
2686
+ str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) ? toExponential(str, ne) : toFixedPoint(str, ne, "0");
2687
+ } else {
2688
+ n = round(new BigNumber2(n), i, rm);
2689
+ e = n.e;
2690
+ str = coeffToString(n.c);
2691
+ len = str.length;
2692
+ if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {
2693
+ for (; len < i; str += "0", len++)
2694
+ ;
2695
+ str = toExponential(str, e);
2696
+ } else {
2697
+ i -= ne;
2698
+ str = toFixedPoint(str, e, "0");
2699
+ if (e + 1 > len) {
2700
+ if (--i > 0)
2701
+ for (str += "."; i--; str += "0")
2702
+ ;
2703
+ } else {
2704
+ i += e - len;
2705
+ if (i > 0) {
2706
+ if (e + 1 == len)
2707
+ str += ".";
2708
+ for (; i--; str += "0")
2709
+ ;
2710
+ }
2711
+ }
2712
+ }
2713
+ }
2714
+ return n.s < 0 && c0 ? "-" + str : str;
2715
+ }
2716
+ function maxOrMin(args, method) {
2717
+ var n, i = 1, m = new BigNumber2(args[0]);
2718
+ for (; i < args.length; i++) {
2719
+ n = new BigNumber2(args[i]);
2720
+ if (!n.s) {
2721
+ m = n;
2722
+ break;
2723
+ } else if (method.call(m, n)) {
2724
+ m = n;
2725
+ }
2726
+ }
2727
+ return m;
2728
+ }
2729
+ function normalise(n, c, e) {
2730
+ var i = 1, j = c.length;
2731
+ for (; !c[--j]; c.pop())
2732
+ ;
2733
+ for (j = c[0]; j >= 10; j /= 10, i++)
2734
+ ;
2735
+ if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {
2736
+ n.c = n.e = null;
2737
+ } else if (e < MIN_EXP) {
2738
+ n.c = [n.e = 0];
2739
+ } else {
2740
+ n.e = e;
2741
+ n.c = c;
2742
+ }
2743
+ return n;
2744
+ }
2745
+ parseNumeric = function() {
2746
+ var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, dotAfter = /^([^.]+)\.$/, dotBefore = /^\.([^.]+)$/, isInfinityOrNaN = /^-?(Infinity|NaN)$/, whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
2747
+ return function(x, str, isNum, b) {
2748
+ var base, s = isNum ? str : str.replace(whitespaceOrPlus, "");
2749
+ if (isInfinityOrNaN.test(s)) {
2750
+ x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
2751
+ } else {
2752
+ if (!isNum) {
2753
+ s = s.replace(basePrefix, function(m, p1, p2) {
2754
+ base = (p2 = p2.toLowerCase()) == "x" ? 16 : p2 == "b" ? 2 : 8;
2755
+ return !b || b == base ? p1 : m;
2756
+ });
2757
+ if (b) {
2758
+ base = b;
2759
+ s = s.replace(dotAfter, "$1").replace(dotBefore, "0.$1");
2760
+ }
2761
+ if (str != s)
2762
+ return new BigNumber2(s, base);
2763
+ }
2764
+ if (BigNumber2.DEBUG) {
2765
+ throw Error(bignumberError + "Not a" + (b ? " base " + b : "") + " number: " + str);
2766
+ }
2767
+ x.s = null;
2768
+ }
2769
+ x.c = x.e = null;
2770
+ };
2771
+ }();
2772
+ function round(x, sd, rm, r) {
2773
+ var d, i, j, k, n, ni, rd, xc = x.c, pows10 = POWS_TEN;
2774
+ if (xc) {
2775
+ out: {
2776
+ for (d = 1, k = xc[0]; k >= 10; k /= 10, d++)
2777
+ ;
2778
+ i = sd - d;
2779
+ if (i < 0) {
2780
+ i += LOG_BASE;
2781
+ j = sd;
2782
+ n = xc[ni = 0];
2783
+ rd = n / pows10[d - j - 1] % 10 | 0;
2784
+ } else {
2785
+ ni = mathceil((i + 1) / LOG_BASE);
2786
+ if (ni >= xc.length) {
2787
+ if (r) {
2788
+ for (; xc.length <= ni; xc.push(0))
2789
+ ;
2790
+ n = rd = 0;
2791
+ d = 1;
2792
+ i %= LOG_BASE;
2793
+ j = i - LOG_BASE + 1;
2794
+ } else {
2795
+ break out;
2796
+ }
2797
+ } else {
2798
+ n = k = xc[ni];
2799
+ for (d = 1; k >= 10; k /= 10, d++)
2800
+ ;
2801
+ i %= LOG_BASE;
2802
+ j = i - LOG_BASE + d;
2803
+ rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
2804
+ }
2805
+ }
2806
+ r = r || sd < 0 || // Are there any non-zero digits after the rounding digit?
2807
+ // The expression n % pows10[d - j - 1] returns all digits of n to the right
2808
+ // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
2809
+ xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);
2810
+ r = rm < 4 ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && // Check whether the digit to the left of the rounding digit is odd.
2811
+ (i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x.s < 0 ? 8 : 7));
2812
+ if (sd < 1 || !xc[0]) {
2813
+ xc.length = 0;
2814
+ if (r) {
2815
+ sd -= x.e + 1;
2816
+ xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
2817
+ x.e = -sd || 0;
2818
+ } else {
2819
+ xc[0] = x.e = 0;
2820
+ }
2821
+ return x;
2822
+ }
2823
+ if (i == 0) {
2824
+ xc.length = ni;
2825
+ k = 1;
2826
+ ni--;
2827
+ } else {
2828
+ xc.length = ni + 1;
2829
+ k = pows10[LOG_BASE - i];
2830
+ xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
2831
+ }
2832
+ if (r) {
2833
+ for (; ; ) {
2834
+ if (ni == 0) {
2835
+ for (i = 1, j = xc[0]; j >= 10; j /= 10, i++)
2836
+ ;
2837
+ j = xc[0] += k;
2838
+ for (k = 1; j >= 10; j /= 10, k++)
2839
+ ;
2840
+ if (i != k) {
2841
+ x.e++;
2842
+ if (xc[0] == BASE)
2843
+ xc[0] = 1;
2844
+ }
2845
+ break;
2846
+ } else {
2847
+ xc[ni] += k;
2848
+ if (xc[ni] != BASE)
2849
+ break;
2850
+ xc[ni--] = 0;
2851
+ k = 1;
2852
+ }
2853
+ }
2854
+ }
2855
+ for (i = xc.length; xc[--i] === 0; xc.pop())
2856
+ ;
2857
+ }
2858
+ if (x.e > MAX_EXP) {
2859
+ x.c = x.e = null;
2860
+ } else if (x.e < MIN_EXP) {
2861
+ x.c = [x.e = 0];
2862
+ }
2863
+ }
2864
+ return x;
2865
+ }
2866
+ function valueOf(n) {
2867
+ var str, e = n.e;
2868
+ if (e === null)
2869
+ return n.toString();
2870
+ str = coeffToString(n.c);
2871
+ str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(str, e) : toFixedPoint(str, e, "0");
2872
+ return n.s < 0 ? "-" + str : str;
2873
+ }
2874
+ P.absoluteValue = P.abs = function() {
2875
+ var x = new BigNumber2(this);
2876
+ if (x.s < 0)
2877
+ x.s = 1;
2878
+ return x;
2879
+ };
2880
+ P.comparedTo = function(y, b) {
2881
+ return compare(this, new BigNumber2(y, b));
2882
+ };
2883
+ P.decimalPlaces = P.dp = function(dp, rm) {
2884
+ var c, n, v, x = this;
2885
+ if (dp != null) {
2886
+ intCheck(dp, 0, MAX);
2887
+ if (rm == null)
2888
+ rm = ROUNDING_MODE;
2889
+ else
2890
+ intCheck(rm, 0, 8);
2891
+ return round(new BigNumber2(x), dp + x.e + 1, rm);
2892
+ }
2893
+ if (!(c = x.c))
2894
+ return null;
2895
+ n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;
2896
+ if (v = c[v])
2897
+ for (; v % 10 == 0; v /= 10, n--)
2898
+ ;
2899
+ if (n < 0)
2900
+ n = 0;
2901
+ return n;
2902
+ };
2903
+ P.dividedBy = P.div = function(y, b) {
2904
+ return div(this, new BigNumber2(y, b), DECIMAL_PLACES, ROUNDING_MODE);
2905
+ };
2906
+ P.dividedToIntegerBy = P.idiv = function(y, b) {
2907
+ return div(this, new BigNumber2(y, b), 0, 1);
2908
+ };
2909
+ P.exponentiatedBy = P.pow = function(n, m) {
2910
+ var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, x = this;
2911
+ n = new BigNumber2(n);
2912
+ if (n.c && !n.isInteger()) {
2913
+ throw Error(bignumberError + "Exponent not an integer: " + valueOf(n));
2914
+ }
2915
+ if (m != null)
2916
+ m = new BigNumber2(m);
2917
+ nIsBig = n.e > 14;
2918
+ if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {
2919
+ y = new BigNumber2(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));
2920
+ return m ? y.mod(m) : y;
2921
+ }
2922
+ nIsNeg = n.s < 0;
2923
+ if (m) {
2924
+ if (m.c ? !m.c[0] : !m.s)
2925
+ return new BigNumber2(NaN);
2926
+ isModExp = !nIsNeg && x.isInteger() && m.isInteger();
2927
+ if (isModExp)
2928
+ x = x.mod(m);
2929
+ } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {
2930
+ k = x.s < 0 && isOdd(n) ? -0 : 0;
2931
+ if (x.e > -1)
2932
+ k = 1 / k;
2933
+ return new BigNumber2(nIsNeg ? 1 / k : k);
2934
+ } else if (POW_PRECISION) {
2935
+ k = mathceil(POW_PRECISION / LOG_BASE + 2);
2936
+ }
2937
+ if (nIsBig) {
2938
+ half = new BigNumber2(0.5);
2939
+ if (nIsNeg)
2940
+ n.s = 1;
2941
+ nIsOdd = isOdd(n);
2942
+ } else {
2943
+ i = Math.abs(+valueOf(n));
2944
+ nIsOdd = i % 2;
2945
+ }
2946
+ y = new BigNumber2(ONE);
2947
+ for (; ; ) {
2948
+ if (nIsOdd) {
2949
+ y = y.times(x);
2950
+ if (!y.c)
2951
+ break;
2952
+ if (k) {
2953
+ if (y.c.length > k)
2954
+ y.c.length = k;
2955
+ } else if (isModExp) {
2956
+ y = y.mod(m);
2957
+ }
2958
+ }
2959
+ if (i) {
2960
+ i = mathfloor(i / 2);
2961
+ if (i === 0)
2962
+ break;
2963
+ nIsOdd = i % 2;
2964
+ } else {
2965
+ n = n.times(half);
2966
+ round(n, n.e + 1, 1);
2967
+ if (n.e > 14) {
2968
+ nIsOdd = isOdd(n);
2969
+ } else {
2970
+ i = +valueOf(n);
2971
+ if (i === 0)
2972
+ break;
2973
+ nIsOdd = i % 2;
2974
+ }
2975
+ }
2976
+ x = x.times(x);
2977
+ if (k) {
2978
+ if (x.c && x.c.length > k)
2979
+ x.c.length = k;
2980
+ } else if (isModExp) {
2981
+ x = x.mod(m);
2982
+ }
2983
+ }
2984
+ if (isModExp)
2985
+ return y;
2986
+ if (nIsNeg)
2987
+ y = ONE.div(y);
2988
+ return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
2989
+ };
2990
+ P.integerValue = function(rm) {
2991
+ var n = new BigNumber2(this);
2992
+ if (rm == null)
2993
+ rm = ROUNDING_MODE;
2994
+ else
2995
+ intCheck(rm, 0, 8);
2996
+ return round(n, n.e + 1, rm);
2997
+ };
2998
+ P.isEqualTo = P.eq = function(y, b) {
2999
+ return compare(this, new BigNumber2(y, b)) === 0;
3000
+ };
3001
+ P.isFinite = function() {
3002
+ return !!this.c;
3003
+ };
3004
+ P.isGreaterThan = P.gt = function(y, b) {
3005
+ return compare(this, new BigNumber2(y, b)) > 0;
3006
+ };
3007
+ P.isGreaterThanOrEqualTo = P.gte = function(y, b) {
3008
+ return (b = compare(this, new BigNumber2(y, b))) === 1 || b === 0;
3009
+ };
3010
+ P.isInteger = function() {
3011
+ return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
3012
+ };
3013
+ P.isLessThan = P.lt = function(y, b) {
3014
+ return compare(this, new BigNumber2(y, b)) < 0;
3015
+ };
3016
+ P.isLessThanOrEqualTo = P.lte = function(y, b) {
3017
+ return (b = compare(this, new BigNumber2(y, b))) === -1 || b === 0;
3018
+ };
3019
+ P.isNaN = function() {
3020
+ return !this.s;
3021
+ };
3022
+ P.isNegative = function() {
3023
+ return this.s < 0;
3024
+ };
3025
+ P.isPositive = function() {
3026
+ return this.s > 0;
3027
+ };
3028
+ P.isZero = function() {
3029
+ return !!this.c && this.c[0] == 0;
3030
+ };
3031
+ P.minus = function(y, b) {
3032
+ var i, j, t, xLTy, x = this, a = x.s;
3033
+ y = new BigNumber2(y, b);
3034
+ b = y.s;
3035
+ if (!a || !b)
3036
+ return new BigNumber2(NaN);
3037
+ if (a != b) {
3038
+ y.s = -b;
3039
+ return x.plus(y);
3040
+ }
3041
+ var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c;
3042
+ if (!xe || !ye) {
3043
+ if (!xc || !yc)
3044
+ return xc ? (y.s = -b, y) : new BigNumber2(yc ? x : NaN);
3045
+ if (!xc[0] || !yc[0]) {
3046
+ return yc[0] ? (y.s = -b, y) : new BigNumber2(xc[0] ? x : (
3047
+ // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
3048
+ ROUNDING_MODE == 3 ? -0 : 0
3049
+ ));
3050
+ }
3051
+ }
3052
+ xe = bitFloor(xe);
3053
+ ye = bitFloor(ye);
3054
+ xc = xc.slice();
3055
+ if (a = xe - ye) {
3056
+ if (xLTy = a < 0) {
3057
+ a = -a;
3058
+ t = xc;
3059
+ } else {
3060
+ ye = xe;
3061
+ t = yc;
3062
+ }
3063
+ t.reverse();
3064
+ for (b = a; b--; t.push(0))
3065
+ ;
3066
+ t.reverse();
3067
+ } else {
3068
+ j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;
3069
+ for (a = b = 0; b < j; b++) {
3070
+ if (xc[b] != yc[b]) {
3071
+ xLTy = xc[b] < yc[b];
3072
+ break;
3073
+ }
3074
+ }
3075
+ }
3076
+ if (xLTy)
3077
+ t = xc, xc = yc, yc = t, y.s = -y.s;
3078
+ b = (j = yc.length) - (i = xc.length);
3079
+ if (b > 0)
3080
+ for (; b--; xc[i++] = 0)
3081
+ ;
3082
+ b = BASE - 1;
3083
+ for (; j > a; ) {
3084
+ if (xc[--j] < yc[j]) {
3085
+ for (i = j; i && !xc[--i]; xc[i] = b)
3086
+ ;
3087
+ --xc[i];
3088
+ xc[j] += BASE;
3089
+ }
3090
+ xc[j] -= yc[j];
3091
+ }
3092
+ for (; xc[0] == 0; xc.splice(0, 1), --ye)
3093
+ ;
3094
+ if (!xc[0]) {
3095
+ y.s = ROUNDING_MODE == 3 ? -1 : 1;
3096
+ y.c = [y.e = 0];
3097
+ return y;
3098
+ }
3099
+ return normalise(y, xc, ye);
3100
+ };
3101
+ P.modulo = P.mod = function(y, b) {
3102
+ var q, s, x = this;
3103
+ y = new BigNumber2(y, b);
3104
+ if (!x.c || !y.s || y.c && !y.c[0]) {
3105
+ return new BigNumber2(NaN);
3106
+ } else if (!y.c || x.c && !x.c[0]) {
3107
+ return new BigNumber2(x);
3108
+ }
3109
+ if (MODULO_MODE == 9) {
3110
+ s = y.s;
3111
+ y.s = 1;
3112
+ q = div(x, y, 0, 3);
3113
+ y.s = s;
3114
+ q.s *= s;
3115
+ } else {
3116
+ q = div(x, y, 0, MODULO_MODE);
3117
+ }
3118
+ y = x.minus(q.times(y));
3119
+ if (!y.c[0] && MODULO_MODE == 1)
3120
+ y.s = x.s;
3121
+ return y;
3122
+ };
3123
+ P.multipliedBy = P.times = function(y, b) {
3124
+ var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, base, sqrtBase, x = this, xc = x.c, yc = (y = new BigNumber2(y, b)).c;
3125
+ if (!xc || !yc || !xc[0] || !yc[0]) {
3126
+ if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
3127
+ y.c = y.e = y.s = null;
3128
+ } else {
3129
+ y.s *= x.s;
3130
+ if (!xc || !yc) {
3131
+ y.c = y.e = null;
3132
+ } else {
3133
+ y.c = [0];
3134
+ y.e = 0;
3135
+ }
3136
+ }
3137
+ return y;
3138
+ }
3139
+ e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
3140
+ y.s *= x.s;
3141
+ xcL = xc.length;
3142
+ ycL = yc.length;
3143
+ if (xcL < ycL)
3144
+ zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;
3145
+ for (i = xcL + ycL, zc = []; i--; zc.push(0))
3146
+ ;
3147
+ base = BASE;
3148
+ sqrtBase = SQRT_BASE;
3149
+ for (i = ycL; --i >= 0; ) {
3150
+ c = 0;
3151
+ ylo = yc[i] % sqrtBase;
3152
+ yhi = yc[i] / sqrtBase | 0;
3153
+ for (k = xcL, j = i + k; j > i; ) {
3154
+ xlo = xc[--k] % sqrtBase;
3155
+ xhi = xc[k] / sqrtBase | 0;
3156
+ m = yhi * xlo + xhi * ylo;
3157
+ xlo = ylo * xlo + m % sqrtBase * sqrtBase + zc[j] + c;
3158
+ c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
3159
+ zc[j--] = xlo % base;
3160
+ }
3161
+ zc[j] = c;
3162
+ }
3163
+ if (c) {
3164
+ ++e;
3165
+ } else {
3166
+ zc.splice(0, 1);
3167
+ }
3168
+ return normalise(y, zc, e);
3169
+ };
3170
+ P.negated = function() {
3171
+ var x = new BigNumber2(this);
3172
+ x.s = -x.s || null;
3173
+ return x;
3174
+ };
3175
+ P.plus = function(y, b) {
3176
+ var t, x = this, a = x.s;
3177
+ y = new BigNumber2(y, b);
3178
+ b = y.s;
3179
+ if (!a || !b)
3180
+ return new BigNumber2(NaN);
3181
+ if (a != b) {
3182
+ y.s = -b;
3183
+ return x.minus(y);
3184
+ }
3185
+ var xe = x.e / LOG_BASE, ye = y.e / LOG_BASE, xc = x.c, yc = y.c;
3186
+ if (!xe || !ye) {
3187
+ if (!xc || !yc)
3188
+ return new BigNumber2(a / 0);
3189
+ if (!xc[0] || !yc[0])
3190
+ return yc[0] ? y : new BigNumber2(xc[0] ? x : a * 0);
3191
+ }
3192
+ xe = bitFloor(xe);
3193
+ ye = bitFloor(ye);
3194
+ xc = xc.slice();
3195
+ if (a = xe - ye) {
3196
+ if (a > 0) {
3197
+ ye = xe;
3198
+ t = yc;
3199
+ } else {
3200
+ a = -a;
3201
+ t = xc;
3202
+ }
3203
+ t.reverse();
3204
+ for (; a--; t.push(0))
3205
+ ;
3206
+ t.reverse();
3207
+ }
3208
+ a = xc.length;
3209
+ b = yc.length;
3210
+ if (a - b < 0)
3211
+ t = yc, yc = xc, xc = t, b = a;
3212
+ for (a = 0; b; ) {
3213
+ a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
3214
+ xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
3215
+ }
3216
+ if (a) {
3217
+ xc = [a].concat(xc);
3218
+ ++ye;
3219
+ }
3220
+ return normalise(y, xc, ye);
3221
+ };
3222
+ P.precision = P.sd = function(sd, rm) {
3223
+ var c, n, v, x = this;
3224
+ if (sd != null && sd !== !!sd) {
3225
+ intCheck(sd, 1, MAX);
3226
+ if (rm == null)
3227
+ rm = ROUNDING_MODE;
3228
+ else
3229
+ intCheck(rm, 0, 8);
3230
+ return round(new BigNumber2(x), sd, rm);
3231
+ }
3232
+ if (!(c = x.c))
3233
+ return null;
3234
+ v = c.length - 1;
3235
+ n = v * LOG_BASE + 1;
3236
+ if (v = c[v]) {
3237
+ for (; v % 10 == 0; v /= 10, n--)
3238
+ ;
3239
+ for (v = c[0]; v >= 10; v /= 10, n++)
3240
+ ;
3241
+ }
3242
+ if (sd && x.e + 1 > n)
3243
+ n = x.e + 1;
3244
+ return n;
3245
+ };
3246
+ P.shiftedBy = function(k) {
3247
+ intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
3248
+ return this.times("1e" + k);
3249
+ };
3250
+ P.squareRoot = P.sqrt = function() {
3251
+ var m, n, r, rep, t, x = this, c = x.c, s = x.s, e = x.e, dp = DECIMAL_PLACES + 4, half = new BigNumber2("0.5");
3252
+ if (s !== 1 || !c || !c[0]) {
3253
+ return new BigNumber2(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
3254
+ }
3255
+ s = Math.sqrt(+valueOf(x));
3256
+ if (s == 0 || s == 1 / 0) {
3257
+ n = coeffToString(c);
3258
+ if ((n.length + e) % 2 == 0)
3259
+ n += "0";
3260
+ s = Math.sqrt(+n);
3261
+ e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);
3262
+ if (s == 1 / 0) {
3263
+ n = "5e" + e;
3264
+ } else {
3265
+ n = s.toExponential();
3266
+ n = n.slice(0, n.indexOf("e") + 1) + e;
3267
+ }
3268
+ r = new BigNumber2(n);
3269
+ } else {
3270
+ r = new BigNumber2(s + "");
3271
+ }
3272
+ if (r.c[0]) {
3273
+ e = r.e;
3274
+ s = e + dp;
3275
+ if (s < 3)
3276
+ s = 0;
3277
+ for (; ; ) {
3278
+ t = r;
3279
+ r = half.times(t.plus(div(x, t, dp, 1)));
3280
+ if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {
3281
+ if (r.e < e)
3282
+ --s;
3283
+ n = n.slice(s - 3, s + 1);
3284
+ if (n == "9999" || !rep && n == "4999") {
3285
+ if (!rep) {
3286
+ round(t, t.e + DECIMAL_PLACES + 2, 0);
3287
+ if (t.times(t).eq(x)) {
3288
+ r = t;
3289
+ break;
3290
+ }
3291
+ }
3292
+ dp += 4;
3293
+ s += 4;
3294
+ rep = 1;
3295
+ } else {
3296
+ if (!+n || !+n.slice(1) && n.charAt(0) == "5") {
3297
+ round(r, r.e + DECIMAL_PLACES + 2, 1);
3298
+ m = !r.times(r).eq(x);
3299
+ }
3300
+ break;
3301
+ }
3302
+ }
3303
+ }
3304
+ }
3305
+ return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
3306
+ };
3307
+ P.toExponential = function(dp, rm) {
3308
+ if (dp != null) {
3309
+ intCheck(dp, 0, MAX);
3310
+ dp++;
3311
+ }
3312
+ return format(this, dp, rm, 1);
3313
+ };
3314
+ P.toFixed = function(dp, rm) {
3315
+ if (dp != null) {
3316
+ intCheck(dp, 0, MAX);
3317
+ dp = dp + this.e + 1;
3318
+ }
3319
+ return format(this, dp, rm);
3320
+ };
3321
+ P.toFormat = function(dp, rm, format2) {
3322
+ var str, x = this;
3323
+ if (format2 == null) {
3324
+ if (dp != null && rm && typeof rm == "object") {
3325
+ format2 = rm;
3326
+ rm = null;
3327
+ } else if (dp && typeof dp == "object") {
3328
+ format2 = dp;
3329
+ dp = rm = null;
3330
+ } else {
3331
+ format2 = FORMAT;
3332
+ }
3333
+ } else if (typeof format2 != "object") {
3334
+ throw Error(bignumberError + "Argument not an object: " + format2);
3335
+ }
3336
+ str = x.toFixed(dp, rm);
3337
+ if (x.c) {
3338
+ var i, arr = str.split("."), g1 = +format2.groupSize, g2 = +format2.secondaryGroupSize, groupSeparator = format2.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length;
3339
+ if (g2)
3340
+ i = g1, g1 = g2, g2 = i, len -= i;
3341
+ if (g1 > 0 && len > 0) {
3342
+ i = len % g1 || g1;
3343
+ intPart = intDigits.substr(0, i);
3344
+ for (; i < len; i += g1)
3345
+ intPart += groupSeparator + intDigits.substr(i, g1);
3346
+ if (g2 > 0)
3347
+ intPart += groupSeparator + intDigits.slice(i);
3348
+ if (isNeg)
3349
+ intPart = "-" + intPart;
3350
+ }
3351
+ str = fractionPart ? intPart + (format2.decimalSeparator || "") + ((g2 = +format2.fractionGroupSize) ? fractionPart.replace(
3352
+ new RegExp("\\d{" + g2 + "}\\B", "g"),
3353
+ "$&" + (format2.fractionGroupSeparator || "")
3354
+ ) : fractionPart) : intPart;
3355
+ }
3356
+ return (format2.prefix || "") + str + (format2.suffix || "");
3357
+ };
3358
+ P.toFraction = function(md) {
3359
+ var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, x = this, xc = x.c;
3360
+ if (md != null) {
3361
+ n = new BigNumber2(md);
3362
+ if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
3363
+ throw Error(bignumberError + "Argument " + (n.isInteger() ? "out of range: " : "not an integer: ") + valueOf(n));
3364
+ }
3365
+ }
3366
+ if (!xc)
3367
+ return new BigNumber2(x);
3368
+ d = new BigNumber2(ONE);
3369
+ n1 = d0 = new BigNumber2(ONE);
3370
+ d1 = n0 = new BigNumber2(ONE);
3371
+ s = coeffToString(xc);
3372
+ e = d.e = s.length - x.e - 1;
3373
+ d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
3374
+ md = !md || n.comparedTo(d) > 0 ? e > 0 ? d : n1 : n;
3375
+ exp = MAX_EXP;
3376
+ MAX_EXP = 1 / 0;
3377
+ n = new BigNumber2(s);
3378
+ n0.c[0] = 0;
3379
+ for (; ; ) {
3380
+ q = div(n, d, 0, 1);
3381
+ d2 = d0.plus(q.times(d1));
3382
+ if (d2.comparedTo(md) == 1)
3383
+ break;
3384
+ d0 = d1;
3385
+ d1 = d2;
3386
+ n1 = n0.plus(q.times(d2 = n1));
3387
+ n0 = d2;
3388
+ d = n.minus(q.times(d2 = d));
3389
+ n = d2;
3390
+ }
3391
+ d2 = div(md.minus(d0), d1, 0, 1);
3392
+ n0 = n0.plus(d2.times(n1));
3393
+ d0 = d0.plus(d2.times(d1));
3394
+ n0.s = n1.s = x.s;
3395
+ e = e * 2;
3396
+ r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(
3397
+ div(n0, d0, e, ROUNDING_MODE).minus(x).abs()
3398
+ ) < 1 ? [n1, d1] : [n0, d0];
3399
+ MAX_EXP = exp;
3400
+ return r;
3401
+ };
3402
+ P.toNumber = function() {
3403
+ return +valueOf(this);
3404
+ };
3405
+ P.toPrecision = function(sd, rm) {
3406
+ if (sd != null)
3407
+ intCheck(sd, 1, MAX);
3408
+ return format(this, sd, rm, 2);
3409
+ };
3410
+ P.toString = function(b) {
3411
+ var str, n = this, s = n.s, e = n.e;
3412
+ if (e === null) {
3413
+ if (s) {
3414
+ str = "Infinity";
3415
+ if (s < 0)
3416
+ str = "-" + str;
3417
+ } else {
3418
+ str = "NaN";
3419
+ }
3420
+ } else {
3421
+ if (b == null) {
3422
+ str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(coeffToString(n.c), e) : toFixedPoint(coeffToString(n.c), e, "0");
3423
+ } else if (b === 10 && alphabetHasNormalDecimalDigits) {
3424
+ n = round(new BigNumber2(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);
3425
+ str = toFixedPoint(coeffToString(n.c), n.e, "0");
3426
+ } else {
3427
+ intCheck(b, 2, ALPHABET.length, "Base");
3428
+ str = convertBase(toFixedPoint(coeffToString(n.c), e, "0"), 10, b, s, true);
3429
+ }
3430
+ if (s < 0 && n.c[0])
3431
+ str = "-" + str;
3432
+ }
3433
+ return str;
3434
+ };
3435
+ P.valueOf = P.toJSON = function() {
3436
+ return valueOf(this);
3437
+ };
3438
+ P._isBigNumber = true;
3439
+ P[Symbol.toStringTag] = "BigNumber";
3440
+ P[Symbol.for("nodejs.util.inspect.custom")] = P.valueOf;
3441
+ if (configObject != null)
3442
+ BigNumber2.set(configObject);
3443
+ return BigNumber2;
3444
+ }
3445
+ function bitFloor(n) {
3446
+ var i = n | 0;
3447
+ return n > 0 || n === i ? i : i - 1;
3448
+ }
3449
+ function coeffToString(a) {
3450
+ var s, z13, i = 1, j = a.length, r = a[0] + "";
3451
+ for (; i < j; ) {
3452
+ s = a[i++] + "";
3453
+ z13 = LOG_BASE - s.length;
3454
+ for (; z13--; s = "0" + s)
3455
+ ;
3456
+ r += s;
3457
+ }
3458
+ for (j = r.length; r.charCodeAt(--j) === 48; )
3459
+ ;
3460
+ return r.slice(0, j + 1 || 1);
3461
+ }
3462
+ function compare(x, y) {
3463
+ var a, b, xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e;
3464
+ if (!i || !j)
3465
+ return null;
3466
+ a = xc && !xc[0];
3467
+ b = yc && !yc[0];
3468
+ if (a || b)
3469
+ return a ? b ? 0 : -j : i;
3470
+ if (i != j)
3471
+ return i;
3472
+ a = i < 0;
3473
+ b = k == l;
3474
+ if (!xc || !yc)
3475
+ return b ? 0 : !xc ^ a ? 1 : -1;
3476
+ if (!b)
3477
+ return k > l ^ a ? 1 : -1;
3478
+ j = (k = xc.length) < (l = yc.length) ? k : l;
3479
+ for (i = 0; i < j; i++)
3480
+ if (xc[i] != yc[i])
3481
+ return xc[i] > yc[i] ^ a ? 1 : -1;
3482
+ return k == l ? 0 : k > l ^ a ? 1 : -1;
3483
+ }
3484
+ function intCheck(n, min, max, name) {
3485
+ if (n < min || n > max || n !== mathfloor(n)) {
3486
+ throw Error(bignumberError + (name || "Argument") + (typeof n == "number" ? n < min || n > max ? " out of range: " : " not an integer: " : " not a primitive number: ") + String(n));
3487
+ }
3488
+ }
3489
+ function isOdd(n) {
3490
+ var k = n.c.length - 1;
3491
+ return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
3492
+ }
3493
+ function toExponential(str, e) {
3494
+ return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e < 0 ? "e" : "e+") + e;
3495
+ }
3496
+ function toFixedPoint(str, e, z13) {
3497
+ var len, zs;
3498
+ if (e < 0) {
3499
+ for (zs = z13 + "."; ++e; zs += z13)
3500
+ ;
3501
+ str = zs + str;
3502
+ } else {
3503
+ len = str.length;
3504
+ if (++e > len) {
3505
+ for (zs = z13, e -= len; --e; zs += z13)
3506
+ ;
3507
+ str += zs;
3508
+ } else if (e < len) {
3509
+ str = str.slice(0, e) + "." + str.slice(e);
3510
+ }
3511
+ }
3512
+ return str;
3513
+ }
3514
+ var BigNumber = clone();
3515
+
3516
+ // src/math.ts
3517
+ var compute_transfer = (pool1, pool2, swap, exchange_fee, precision) => {
3518
+ const term1 = pool2;
3519
+ const term2over = pool1.times(pool2);
3520
+ const term2under = pool1.plus(swap);
3521
+ const term2 = term2over.div(term2under).integerValue(BigNumber.ROUND_DOWN);
3522
+ const term = term1.minus(term2);
3523
+ const fee = new BigNumber(exchange_fee).div(FEE_FACTOR);
3524
+ const result = term.minus(term.times(fee));
3525
+ return result.integerValue(BigNumber.ROUND_DOWN).shiftedBy(-precision);
3526
+ };
3527
+ var compute_transfer_curve = (reserve_in, reserve_out, amount_in, exchange_fee, precision, amplifier) => {
3528
+ if (amplifier === 0) {
3529
+ return compute_transfer(new BigNumber(reserve_in), new BigNumber(reserve_out), new BigNumber(amount_in), exchange_fee, precision);
3530
+ }
3531
+ const MAX_ITERATIONS = 10;
3532
+ const sum = reserve_in + reserve_out;
3533
+ let D = sum;
3534
+ let D_prev = 0;
3535
+ const F = (v) => {
3536
+ return (v >= 0 ? 1 : -1) * Math.floor(Math.abs(v));
3537
+ };
3538
+ let i = MAX_ITERATIONS;
3539
+ while (D != D_prev && i--) {
3540
+ const prod1 = F(F(D * D / (reserve_in * 2)) * D / (reserve_out * 2));
3541
+ D_prev = D;
3542
+ D = F(2 * D * (amplifier * sum + prod1) / ((2 * amplifier - 1) * D + 3 * prod1));
3543
+ }
3544
+ const b = reserve_in + amount_in + F(D / (amplifier * 2)) - D;
3545
+ const c = F(F(D * D / ((reserve_in + amount_in) * 2)) * D / (amplifier * 4));
3546
+ let x = D, x_prev = 0;
3547
+ i = MAX_ITERATIONS;
3548
+ while (x != x_prev && i--) {
3549
+ x_prev = F(x);
3550
+ x = +new BigNumber(x * x + c).div(2 * x + b).toFixed(0, BigNumber.ROUND_DOWN);
3551
+ }
3552
+ if (reserve_out <= x) {
3553
+ throw new Error("curve: insufficient reserve out");
3554
+ }
3555
+ const amount_out_with_fee = new BigNumber(reserve_out - x);
3556
+ const fee = amount_out_with_fee.times(exchange_fee).div(FEE_FACTOR).plus(1).toFixed(0, BigNumber.ROUND_DOWN);
3557
+ const amount_out = amount_out_with_fee.minus(fee);
3558
+ return amount_out.integerValue(BigNumber.ROUND_DOWN).shiftedBy(-precision);
3559
+ };
3560
+ var compute_liquidity = (amount_lt, pool, lt_supply, precision) => {
3561
+ const over = amount_lt.times(pool);
3562
+ const under = lt_supply;
3563
+ const result = over.div(under).integerValue(BigNumber.ROUND_DOWN);
3564
+ return +result.shiftedBy(-precision).toFixed(precision, BigNumber.ROUND_DOWN);
3565
+ };
3566
+ var isInputInvalid = (data, value, pool) => {
3567
+ value = String(value);
3568
+ const isBackspace = data === null;
3569
+ const isNumber = !/[0-9]|\./.test(data);
3570
+ const isDoubleDot = data === "." && value.indexOf(".") !== value.length - 1;
3571
+ const isPrecisionTooHigh = value && value.indexOf(".") !== -1 && value.split(".")[1].length > pool.xtokenPrecision;
3572
+ const isInvalid = !isBackspace && Boolean(isNumber || isDoubleDot || isPrecisionTooHigh);
3573
+ return isInvalid;
3574
+ };
3575
+ var applyDiscountToFee = (fee, staked) => {
3576
+ if (staked >= 1e7) {
3577
+ return fee * 0;
3578
+ } else if (staked >= 1e6) {
3579
+ return fee * 0.33;
3580
+ } else if (staked >= 1e5) {
3581
+ return fee * 0.66;
3582
+ } else {
3583
+ return fee;
3584
+ }
3585
+ };
3586
+ export {
3587
+ Chains,
3588
+ ExtendedAssetParser,
3589
+ FEE_FACTOR,
3590
+ Graph,
3591
+ ILink,
3592
+ INode,
3593
+ ITopics,
3594
+ Networks,
3595
+ Providers,
3596
+ Status,
3597
+ TOPICS,
3598
+ Type,
3599
+ WRAP_AUTH_ACTION,
3600
+ WRAP_CONTRACT,
3601
+ accountParser,
3602
+ addressParser,
3603
+ applyDiscountToFee,
3604
+ authorizationParser,
3605
+ authorizationsParser,
3606
+ baseActionParser,
3607
+ baseActionSerializedParser,
3608
+ bloksRatesParser,
3609
+ compute_liquidity,
3610
+ compute_transfer,
3611
+ compute_transfer_curve,
3612
+ createAbstractAuthParser,
3613
+ dailyParser,
3614
+ depositBodyParser,
3615
+ depthParser,
3616
+ exchangeRateParser,
3617
+ exchangeRatesParser,
3618
+ explorerLinkByChain,
3619
+ fillType,
3620
+ generateAddressBodyParser,
3621
+ generateAddressResponse,
3622
+ generateAuthParser,
3623
+ getDailyResponseParser,
3624
+ getDepthParser,
3625
+ getDepthResponseParser,
3626
+ getLeaderboardParser,
3627
+ getLeaderboardResponseParser,
3628
+ getMarketsResponseParser,
3629
+ getOhlcvParser,
3630
+ getOhlcvResponseParser,
3631
+ getOpenOrdersParser,
3632
+ getOpenOrdersResponseParser,
3633
+ getOrderHistoryParser,
3634
+ getOrderHistoryResponseParser,
3635
+ getOrderParser,
3636
+ getOrderResponseParser,
3637
+ getReferralTotalsParser,
3638
+ getReferralTotalsResponseParser,
3639
+ getReferralsParser,
3640
+ getReferralsResponseParser,
3641
+ getSyncResponseParser,
3642
+ getTradeHistoryParser,
3643
+ getTradeHistoryResponseParser,
3644
+ getTradesParser,
3645
+ getTradesResponseParser,
3646
+ initializeCoins,
3647
+ initializeConstants,
3648
+ isInputInvalid,
3649
+ isSameToken,
3650
+ leaderboardParser,
3651
+ logStatus,
3652
+ loginAccountParamsV3Parser,
3653
+ marketParser,
3654
+ median,
3655
+ ohlcvParser,
3656
+ orderHistoryParser,
3657
+ orderSide,
3658
+ orderType,
3659
+ otcOrderResponseParser,
3660
+ otcQuoteBodyParser,
3661
+ otcQuoteResponseParser,
3662
+ protonExplorerTxUrl,
3663
+ rateParser,
3664
+ refferalParser,
3665
+ refferalTotalParser,
3666
+ similarChains,
3667
+ singleActionTransactionParser,
3668
+ syncParser,
3669
+ tradeParser,
3670
+ transactionParser,
3671
+ webauthActionParser,
3672
+ withdrawBodyParser,
3673
+ withdrawHistoryMetalResponseParser,
3674
+ withdrawHistoryMetalSwapParser,
3675
+ withdrawMetalResponseParser,
3676
+ withdrawalFeeQuoteParser,
3677
+ wrapParser,
3678
+ wrapSetConfParser,
3679
+ wrapStartParser
3680
+ };