decred.org/dcrdex@v1.0.3/client/webserver/site/src/js/registry.ts (about) 1 declare global { 2 interface Window { 3 log: (...args: any) => void 4 enableLogger: (loggerID: string, enable: boolean) => void 5 recordLogger: (loggerID: string, enable: boolean) => void 6 dumpLogger: (loggerID: string) => void 7 mmstatus: () => Promise<MarketMakingStatus> 8 testFormatFourSigFigs: () => void 9 testFormatRateFullPrecision: () => void 10 user: () => User 11 cexBook: () => Promise<void> 12 mmStatus: () => MarketMakingStatus 13 isWebview?: () => boolean 14 webkit: any | undefined 15 openUrl: (url: string) => void 16 sendOSNotification (title: string, body?: string): void 17 clearLocale (): void 18 } 19 } 20 21 export enum ConnectionStatus { 22 Disconnected = 0, 23 Connected = 1, 24 InvalidCert = 2, 25 } 26 27 export interface BondOptions { 28 bondAssetID: number 29 targetTier: number 30 maxBondedAmt: number 31 } 32 33 export interface Reputation { 34 bondedTier: number 35 penalties: number 36 legacyTier: boolean 37 score: number 38 } 39 40 export interface ExchangeAuth { 41 rep: Reputation 42 bondAssetID: number 43 pendingStrength: number 44 weakStrength: number 45 liveStrength: number 46 targetTier: number 47 effectiveTier: number 48 maxBondedAmt: number 49 penaltyComps: number 50 pendingBonds: PendingBondState[] 51 expiredBonds: any[] 52 compensation: number 53 } 54 55 export interface Exchange { 56 host: string 57 acctID: string 58 auth: ExchangeAuth 59 markets: Record<string, Market> 60 assets: Record<number, Asset> 61 connectionStatus: ConnectionStatus 62 viewOnly: boolean 63 bondAssets: Record<string, BondAsset> 64 candleDurs: string[] 65 maxScore: number 66 penaltyThreshold: number 67 disabled:boolean 68 } 69 70 export interface Candle { 71 startStamp: number 72 endStamp: number 73 matchVolume: number 74 quoteVolume: number 75 highRate: number 76 lowRate: number 77 startRate: number 78 endRate: number 79 } 80 81 export interface CandlesPayload { 82 dur: string 83 ms: number 84 candles: Candle[] 85 } 86 87 export interface Market { 88 name: string 89 baseid: number 90 basesymbol: string 91 quoteid: number 92 quotesymbol: string 93 lotsize: number 94 parcelsize: number 95 ratestep: number 96 epochlen: number 97 startepoch: number 98 buybuffer: number 99 orders: Order[] 100 spot: Spot | undefined 101 atomToConv: number 102 inflight: InFlightOrder[] 103 minimumRate: number 104 } 105 106 export interface InFlightOrder extends Order { 107 tempID: number 108 } 109 110 export interface Order { 111 host: string 112 baseID: number 113 baseSymbol: string 114 quoteID: number 115 quoteSymbol: string 116 market: string 117 type: number 118 id: string 119 stamp: number 120 submitTime: number 121 sig: string 122 status: number 123 epoch: number 124 qty: number 125 sell: boolean 126 filled: number 127 matches: Match[] 128 cancelling: boolean 129 canceled: boolean 130 feesPaid: FeeBreakdown 131 fundingCoins: Coin[] 132 accelerationCoins: Coin[] 133 lockedamt: number 134 rate: number // limit only 135 tif: number // limit only 136 targetOrderID: string // cancel only 137 readyToTick: boolean 138 } 139 140 export interface Match { 141 matchID: string 142 status: number 143 active: boolean 144 revoked: boolean 145 rate: number 146 qty: number 147 side: number 148 feeRate: number 149 swap: Coin 150 counterSwap: Coin 151 redeem: Coin 152 counterRedeem: Coin 153 refund: Coin 154 stamp: number 155 isCancel: boolean 156 } 157 158 export interface Spot { 159 stamp: number 160 baseID: number 161 quoteID: number 162 rate: number 163 bookVolume: number // Unused? 164 change24: number 165 vol24: number 166 low24: number 167 high24: number 168 } 169 170 export interface Asset { 171 id: number 172 symbol: string 173 version: number 174 maxFeeRate: number 175 swapSize: number 176 swapSizeBase: number 177 redeemSize: number 178 swapConf: number 179 unitInfo: UnitInfo 180 } 181 182 export interface BondAsset { 183 ver: number 184 id: number 185 confs: number 186 amount: number 187 } 188 189 export interface PendingBondState { 190 symbol: string 191 assetID: number 192 coinID: string 193 confs: number 194 } 195 196 export interface FeeBreakdown { 197 swap: number 198 redemption: number 199 } 200 201 export interface SupportedAsset { 202 id: number 203 symbol: string 204 name: string 205 wallet: WalletState 206 info?: WalletInfo 207 token?: Token 208 unitInfo: UnitInfo 209 walletCreationPending: boolean 210 } 211 212 export interface Token { 213 parentID: number 214 name: string 215 unitInfo: UnitInfo 216 contractAddress: string 217 definition: WalletDefinition 218 } 219 220 export enum ApprovalStatus { 221 Approved = 0, 222 Pending = 1, 223 NotApproved = 2 224 } 225 226 export interface FeeState { 227 rate: number 228 send: number 229 swap: number 230 redeem: number 231 refund: number 232 stampMS: number 233 } 234 235 export interface SyncStatus { 236 synced: boolean 237 targetHeight: number 238 startingBlocks: number 239 blocks: number 240 txs: number | undefined 241 } 242 243 export interface WalletState { 244 symbol: string 245 assetID: number 246 version: number 247 type: string 248 traits: number 249 open: boolean 250 running: boolean 251 disabled: boolean 252 balance: WalletBalance 253 address: string 254 units: string 255 encrypted: boolean 256 peerCount: number 257 synced: boolean 258 syncProgress: number 259 syncStatus: SyncStatus 260 approved: Record<number, ApprovalStatus> 261 feeState?: FeeState 262 } 263 264 export interface WalletInfo { 265 name: string 266 version: number 267 availablewallets: WalletDefinition[] 268 versions: number[] 269 emptyidx: number 270 unitinfo: UnitInfo 271 } 272 273 export interface WalletBalance { 274 available: number 275 immature: number 276 locked: number 277 stamp: string // time.Time 278 orderlocked: number 279 contractlocked: number 280 bondlocked: number 281 bondReserves: number 282 reservesDeficit: number 283 other: Record<string, CustomBalance> 284 } 285 286 export interface CustomBalance { 287 amt: number 288 locked: boolean 289 } 290 291 export interface WalletDefinition { 292 seeded: boolean 293 type: string 294 tab: string 295 description: string 296 configpath: string 297 configopts: ConfigOption[] 298 multifundingopts: OrderOption[] 299 noauth: boolean 300 guidelink: string 301 } 302 303 export interface ConfigOption { 304 key: string 305 displayname: string 306 description: string 307 default: any 308 max: any 309 min: any 310 noecho: boolean 311 isboolean: boolean 312 isdate: boolean 313 disablewhenactive: boolean 314 isBirthdayConfig: boolean 315 repeatable?: string 316 repeatN?: number 317 regAsset?: number 318 required?: boolean 319 dependsOn?: string 320 } 321 322 export interface Coin { 323 id: string 324 stringID: string 325 assetID: number 326 symbol: string 327 confs: Confirmations 328 } 329 330 export interface Confirmations { 331 required: number 332 count: number 333 } 334 335 export interface UnitInfo { 336 atomicUnit: string 337 conventional: Denomination 338 denominations: Denomination[] 339 feeRateDenom: string 340 } 341 342 export interface Denomination { 343 unit: string 344 conversionFactor: number 345 } 346 347 export interface ExtensionConfiguredWallet { 348 hiddenFields: string[] 349 disableWalletType: boolean 350 disablePassword: boolean 351 disableStaking: boolean 352 disablePrivacy: boolean 353 } 354 355 export interface ExtensionModeConfig { 356 name: string 357 restrictedWallets: Record<string, ExtensionConfiguredWallet> 358 } 359 360 export interface User { 361 exchanges: Record<string, Exchange> 362 inited: boolean 363 seedgentime: number 364 assets: Record<number, SupportedAsset> 365 fiatRates: Record<number, number> 366 bots: BotReport[] 367 net: number 368 extensionModeConfig: ExtensionModeConfig 369 actions: ActionRequiredNote[] 370 } 371 372 export interface CoreNote { 373 type: string 374 topic: string 375 subject: string 376 details: string 377 severity: number 378 stamp: number 379 acked: boolean 380 id: string 381 } 382 383 export interface BondNote extends CoreNote { 384 asset: number 385 confirmations: number 386 dex: string 387 coinID: string | null 388 tier: number | null 389 auth: ExchangeAuth | null 390 } 391 392 export interface ReputationNote extends CoreNote { 393 host: string 394 rep: Reputation 395 } 396 397 export interface BalanceNote extends CoreNote { 398 assetID: number 399 balance: WalletBalance 400 } 401 402 export interface RateNote extends CoreNote { 403 fiatRates: Record<number, number> 404 } 405 406 export interface WalletConfigNote extends CoreNote { 407 wallet: WalletState 408 } 409 410 export interface WalletSyncNote extends CoreNote { 411 assetID: number 412 syncStatus: SyncStatus 413 syncProgress: number 414 } 415 416 export type WalletStateNote = WalletConfigNote 417 418 export interface WalletCreationNote extends CoreNote { 419 assetID: number 420 } 421 422 export interface BaseWalletNote { 423 route: string 424 assetID: number 425 } 426 427 export interface TipChangeNote extends BaseWalletNote { 428 tip: number 429 data: any 430 } 431 432 export interface CustomWalletNote extends BaseWalletNote { 433 payload: any 434 } 435 436 export interface TransactionNote extends BaseWalletNote { 437 transaction: WalletTransaction 438 new: boolean 439 } 440 441 export interface ActionRequiredNote extends BaseWalletNote { 442 uniqueID: string 443 actionID: string 444 payload: any 445 } 446 447 export interface ActionResolvedNote extends BaseWalletNote { 448 uniqueID: string 449 } 450 451 export interface TransactionActionNote { 452 tx: WalletTransaction 453 nonce: number 454 newFees: number 455 } 456 457 export interface WalletNote extends CoreNote { 458 payload: BaseWalletNote 459 } 460 461 export interface CoreActionRequiredNote extends CoreNote { 462 payload: ActionRequiredNote 463 } 464 465 export interface RejectedRedemptionData { 466 assetID: number 467 orderID: string 468 coinID: string 469 coinFmt: string 470 } 471 472 export interface SpotPriceNote extends CoreNote { 473 host: string 474 spots: Record<string, Spot> 475 } 476 477 export interface RunStatsNote extends CoreNote { 478 host: string 479 baseID: number 480 quoteID: number 481 stats?: RunStats 482 } 483 484 export interface RunEventNote extends CoreNote { 485 host: string 486 baseID: number 487 quoteID: number 488 startTime: number 489 event: MarketMakingEvent 490 } 491 492 export interface MakerProgram { 493 host: string 494 baseID: number 495 quoteID: number 496 lots: number 497 oracleWeighting: number 498 oracleBias: number 499 driftTolerance: number 500 gapFactor: number 501 gapStrategy: string 502 } 503 504 export interface BotOrder { 505 host: string 506 marketID: string 507 orderID: string 508 } 509 510 export interface BotReport { 511 programID: number 512 program: MakerProgram 513 running: boolean 514 orders: BotOrder 515 } 516 517 export interface LotFees { 518 swap: number 519 redeem: number 520 refund: number 521 } 522 523 export interface LotFeeRange { 524 max: LotFees 525 estimated: LotFees 526 } 527 528 export interface AssetBookingFees extends LotFeeRange { 529 bookingFeesPerLot: number 530 bookingFeesPerCounterLot: number 531 bookingFees: number 532 swapReservesFactor: number // (1 + orderReservesFactor) 533 redeemReservesFactor: number 534 tokenFeesPerSwap: number 535 } 536 537 export interface BookingFees { 538 base: AssetBookingFees 539 quote:AssetBookingFees 540 } 541 542 export interface MarketReport { 543 price: number 544 oracles: OracleReport[] 545 baseFiatRate: number 546 quoteFiatRate: number 547 baseFees: LotFeeRange 548 quoteFees: LotFeeRange 549 } 550 551 export interface MatchNote extends CoreNote { 552 orderID: string 553 match: Match 554 host: string 555 marketID: string 556 } 557 558 export interface ConnEventNote extends CoreNote { 559 host: string 560 connectionStatus: ConnectionStatus 561 } 562 563 export interface OrderNote extends CoreNote { 564 order: Order 565 tempID: number 566 } 567 568 export interface RecentMatch { 569 rate: number 570 qty: number 571 stamp: number 572 sell: boolean 573 } 574 575 export interface EpochNote extends CoreNote { 576 host: string 577 marketID: string 578 epoch: number 579 } 580 581 export interface APIResponse { 582 requestSuccessful: boolean 583 ok: boolean 584 msg: string 585 err?: string 586 } 587 588 export interface LogMessage { 589 time: string 590 msg: string 591 } 592 593 export interface NoteElement extends HTMLElement { 594 note: CoreNote 595 } 596 597 export interface BalanceResponse extends APIResponse { 598 balance: WalletBalance 599 } 600 601 export interface LayoutMetrics { 602 bodyTop: number 603 bodyLeft: number 604 width: number 605 height: number 606 centerX: number 607 centerY: number 608 } 609 610 export interface PageElement extends HTMLElement { 611 value?: string 612 src?: string 613 files?: FileList 614 checked?: boolean 615 href?: string 616 htmlFor?: string 617 name?: string 618 options?: HTMLOptionElement[] 619 selectedIndex?: number 620 disabled?: boolean 621 } 622 623 export interface BooleanConfig { 624 reason: string 625 } 626 627 export interface XYRangePoint { 628 label: string 629 x: number 630 y: number 631 } 632 633 export interface XYRange { 634 start: XYRangePoint 635 end: XYRangePoint 636 xUnit: string 637 yUnit: string 638 roundX?: boolean 639 roundY?: boolean 640 } 641 642 export interface OrderOption extends ConfigOption { 643 boolean?: BooleanConfig 644 xyRange?: XYRange 645 showByDefault?: boolean 646 quoteAssetOnly?: boolean 647 } 648 649 export interface SwapEstimate { 650 lots: number 651 value: number 652 maxFees: number 653 realisticWorstCase: number 654 realisticBestCase: number 655 feeReservesPerLot: number 656 } 657 658 export interface RedeemEstimate { 659 realisticBestCase: number 660 realisticWorstCase: number 661 } 662 663 export interface PreSwap { 664 estimate: SwapEstimate 665 options: OrderOption[] 666 } 667 668 export interface PreRedeem { 669 estimate: RedeemEstimate 670 options: OrderOption[] 671 } 672 673 export interface OrderEstimate { 674 swap: PreSwap 675 redeem: PreRedeem 676 } 677 678 export interface MaxOrderEstimate { 679 swap: SwapEstimate 680 redeem: RedeemEstimate 681 } 682 683 export interface MaxSell { 684 maxSell: MaxOrderEstimate 685 } 686 687 export interface MaxBuy { 688 maxBuy: MaxOrderEstimate 689 } 690 691 export interface TradeForm { 692 host: string 693 isLimit: boolean 694 sell: boolean 695 base: number 696 quote: number 697 qty: number 698 rate: number 699 tifnow: boolean 700 options: Record<string, any> 701 } 702 703 export interface BookUpdate { 704 action: string 705 host: string 706 marketID: string 707 matchesSummary: RecentMatch[] 708 payload: any 709 } 710 711 export interface MiniOrder { 712 qty: number 713 qtyAtomic: number 714 rate: number 715 msgRate: number 716 epoch: number 717 sell: boolean 718 token: string 719 } 720 721 export interface CoreOrderBook { 722 sells: MiniOrder[] 723 buys: MiniOrder[] 724 epoch: MiniOrder[] 725 recentMatches: RecentMatch[] 726 } 727 728 export interface MarketOrderBook { 729 base: number 730 quote: number 731 book: CoreOrderBook 732 } 733 734 export interface RemainderUpdate { 735 token: string 736 qty: number 737 qtyAtomic: number 738 } 739 740 export interface OrderFilterMarket { 741 baseID: number 742 quoteID: number 743 } 744 745 export interface OrderFilter { 746 n?: number 747 offset?: string 748 hosts?: string[] 749 assets?: number[] 750 market?: OrderFilterMarket 751 statuses?: number[] 752 } 753 754 export interface OrderPlacement { 755 lots: number 756 gapFactor: number 757 } 758 759 export interface AutoRebalanceConfig { 760 minBaseTransfer: number 761 minQuoteTransfer: number 762 } 763 764 export interface BasicMarketMakingConfig { 765 gapStrategy: string 766 sellPlacements: OrderPlacement[] 767 buyPlacements: OrderPlacement[] 768 driftTolerance: number 769 } 770 771 export interface ArbMarketMakingPlacement { 772 lots: number 773 multiplier: number 774 } 775 776 export interface ArbMarketMakingConfig { 777 buyPlacements: ArbMarketMakingPlacement[] 778 sellPlacements: ArbMarketMakingPlacement[] 779 profit: number 780 driftTolerance: number 781 orderPersistence: number 782 } 783 784 export interface SimpleArbConfig { 785 profitTrigger: number 786 maxActiveArbs: number 787 numEpochsLeaveOpen: number 788 } 789 790 export interface BotCEXCfg { 791 name: string 792 autoRebalance?: AutoRebalanceConfig 793 } 794 795 export interface BotBalanceAllocation { 796 dex: Record<number, number> 797 cex: Record<number, number> 798 } 799 800 export interface BotAssetConfig { 801 swapFeeN: number 802 orderReservesFactor: number 803 slippageBufferFactor: number 804 transferFactor: number 805 } 806 807 export interface UIConfig { 808 baseConfig: BotAssetConfig 809 quoteConfig: BotAssetConfig 810 simpleArbLots?: number 811 cexRebalance: boolean 812 } 813 814 export interface StartConfig extends MarketWithHost { 815 autoRebalance?: AutoRebalanceConfig 816 alloc: BotBalanceAllocation 817 } 818 819 export interface BotConfig { 820 host: string 821 baseID: number 822 quoteID: number 823 baseWalletOptions?: Record<string, string> 824 quoteWalletOptions?: Record<string, string> 825 cexName: string 826 uiConfig: UIConfig 827 basicMarketMakingConfig?: BasicMarketMakingConfig 828 arbMarketMakingConfig?: ArbMarketMakingConfig 829 simpleArbConfig?: SimpleArbConfig 830 } 831 832 export interface CEXConfig { 833 name: string 834 apiKey: string 835 apiSecret: string 836 } 837 838 export interface MarketWithHost { 839 host: string 840 baseID: number 841 quoteID: number 842 } 843 844 export interface MMCEXStatus { 845 config: CEXConfig 846 connected: boolean 847 connectErr: string 848 markets: Record<string, CEXMarket> 849 balances: Record<number, ExchangeBalance> 850 } 851 852 export interface BotBalance { 853 available: number 854 locked: number 855 pending: number 856 reserved: number 857 } 858 859 export interface BotBalances { 860 dex: BotBalance 861 cex: BotBalance 862 } 863 864 export interface BotInventory { 865 avail: number 866 locked: number // includes BotBalance.reserved 867 total: number // avail + locked 868 } 869 870 export interface RunningBotInventory { 871 avail: number 872 locked: number 873 dex: BotInventory 874 cex: BotInventory 875 } 876 877 export interface CEXNotification extends CoreNote { 878 cexName: string 879 note: any 880 } 881 882 export interface CEXBalanceUpdate { 883 assetID: number 884 balance: ExchangeBalance 885 } 886 887 export interface EpochReportNote extends CoreNote { 888 host: string 889 baseID: number 890 quoteID: number 891 report?: EpochReport 892 } 893 894 export interface CEXProblemsNote extends CoreNote { 895 host: string 896 baseID: number 897 quoteID: number 898 problems?: CEXProblems 899 } 900 901 export interface FeeEstimates extends LotFeeRange { 902 bookingFeesPerLot: number 903 bookingFees: number 904 tokenFeesPerSwap: number 905 } 906 907 export interface ProjectedAlloc { 908 // book is inventory dedicated either to active orders for basicmm and arbmm, 909 // or on reserve for orders in the case of basicarb. book + bookingFees is the 910 // starvation threshold for DEX, meaning it's impossible to start a bot 911 // unstarved if there no way to get book + bookingFees to Bison Wallet. A user 912 // could potentially adjust order reserves or swap fee reserves to free up 913 // more funds, but with possible degradation of bot performance. 914 book: number 915 // booking fees is funding dedicated to covering the fees for funded orders. 916 // bookingFees are in the units of the parent chain for token assets. 917 bookingFees: number 918 // swapFeeReserves is only required for token assets. These are fees 919 // reserved for funding swaps. These fees are only debited, so will definitely 920 // run out eventually, but we'll get a UI that enabled manual and/or auto 921 // refill soon. swapFeeReserves are in the units of the parent chain. 922 swapFeeReserves: number 923 // cex is the inventory dedicated to funding counter-orders on cex for an 924 // arbmm or simplearb bot. cex is the starvation threshold for CEX. 925 cex: number 926 // orderReserves is inventory reserved for facilitating withdraws and 927 // deposits or for replacing matched orders. It's a good idea to have a 928 // little extra around, otherwise a trade sequence gone wrong could put 929 // the bot in a starved or unbalanced state. 930 orderReserves: number 931 // slippageBuffer is only required for the quote asset. This accounts for 932 // variations in rate, because the quote asset's "lot size" varies with 933 // rate. If the rate goes down, the quote-converted lot size goes up, so 934 // we'll let the user choose to reserve a little extra for this case. 935 slippageBuffer: number 936 } 937 938 export interface FeeGapStats { 939 basisPrice: number 940 feeGap: number 941 remoteGap: number 942 roundTripFees: number 943 } 944 945 export interface RunStats { 946 initialBalances: Record<number, number> 947 dexBalances: Record<number, BotBalance> 948 cexBalances: Record<number, BotBalance> 949 profitLoss: ProfitLoss 950 startTime: number 951 pendingDeposits: number 952 pendingWithdrawals: number 953 completedMatches: number 954 tradedUSD: number 955 feeGap: FeeGapStats 956 } 957 958 export interface StampedError { 959 stamp: number 960 error: string 961 } 962 963 export interface BotProblems { 964 walletNotSynced: Record<number, boolean> 965 noWalletPeers: Record<number, boolean> 966 accountSuspended: boolean 967 userLimitTooLow: boolean 968 noPriceSource: boolean 969 oracleFiatMismatch: boolean 970 cexOrderbookUnsynced: boolean 971 causesSelfMatch: boolean 972 unknownError: string 973 } 974 975 export interface TradePlacement { 976 rate: number 977 lots: number 978 standingLots: number 979 orderedLots: number 980 counterTradeRate: number 981 requiredDex: Record<number, number> 982 requiredCex: number 983 usedDex: Record<number, number> 984 usedCex: number 985 error?: BotProblems 986 } 987 988 export interface OrderReport { 989 placements: TradePlacement[] 990 fees: LotFeeRange 991 availableDexBals: Record<number, BotBalance> 992 requiredDexBals: Record<number, number> 993 remainingDexBals: Record<number, number> 994 usedDexBals: Record<number, number> 995 availableCexBal: BotBalance 996 requiredCexBal: number 997 remainingCexBal: number 998 usedCexBal: number 999 error?: BotProblems 1000 } 1001 1002 export interface EpochReport { 1003 epochNum: number 1004 preOrderProblems?: BotProblems 1005 buysReport?: OrderReport 1006 sellsReport?: OrderReport 1007 } 1008 1009 export interface CEXProblems { 1010 depositErr: Record<number, StampedError> 1011 withdrawErr: Record<number, StampedError> 1012 tradeErr: StampedError 1013 } 1014 1015 export interface MMBotStatus { 1016 config: BotConfig 1017 running: boolean 1018 runStats?: RunStats 1019 latestEpoch?: EpochReport 1020 cexProblems?: CEXProblems 1021 } 1022 1023 export interface MarketMakingStatus { 1024 cexes: Record<string, MMCEXStatus> 1025 bots: MMBotStatus[] 1026 } 1027 1028 export interface DEXOrderEvent { 1029 id: string 1030 rate: number 1031 qty: number 1032 sell: boolean 1033 transactions: WalletTransaction[] 1034 } 1035 1036 export interface CEXOrderEvent { 1037 id: string 1038 rate: number 1039 qty: number 1040 sell: boolean 1041 baseFilled: number 1042 quoteFilled: number 1043 } 1044 1045 export interface DepositEvent { 1046 assetID: number 1047 transaction: WalletTransaction 1048 cexCredit: number 1049 } 1050 1051 export interface WithdrawalEvent { 1052 id: string 1053 assetID: number 1054 transaction: WalletTransaction 1055 cexDebit: number 1056 } 1057 1058 export interface BalanceEffects { 1059 settled: Record<number, number> 1060 pending: Record<number, number> 1061 locked: Record<number, number> 1062 reserved: Record<number, number> 1063 } 1064 1065 export interface MarketMakingEvent { 1066 id: number 1067 timestamp: number 1068 balanceEffects: BalanceEffects 1069 pending: boolean 1070 dexOrderEvent?: DEXOrderEvent 1071 cexOrderEvent?: CEXOrderEvent 1072 depositEvent?: DepositEvent 1073 withdrawalEvent?: WithdrawalEvent 1074 } 1075 1076 interface MarketDay { 1077 vol: number 1078 quoteVol: number 1079 priceChange: number 1080 priceChangePct: number 1081 avgPrice: number 1082 lastPrice: number 1083 openPrice: number 1084 highPrice: number 1085 lowPrice: number 1086 } 1087 1088 export interface CEXMarket { 1089 baseID: number 1090 quoteID: number 1091 baseMinWithdraw: number 1092 quoteMinWithdraw: number 1093 day: MarketDay 1094 } 1095 1096 export interface OracleReport { 1097 host: string 1098 usdVol: number 1099 bestBuy: number 1100 bestSell: number 1101 } 1102 1103 export interface ExchangeBalance { 1104 available: number 1105 locked: number 1106 } 1107 1108 // changing the order of the elements in this enum will affect 1109 // the sorting of the peers table in wallets.ts. 1110 export enum PeerSource { 1111 WalletDefault, 1112 UserAdded, 1113 Discovered, 1114 } 1115 1116 export interface BalanceState { 1117 fiatRates: Record<number, number> 1118 balances: Record<number, BotBalance> 1119 invMods: Record<number, number> 1120 } 1121 1122 export interface Amount { 1123 atoms: number 1124 conventional: number 1125 fmt: string 1126 usd: number 1127 fmtUSD: string 1128 } 1129 1130 export interface ProfitLoss { 1131 initial: Record<number, Amount> 1132 initialUSD: number 1133 mods: Record<number, Amount> 1134 modsUSD: number 1135 final: Record<number, Amount> 1136 finalUSD: number 1137 diffs: Record<number, Amount> 1138 profit: number 1139 profitRatio: number 1140 } 1141 1142 export interface StampedBotConfig { 1143 timestamp: number 1144 cfg: BotConfig 1145 } 1146 1147 export interface MarketMakingRunOverview { 1148 endTime: number 1149 cfgs: StampedBotConfig[] 1150 initialBalances: Record<number, number> 1151 profitLoss: ProfitLoss 1152 finalState: BalanceState 1153 } 1154 1155 export interface WalletPeer { 1156 addr: string 1157 source: PeerSource 1158 connected: boolean 1159 } 1160 1161 export interface TicketTransaction { 1162 hash: string 1163 ticketPrice: number 1164 fees: number 1165 stamp: number 1166 blockHeight: number 1167 } 1168 1169 export interface Ticket { 1170 tx: TicketTransaction 1171 status: number 1172 spender: string 1173 } 1174 1175 export interface TBChoice { 1176 id: string 1177 description: string 1178 } 1179 1180 export interface TBAgenda { 1181 id: string 1182 description: string 1183 currentChoice: string 1184 choices: TBChoice[] 1185 } 1186 1187 export interface TKeyPolicyResult { 1188 key: string 1189 policy: string 1190 ticket?: string 1191 } 1192 1193 export interface TBTreasurySpend { 1194 hash: string 1195 value: number 1196 currentPolicy: string 1197 } 1198 1199 export interface Stances { 1200 agendas: TBAgenda[] 1201 tspends: TBTreasurySpend[] 1202 treasuryKeys: TKeyPolicyResult[] 1203 } 1204 1205 export interface TicketStats { 1206 totalRewards: number 1207 ticketCount: number 1208 votes: number 1209 revokes: number 1210 mempool: number 1211 queued: number 1212 } 1213 1214 export interface TicketStakingStatus { 1215 ticketPrice: number 1216 votingSubsidy: number 1217 vsp: string 1218 isRPC: boolean 1219 tickets: Ticket[] 1220 stances: Stances 1221 stats: TicketStats 1222 } 1223 1224 // VotingServiceProvider is information about a voting service provider. 1225 export interface VotingServiceProvider { 1226 url: string 1227 network: number 1228 launched: number 1229 lastUpdated: number 1230 apiVersions: number[] 1231 feePercentage: number 1232 closed: boolean 1233 voting: number 1234 voted: number 1235 revoked: number 1236 vspdVersion: string 1237 blockHeight: number 1238 netShare: number 1239 } 1240 1241 export interface BondTxInfo { 1242 bondID: string 1243 lockTime: number 1244 accountID: string 1245 } 1246 1247 export interface WalletTransaction { 1248 type: number 1249 id: string 1250 amount: number 1251 fees: number 1252 timestamp: number 1253 blockNumber: number 1254 tokenID?: number 1255 recipient?: string 1256 bondInfo?: BondTxInfo 1257 additionalData: Record<string, string> 1258 } 1259 1260 export interface TxHistoryResult { 1261 txs : WalletTransaction[] 1262 lastTx: boolean 1263 } 1264 1265 export const PrepaidBondID = 2147483647 1266 1267 export interface Application { 1268 assets: Record<number, SupportedAsset> 1269 seedGenTime: number 1270 user: User 1271 mmStatus: MarketMakingStatus 1272 header: HTMLElement 1273 headerSpace: HTMLElement 1274 walletMap: Record<number, WalletState> 1275 exchanges: Record<string, Exchange> 1276 fiatRatesMap: Record<number, number> 1277 showPopups: boolean 1278 commitHash: string 1279 authed: boolean 1280 start (): Promise<void> 1281 reconnected (): void 1282 fetchUser (): Promise<User | void> 1283 fetchMMStatus (): Promise<User | void> 1284 loadPage (page: string, data?: any, skipPush?: boolean): Promise<boolean> 1285 attach (data: any): void 1286 bindTooltips (ancestor: HTMLElement): void 1287 bindUrlHandlers (ancestor: HTMLElement): void 1288 attachHeader (): void 1289 updateMarketElements (ancestor: PageElement, baseID: number, quoteID: number, xc?: Exchange): void 1290 showDropdown (icon: HTMLElement, dialog: HTMLElement): void 1291 ackNotes (): void 1292 setNoteTimes (noteList: HTMLElement): void 1293 bindInternalNavigation (ancestor: HTMLElement): void 1294 updateMenuItemsDisplay (): void 1295 attachCommon (node: HTMLElement): void 1296 updateBondConfs (dexAddr: string, coinID: string, confs: number, assetID: number): void 1297 handleBondNote (note: BondNote): void 1298 loggedIn (notes: CoreNote[], pokes: CoreNote[]): void 1299 setPokes(pokes: CoreNote[]): void 1300 botStatus (host: string, baseID: number, quoteID: number): MMBotStatus | undefined 1301 notify (note: CoreNote): void 1302 log (loggerID: string, ...msg: any): void 1303 prependPokeElement (note: CoreNote): void 1304 prependNoteElement (note: CoreNote, skipSave?: boolean): void 1305 prependListElement (noteList: HTMLElement, note: CoreNote, el: NoteElement): void 1306 loading (el: HTMLElement): () => void 1307 orders (host: string, mktID: string): Order[] 1308 haveActiveOrders (assetID: number): boolean 1309 order (oid: string): Order | null 1310 canAccelerateOrder(order: Order): boolean 1311 unitInfo (assetID: number, xc?: Exchange): UnitInfo 1312 baseChainSymbol (assetID: number): string 1313 extensionWallet (assetID: number): ExtensionConfiguredWallet | undefined 1314 conventionalRate (baseID: number, quoteID: number, encRate: number, xc?: Exchange): number 1315 walletDefinition (assetID: number, walletType: string): WalletDefinition 1316 currentWalletDefinition (assetID: number): WalletDefinition 1317 fetchBalance (assetID: number): Promise<WalletBalance> 1318 checkResponse (resp: APIResponse): boolean 1319 signOut (): Promise<void> 1320 registerNoteFeeder (receivers: Record<string, (n: CoreNote) => void>): void 1321 txHistory(assetID: number, n: number, after?: string): Promise<TxHistoryResult> 1322 getWalletTx(assetID: number, txid: string): WalletTransaction | undefined 1323 clearTxHistory(assetID: number): void 1324 parentAsset(assetID: number): SupportedAsset 1325 needsCustomProvider (assetID: number): Promise<boolean> 1326 } 1327 1328 // TODO: Define an interface for Application? 1329 let application: Application 1330 1331 export function registerApplication (a: Application) { 1332 application = a 1333 } 1334 1335 export function app (): Application { 1336 return application 1337 }