Compare commits

..
Author SHA1 Message Date
Aleka Cheung 8955a48945 make disabled optional 2024-01-30 16:36:23 -05:00
Aleka Cheung 07ed7505c9 add back clickable label to checkbox 2024-01-30 16:13:00 -05:00
Jared VuandTaehoon Lee 793b522487 New Market Widget (#234)
* 🚧 New Market Form

* use dev-5 as default

* Additional UI work

* Add mock data

* 💄 More UI items

* 💄 add preview step

* 💄 Disable proposal button if not enough native tokens

* ✏️ Add disclaimer

* ✏️ fix combobox search

* 🚧 clean up components

* Add filters, modify, button

*  feat: Add details to New Market Dialog

* add assetName

* add helper method - spagetti code

* Update NewMarketMessageDetailsDialog, attempt to hook up client call

* 🚨 fix mobile safari overflow

* update init deposit to 10_001 whole token

* reduce delay block to 5

* Update mock data

* 🚧 SO FRIGGIN CLOSE

* 💄 style/ux nits

* add gov to registry

* PLS

* IT FUCKING WORKS

* Add assets

* FIX TICKER

* ADD NEW ASSETICON

* button width

* change default env to dev

* Remove mention of Impersonation dialog

* Market Search entry point

* uncomment feature

* Clean up NewMarketStep components

* Restore env.json

* Add space T.T

* useGlobalCommands fix types

* 🚧 feat: useNextClobPairId hook WIP

* Add potentialMarkets hook to parse CSV and hide new market entrypoints

* Use updated stringKeys

* Update localization, import nits

* bump v4-client

* add gov vars

* new useGovernanceVariables

* Add validator client calls: proposal fetch/submission

* Update token usage, utilize gov vars

* remove console log

* import nits

* NewMarketMessageDetailsDialog: Fix initial_deposit_amount

* NewMarketAgreement Dialog

* confirm flow

* Remove initialDepositAmount from mainnet env

* NewMarket: Add stringParams to step3

* Update csv

* update env.json add localization changes

* cleanup initialDepositAmountBN and decimals

* ^

* use undefined in place of 0 for DiffOutput

* remove hardcoded string

* Remove potentialMarket from csv

* Ensure user is out of liquidity tier modification

* bump localization, add additional details to receipts

* feedback addressed

* Add margin instead of space

* margin/padding nits, shorten filter method, remove ?. chaining

* additional feedback

---------

Co-authored-by: Taehoon Lee <19664986+ttl33@users.noreply.github.com>
2024-01-30 11:59:16 -08:00
John Huang 13d6610492 Added a TestFlight deployment so help native app testers (#257) 2024-01-30 11:38:39 -08:00
Bill 9cbb9fc2c6 remove cexdeposit testflag (#259) 2024-01-30 11:38:22 -08:00
Bill 91f5b89eb6 Coinbase Deposit (#251)
* Coinbase Deposit

* bump packages

* fix lock

* add testflag

* Address feedback

* fix chain select
2024-01-29 15:12:06 -08:00
aleka 41cc531700 downgrade follow-redirects since new version breaks safari (#254)
* downgrade follow-redirects

* explicit override
2024-01-29 11:53:38 -05:00
Brendan Chou 5aeb01f968 allow viewer to use the address test-flag to have a view-only experience of a wallet (#250)
* allow viewer to use  test-flag to specify a view-only experience of a wallet

* respond to CR

* lint
2024-01-26 17:08:51 -05:00
moo-onthelawn c9596de9c3 TRCL-3322 Implement reduce-only checkbox on frontend (#246)
* implemented

* eol lint again

* update with correct abacus version

* update localization to latest

* fix localization v
2024-01-26 17:03:32 -05:00
Bill cc8c724f09 bump v4-client (#252) 2024-01-26 15:38:47 -05:00
aleka ac07abea07 make sure view more is hidden when not num rows not specified (#249) 2024-01-25 15:10:16 -05:00
Rui 54e81cca80 Change iOS app scheme to dydx-t-v4 (#248) 2024-01-25 09:19:49 -08:00
Jared Vu 0ed1f33808 Canvas Orderbook (#227)
* 🚧 Canvas Orderbook

* 🚧 Add orderbookMap to aid in Canvas redraws

* enable mine column

* Merge main into canvas-orderbook-2

* 🧱 fix: Add orderbook constants file, remove console log, nits

* 💄 style: orderbook canvas text 13.5px -> 12px

* Updated constants and typings

* loadingSpace logic was slowing down ref mount
2024-01-24 23:16:33 -08:00
Bill 48e67f5681 Upgrade v4 clients and @cosmjs packages (#243)
* Upgrade v4-client and @cosmjs packages

* add comments
2024-01-24 15:29:43 -08:00
mike-dydx da1ac0d087 Update ios app scheme in env.json (#247) 2024-01-24 15:28:11 -08:00
moo-onthelawn 17fce5417a TRCL-3476 Create colorTokens file + new theme color types (#239)
* introduce tokens file + theme type

* fix lint error

* TRCL-3497 Use color tokens in app + tradingView widget (#240)

* update to use tokens, small fixes

* fix eol lint

* move usage style helper to lib/styles

* move files, fix text colors

* fix logo in light mode

* remove colors.css file

* small lint things

* add transparency to button + destructive borders
2024-01-24 17:03:44 -05:00
aleka b86a346be3 move governance staking panels out of trading rewards to profile on mobile (#242)
* add collapsible table

* update to add a TR inside table instead

* move governance staking panels to mobile profile
2024-01-24 15:33:01 -05:00
aleka 5cecc40a1c fix http->https in validator v4dev4 url (#245)
* fix http->https in validator v4dev4 url

* add faucet url
2024-01-24 15:32:40 -05:00
moo-onthelawn 7134fa541d add icons and update stories (#244) 2024-01-24 15:07:32 -05:00
aleka cd30c9c7d9 add collapsible table (#231)
* add collapsible table

* update to add a TR inside table instead
2024-01-24 12:26:32 -05:00
aleka 414e38afec Delay wagmi connection if remember me is enabled (#210)
* connect wagmi on deposit if remember me

* use alert message instead of button message

* clear input state when closing transfers forms to renable trade place order button
2024-01-23 13:45:14 -05:00
Bill e93850484b CCTP deposit/withdraw to throw error if nobleClient is not initialized (#215)
* CCTP deposit/withdraw to throw error if nobleClient is not initialized

* update error str
2024-01-22 09:55:26 -08:00
aleka 521b6d6135 test flag for sign in option (#236) 2024-01-17 16:22:17 -08:00
aleka 94772bf4dc bump abacus to remove base position notional (#235) 2024-01-17 15:52:02 -08:00
Adam Fraser 149f21e7e0 Add trailing blocks to NetworkStatus analytics event (#230) 2024-01-17 10:34:04 -05:00
aleka 0a3ef3a7ab bump abacus (#233) 2024-01-17 10:33:29 -05:00
Bill fef9935883 Support notification for trading rewards (#224)
* Support notification for trading rewards

* bump abacus

* Stack notifications based on notification type

* address comments
2024-01-16 10:19:48 -08:00
Bill c7a5b706e1 Fix toAmount/toAmountMin on withdraw (#232) 2024-01-15 10:31:23 -08:00
moo-onthelawn f304bb069a TRCL-1979 Show open positions / orders in portfolio sidebar (#228)
* add tags for open orders + positions

* clean up, use new num selector function

* update logic for open orders
2024-01-12 14:44:09 -05:00
Bill ad6aa1af49 Bump abacus, fix onboarding toAmount (#229) 2024-01-11 11:52:02 -08:00
Jared Vu 55b2c3fb4a Update Funding Chart Tooltip (#225)
* 🚧 depth chart

*  Fixed types and shortened FundingRateTooltip

* 💄 update depth chart color scale to use css var

* 💄 use layer-6 instead of text-1

* 🌐 Add localization, fix nits
2024-01-11 10:31:53 -08:00
moo-onthelawn 83bcde00eb TRCL-1623 Update Positions icon in nav sidebar (#226)
* update icon

* remove unused cube icon
2024-01-11 11:02:23 -05:00
Jared Vu e8024b9337 Add Sepolia (#222) 2024-01-09 16:35:19 -08:00
Jared Vu 8280e512bc Remove BasePositionNotional DetailItem (#223) 2024-01-09 14:01:38 -08:00
aleka b2234cb969 reorganize rewards vs. profile, update panel and accordion styling (#221)
* reorganize rewards vs. profile, update panel and accordion styling

* feedback
2024-01-09 16:57:02 -05:00
Bill 4bcb1f64ac Add Kava support for onboarding, and add token symbol to token select (#220)
* Add Kava support for onboarding, and add token symbol to token select

* bump abacus
2024-01-09 11:51:31 -08:00
BillandAleka Cheung 4a64d59546 Update launch incentives to season 2 (#218)
* Update launch incentives to season 2

* update api url

---------

Co-authored-by: Aleka Cheung <aforaleka@gmail.com>
2024-01-04 19:14:23 -08:00
Jared Vu 3fc43e8a12 Remove base from baseInitialMarginFraction (#209) 2024-01-04 15:35:05 -08:00
Jared Vu c24a9229a6 Imperator testnet indexer to be scaled down (#219) 2024-01-04 15:34:18 -08:00
aleka 90329d44d0 update lock file (#217) 2024-01-03 13:57:21 -08:00
Bill 9a02bd3f1c remove testnet cctp chains (#216) 2024-01-03 12:55:58 -08:00
aleka adba11b462 add accordion component and rewards help panel (#214) 2024-01-03 14:20:30 -05:00
Jared Vu 29526b927f Update deposit and withdrawal receipts (#212)
* Update receipts

* Remove duplicate const

* Restore env

* format

* Try using raw

* Use 3 spaces T.T

* copy from main

* Update abacus, display proper toAmount and toAmountMin

* nits
2024-01-03 09:56:01 -08:00
Jared Vu 503e089efa temp hide fees for cctp route (#213) 2023-12-23 01:17:41 -08:00
Jared Vu c3495f462c Additional Withdraw/Deposit validation (#211)
* Add cctp amount check and price impact check

* 2.5% -> 2%
2023-12-22 17:31:32 -08:00
Billandjaredvu 6da6eeb2a4 Enable CCTP (#194)
* Enable CCTP

* Handle base64 encode

* Update localization package

---------

Co-authored-by: jaredvu <jaredvu@gmail.com>
2023-12-22 11:12:41 -08:00
mike-dydx 0cf3e81bd7 Create documentation.json (#205) 2023-12-21 15:08:08 -05:00
aleka f8cf1d364b update coinbase connect app name (#208) 2023-12-21 10:58:57 -08:00
Jared Vu 6f344c6b5d Update comparison function in Table (#207) 2023-12-21 10:53:56 -08:00
Jared Vu 133856afca Export secret phrase help article (#206)
* Update config with correct article link

* Remove auto-format of json
2023-12-21 10:49:52 -08:00
Jared Vu 33c543daaf Update bridgeFee in Withdraw/Deposit forms (#202)
* Update Withdraw form receipt

* Bump abacus 1.1.27

* pnpm-lock

* bump v4-localization
2023-12-19 23:36:13 -08:00
Jared Vu c77e727d2b TRCL-3406: firefox mobile position table row has stretched icon (#204)
* Fix PositionsTable assetIcon

* Mobile width of HelpDialog
2023-12-19 23:33:36 -08:00
Jared Vu b94538711d Lazy load Pages (#203)
* Lazy import pages

* Fix import order
2023-12-19 23:30:51 -08:00
Jared Vu b83479f45c Handle New Markets added by Gov (#201)
* Add celestia assets

* Handle symbol not yet added
2023-12-19 23:25:14 -08:00
Jared Vu 001aad3abc Navigate to the Markets page if the current marketId is not included in subscribed markets (#198)
* Navigate to markets if current url is invalid

* nits
2023-12-19 15:58:49 -08:00
Jared Vu f8db5e1ba0 Update abacus to 1.1.25: Good til time fix (#199) 2023-12-19 09:49:51 -08:00
Jared Vu f8bec0fb3d Update Withdraw form receipt (#200) 2023-12-19 09:49:37 -08:00
Bill 8bf23b7e9c bump abacus (#197) 2023-12-15 15:12:35 -08:00
Jared Vu 3f10e045f4 bump abacus & wagmi (#196) 2023-12-15 09:26:41 -08:00
Bill 71d1a0321b Do not block website if NobleClient cannot init, and other onboarding fixes (#193) 2023-12-13 08:11:19 -08:00
Bill 0f16396c8d Implement CCTP withdraw (#188)
* Implement CCTP withdraw

* bump packages

* address comments
2023-12-12 10:12:37 -08:00
Jared Vu 2709d79f59 Firefox issues (#190)
* remove row flicker on hover

* Fix border for AccountInfoConnectedState on mobile

* Remove sticky position to allow button click

* Fix: AccountInfo not displaying on mobile firefox

* Fix css var name

* Restore filter on Table row hover

* Remove PerspectiveArea. broken on firefox

* Symbol no longer exists on AbacusType

* HorizontalPanel: memoize tabConfig

* input: firefox cant click between chars
2023-12-12 08:37:50 -08:00
Bill ab0eec5d4f Update noble tesnet rpc (#192) 2023-12-12 11:35:21 -05:00
Jared Vu 4a044da38f Size inputs (#191)
* use formattedValue to update redux state

* Separate updateLeverage and onLeverageInput

* Remove console.log
2023-12-12 07:11:51 -08:00
Jared Vu fbbfbc6580 Bump v4-abacus and v4-localization (#189) 2023-12-08 15:41:07 -08:00
Rui 2714c2b084 Fix path to chainLogo (#187) 2023-12-07 13:03:44 -08:00
Jared Vu 9979bc8a16 Prevent Spread row from moving when orderbook updates (#186)
* Add dummy rows to ensure even row count

* Reverse bids for horizontal layout

* disable pointer-events for dummy rows
2023-12-06 10:26:47 -08:00
aleka a958a59ea2 Display more markets 12/06 (#178)
* add more markets 12/06
2023-12-06 11:38:49 -05:00
Jared Vu 2bf9e66da5 Fix inputs for comma locales (#171)
* Fix for comma decimal separator locales

* Accept tickSizeDecimals 0

* Use FloatValue as value for Size Input

* Use formattedValue to handle prefix/suffix

* Use MustBigNumber.toString()
2023-12-05 16:22:41 -08:00
Bill 2980144e40 Enable CCTP via TestFlags (#185)
* Enable CCTP via Env Var

* Use test flags instead
2023-12-05 14:48:47 -08:00
aleka 5387fe8632 Display more markets 12/05 (#177)
* add more markets 12/05
2023-12-05 09:52:12 -05:00
Bill 1132ea3bbd Do not init nobleClient if nobleValidatorUrl does not exist (#184) 2023-12-04 11:19:29 -08:00
aleka 9188e08a4f prevent 1password fill (#183) 2023-12-04 11:06:49 -05:00
aleka 941ef7f9dd Display more markets 12/04 (#176)
* add more markets 11/30

* add more markets 12/01

* add more markets 12/04
2023-12-04 10:53:25 -05:00
Bill b1ffa2e219 Support CCTP and noble auto deposits on testnet (#180)
* Support CCTP and noble auto deposits on testnet

* slippage

* fix fees

* update isCctp, and comments

* bump packages

* cctp.json

* Bump abacus

* fix error

* fix loading button
2023-12-01 15:18:50 -08:00
aleka 91ea68dc53 Add chaos labs launch incentives panel (#182)
* add chaos lab incentives panel

* add seen state

* external link dialog

* better disconnected state
2023-12-01 15:27:19 -05:00
aleka cf79528d05 Display more markets 12/01 (#175)
* add more markets 12/01
2023-12-01 09:59:04 -05:00
Bill ef81f9da57 Add nobleValidator to config (#181) 2023-11-30 16:11:55 -08:00
aleka 60d59cd211 add more markets 11/30 (#174) 2023-11-30 10:06:25 -05:00
aleka 19d38378f3 display more markets (#173) 2023-11-29 10:33:02 -05:00
Bill 15a64232c0 Fix USDT approval (#170)
* Fix USDT approval

* address comment
2023-11-28 11:44:21 -08:00
aleka 28d3be0370 Release notification (#169)
* add release notif
2023-11-28 12:36:29 -05:00
Rui 90ff9ccc5a Add token address to cctp.json (#167)
* Add token address to cctp.json

* Update field name to tokenAddress
2023-11-27 17:55:52 -08:00
Jared Vu 33516422e7 Filter markets and add test flag (#168) 2023-11-27 17:05:19 -08:00
Rui eb31610a38 Add CCTP supported chains to cctp.json (#166) 2023-11-27 14:27:42 -08:00
Jared Vu b0e1655018 Bump Abacus@1.0.30 (#165) 2023-11-27 13:01:25 -08:00
Jared Vu b4cc5f87ec Add href prop to button component (#164)
* Add href prop to button component

* Use ButtonType.Link
2023-11-27 12:39:57 -08:00
Bill 549ae558e7 Default Locale to EN if not supported (#163) 2023-11-27 08:57:57 -08:00
Jared Vu 5b06110e2d Update Abacus@1.0.28 (#161) 2023-11-22 14:08:03 -08:00
aleka e3da2ee4b1 update copy and other polish (#157)
* update copy and other polish

* fix mobile nav menu nested buttons

* feedback
2023-11-22 15:06:21 -05:00
Rui 6b38d68b09 Remove universal link for trust wallet since it's no longer valid. (#160) 2023-11-21 19:25:03 -08:00
Jared Vu 1dedc93a56 Mobile friendly Toast: Collapse/Close (#159) 2023-11-21 19:24:19 -08:00
Jared Vu 1427b55728 MarketsTable: Sort OpenInterest by notional, Display 24h volume as fiat value (#158)
* Fix Sort by notional, Display fiat for volume

* OpenInterest notional on top
2023-11-21 16:10:23 -08:00
Jared Vu 20521b5b3f Add button to stack/unstack Toast notifications (#149)
* Add button to stack/unstack

* Button -> Toggle button, add offset for notifs
2023-11-20 15:12:38 -08:00
Jared Vu 532df49a06 Use new redux tradeFormInputs object for TradingForm input display values (#144)
* Redux slice for TradeFormInputs

* Move sideEffects from TradeForm to hook in Trade
2023-11-20 11:56:09 -08:00
aleka fb65db633a move buttons to footer in ack terms (#155) 2023-11-20 13:21:06 -05:00
aleka 279ef6b4f9 bump abacus (#153) 2023-11-13 10:57:40 -05:00
aleka 0def18db07 fix sorting 24h price change in markets table (#152) 2023-11-13 09:36:32 -05:00
Jared Vu 50bd860ced Bump Abacus 1.0.25 (#151) 2023-11-13 09:36:16 -05:00
Jared Vu 818574cedb Change dep in hook to fix input bug (#150) 2023-11-13 09:11:54 -05:00
aleka 3be0429a60 add back border to toggle buttons (#148) 2023-11-11 20:46:04 -08:00
aleka b8e72246b9 add manage funds dialog and transfers form styling (#147)
* add manage funds dialog and transfers form styling

* add sticky footer backdrop

* add testnet deposit toggle
2023-11-10 20:56:27 -08:00
Jared VuandBill He 99e708a984 Notifications Refresh (#135)
* Remove X button from tablet/mobile Notification menu

* Toast styling

* missed in merge

* .env.example

* Update abacus@1.0.9

* Add notif strings, and abaucs notif state

* Update Notification hooks, add Notification Preference controls

* Consolidate Notification into single component

* withLabel -> withTrigger prop

* nits

* OrderStatusChanged -> AbacusGenerated

* Notification OnClick

* Move Notification -> Components

* withAnimation -> $withAnimation

* Notification styling and click handle

* load state, onClick, localStorage

* add error count

* Rez localStorage Notifications

* Update TransferStatus UI

* Use Notification component for other abacusNotifs

* fix uselocalnotif query

* Default to Notification from NotificationMenu

---------

Co-authored-by: Bill He <bill@dydx.exchange>
2023-11-10 20:55:34 -08:00
aleka 876f620ada Account menu and components improvements (#145)
* better copy button

* hide sign into mobile for production and use new copy icon button

* new checkbox
2023-11-10 22:07:29 -05:00
Bill b9550890da Add additional onboarding entry points (#146)
* Add additional onboarding entry points

* flex-wrap
2023-11-10 19:05:46 -08:00
aleka 3732b955f5 add sample terms of use (#138)
* add sample terms of use

* add back article mixin
2023-11-10 14:58:26 -05:00
aleka 253bfc0eff update nav menu dropdown behavior to click instead of hover to open (#142) 2023-11-10 14:58:17 -05:00
Bill d4bcfc0428 Fix status empty bug (#143) 2023-11-10 09:55:54 -08:00
aleka 7dec32df5e fix 24h sort in market dropdown, table styling (#141) 2023-11-09 16:40:27 -05:00
aleka e09d574d5b show deposit form in mainnet onboarding (#140) 2023-11-09 15:33:16 -05:00
Bill 944fc6dc95 Handle squid rout errors (#139)
* Handle squid route errors

* bump abacus

* add dep

* address comments

* fix max

* disable slippage editor

* parse error message in abacus
2023-11-09 10:34:22 -08:00
aleka 91a97a1c68 add network select menu in restriction modals (dev) (#137) 2023-11-09 09:10:12 -05:00
aleka c5f736d805 fix deposit dialog logic (#136) 2023-11-08 14:01:16 -05:00
aleka 3769f7078c update readme re env mode (#133) 2023-11-07 20:28:56 -08:00
Jared Vu edc9fadfee Add TestFlags provider and class (#132)
* Add TestFlags provider and class

* import order nit

* markets is an object and not array

* Use null coalescing op
2023-11-07 20:28:42 -08:00
aleka 5e2d426cd1 Send native tokens inclusive fee (#118)
* send dv4tnt inclusive of fees
2023-11-07 22:42:41 -05:00
Bill 766209baf1 Onboarding fixes (#131)
* Onboarding fixes

* address comments

* rebase
2023-11-07 17:18:16 -08:00
aleka 906faa554d Surface close position input errors (#130)
* show abacus close position validation errors

* bump abacus version
2023-11-07 19:11:08 -05:00
John Huang c339eeccde TRCL-3077 Added an environment for testing. Expected behavior - when "v4 Staging Forced Update" is selected in iOS app, it should switch to the forced update screen (#99) 2023-11-07 13:33:06 -08:00
aleka bd03fb73ca update mintscan tx link on transfer history table (#128)
* update mintscan tx link on transfer history table

* bump localization + fix icon button padding in header
2023-11-07 16:00:22 -05:00
Rui 31825a8a52 Change "iOS" to "ios" for consistency (#129) 2023-11-07 11:01:41 -08:00
John Huang 8d5bf1a721 TRCL-3128 TradePlaceOrder and TradeCancelOrder are now tracked by Abacus (#115) 2023-11-07 10:34:06 -08:00
aleka 7f3d57b46a support multiple modes (#125) 2023-11-07 12:13:59 -05:00
Bill c292c84c2c Fix decimal overflow bug (#127)
* Fix decimal overflow bug

* use decimals:
2023-11-06 17:48:19 -08:00
Bill 2d37ff676b do not use TESTNET_CHAIN_ID (#126) 2023-11-06 17:39:02 -08:00
Rui 68f3552569 Add app configuration to env.json (#121) 2023-11-06 13:02:38 -08:00
aleka 18b12591ca Update LICENSE (#123) 2023-11-06 11:10:31 -08:00
Bill 3f963ffb07 Add Env var descriptions to readme (#124)
* Add Env var descriptions to readme

* update

* remove examples

* grammar
2023-11-06 10:50:45 -08:00
aleka aac024fd5e showing negative buying power as - (#119) 2023-11-06 13:31:41 -05:00
Christopher-Li 4913c690ec Update all dev4 endpoints to use https and wss (#117)
* Update all dev endpoints to use https and wss

* dev4
2023-11-06 09:33:22 -08:00
Bill b0db577b28 Configurable squid integrator id (#120)
* Configurable squid integrator id

* bump abacus
2023-11-03 14:18:15 -07:00
Bill 9815437a80 Account dropdown onboarding entrypoints (#113)
* Account dropdown onboarding entrypoints

* Update based on latest designs
2023-10-31 14:29:36 -07:00
aleka 890a4b2c0e Padding fixes, markets data null fix, update .env.example (#112)
* update .env.example for token migration

* bump icon size in icon button

* add padding in rewards / fees page, panel changes

* fix markets data crashing

* fix market details overflow on tablet

* fix market filters

* prevent fees table overflow

* remove notifications close button on mobile

* fix nested button console warning

* update ToggleGroup value change logic

* panel hover impact button hover

* update dropdown icon in header
2023-10-31 17:11:46 -04:00
Bill 8d3cc76d14 Configurable URLs (#107)
* Configurable URLs

* add learnmore to tooltip

* Learnmore -> LearnMore
2023-10-31 11:02:45 -07:00
Adam Fraser c7ad4b3028 Remove DSRV from Testnet node config options (#108)
* Remove DSRV from Testnet node config options

* Add Bware to testnet node config
2023-10-31 10:52:49 -07:00
Rui c88d5dd411 Add Android config to wallets.json (#114) 2023-10-31 09:35:59 -07:00
Jared Vu d6ab547055 Update README.md (#111)
* Add README in scripts directory

* Add Cloudflare instructions to README
2023-10-30 15:17:12 -07:00
aleka 2fe6c2bb3b reorder header, center align header, update collapse caret icons (#110) 2023-10-27 23:32:51 -04:00
aleka e6858ca917 show loading state instead of "Unavailable" for place order button (#104)
* show loading instead of unavailable for place order button
2023-10-27 17:39:12 -04:00
aleka d92b49f4fa bump packages, fix missing asset symbol (#106) 2023-10-27 16:47:34 -04:00
aleka e7da21962a add entry point to token migration (#98)
* update migrate panel

* address feedback
2023-10-27 16:14:34 -04:00
aleka b479531e34 update v4 docs link (#102) 2023-10-27 16:13:48 -04:00
Bill 0d4c5a547a Abort key derivation if second signature fails (#109) 2023-10-27 11:41:00 -07:00
Rui 5b235ee53f Add link to help page (#103) 2023-10-27 09:15:31 -07:00
Adam Fraser 18dee0586b Add Polkachu as RPC Node for Testnet (#105)
* Update env.json

* Add Polkachu option to environments

* Fix trailing comma error
2023-10-25 18:21:27 -04:00
mikemag-dev 9f1f5987ee Update apple-app-site-association (#100) 2023-10-24 18:33:41 -04:00
James Jia 7f531516ca v1.0: Update LICENSE and README (#101)
* Update LICENSE and README

* Update README, package.json

* Update package.json
2023-10-24 14:14:49 -07:00
aleka 3fd71558c0 fix trading view error (#96)
* fix trading view error

* only init trading view if market id is first defined, and nits re fills table with empty asset
2023-10-24 17:06:00 -04:00
aleka 575856b77b remove asset symbol for account balance logic (#95) 2023-10-23 17:51:13 -04:00
John Huang e3609782ed Indexer and validator are on https for DEV (#97) 2023-10-23 14:49:03 -07:00
Bill 5ca923984d Update acknowledge copies (#94)
* update acknowledgement dialog with new copies

* update
2023-10-23 13:59:04 -07:00
Bill d97626f543 Fix auto-deposit (#93) 2023-10-23 12:02:05 -07:00
Jared Vu 835f82dbcc Support Intercom (#92)
* Add ChatIcon

* FooterDesktop Help&Support

* HelpDialog w/ triggers

* Add other links

* item gap css var passing

* inject script

* Add quotes to script

* Close modal on select

* Remove feedback form
2023-10-20 16:30:22 -07:00
Bill 051bdda73a update v4-client init in useDydxClient (#91)
* update v4-client init in useDydxClient

* fix nit
2023-10-20 11:00:03 -07:00
Bill 27b79957d4 Bump v4 clients (#89)
* Have tokens be configurable, bump v4-client

* bump

* chain -> chaintoken

* use cancelRawOrder

* address comments

* add TODO
2023-10-19 11:01:12 -07:00
aleka 4bacc901dc use wallet connect config from envs (#88)
* use wallet connect config from envs

* update readme
2023-10-19 11:35:17 -04:00
aleka 82d32a91a9 fix dialog not showing up (#87) 2023-10-19 07:16:13 -07:00
aleka 2a794f9459 add empty terms + privacy pages (#80)
* add empty terms + privacy pages

* nit
2023-10-18 19:44:15 -04:00
lucas-dydx 5c26a0c270 Update dev2 validator IP address (#86) 2023-10-18 12:38:08 -07:00
Jared Vu e4991cc31d Update Abacus 0.7.0 & Misc. bug fixes (#84)
* Add Notification icon w/ stroke

* Update to abacus0.7.0

* Fix goodTilTime string

* Fix tradingView initial load

* Temp remove notif onClick

* remove isConnected state from dydxClient
2023-10-18 11:08:39 -07:00
aleka da908c826a Revert "Revert "remove offline message for testnet4 (#76)" (#78)" (#85)
This reverts commit 14316163e4.
2023-10-18 13:04:25 -04:00
John Huang af46278539 18 for adv4tnt, 6 for uusdc (#83)
* 18 for adv4tnt, 6 for uusdc

* Changed "exponents" to "decimals"
2023-10-17 15:42:00 -07:00
Jared Vu ea58b55152 Bump localStorage version to wipe EvmDerivedAddresses (#79) 2023-10-17 14:49:51 -07:00
aleka 54d65bb81c override walletconnect explorer recs (#81) 2023-10-17 17:42:41 -04:00
aleka e047a49bbc remove wc1 support and fix typo in env.json (#82) 2023-10-17 17:12:50 -04:00
aleka 14316163e4 Revert "remove offline message for testnet4 (#76)" (#78)
This reverts commit ac619a9da1.
2023-10-17 13:37:26 -04:00
aleka ac619a9da1 remove offline message for testnet4 (#76) 2023-10-17 13:03:50 -04:00
Bill cb7f542a99 Onboarding status do not rely on squidAPI to determine if deposit/withdraw (#73) 2023-10-16 17:35:07 -07:00
aleka bc5569c4c9 testnet4 followup, switch offline msg (#75) 2023-10-16 17:26:29 -04:00
John Huang dd087ae786 TRCL-3010 Change test net chain ID and token denom (#74) 2023-10-16 17:26:21 -04:00
aleka eb023ff0ff update signing message for testnet for reset (#72) 2023-10-16 16:44:29 -04:00
aleka 348e82293e show exchange offline dialog for testnet reset (#71) 2023-10-16 13:08:54 -04:00
Jared Vu 48a48b4d70 Screen (#56)
* useDydxClient: Add screen endpoint

* Screen api in onboarding flow

* PnlChart rounding

* UnauthorizedDialog

* Add RateLimitDialog

* Update dialog open logic

* nits

* Screen before Transfer

* Validate network, remove input autofill color

* Use screenAddresses from dydxClient

* Check recipientAddresses

* lock-file

* Change Wallet Restricted Dialog to v4-blocked message

* nits

* Unused param

* consolidate environment validateFn

* Remove extra space, simplify WithdrawForm error msg

* Simply map logic, rearrange priority of screened messages

* WalletRestricted -> RestrictedWallet

* Update restriction modal title and add something went wrong

* Handle 429 rate limit
2023-10-16 09:36:09 -07:00
Bill 944cea0d3d Hide wallet options (#70)
* Hide wallet options

* remove WC 1

* gitignore .env

* remove .env

* remove wc1
2023-10-16 09:07:35 -07:00
Rui 4ea2bdf53d Updated wallets.json and add chain name and logo to env.json (#68) 2023-10-13 14:44:34 -07:00
aleka c40f5eb549 update about wallets link and localized string nits (#69)
* update about wallets link and localized string nits

* udpate wallet connect2 metadata
2023-10-12 17:10:51 -04:00
Bill d53e8f693e Update Squid URL (#67) 2023-10-11 11:34:36 -07:00
Rui f9e301b3f0 Add script to inject iOS app ID to public/.well-known/apple-app-site-association (#66)
* Add script to inject iOS app ID to public/.well-known/apple-app-site-association

* package.json

* Fix typo

* Fix typo

* Fix build

* Debug

* Updated to use "dist" folder
2023-10-10 15:58:26 -07:00
John Huang 67ecbd75b4 Added USDC gasDenom, and Staging West label (#65)
* TRCL-2892-configs-changes

* Additional changes for main net template, and WalletConnect payloads

* Added logo file used for WalletConnect, and changed name and description in WC

* Removed a comma

* TRCL-2898 Additional node provider

* Added USDC gasDenom, and Staging West label
2023-10-09 17:08:04 -04:00
Bill a05d88136d Polishes for Onboarding (#57)
* Polishes for Onboarding

* update string

* bump packages

* address nit
2023-10-09 09:34:49 -07:00
Jared Vu f1ca86326d Fix GoodTil var changes (#64) 2023-10-09 08:02:32 -07:00
aleka 5d1d734c59 add config for sign typed data domain name and action for networks (#62) 2023-10-09 10:51:47 -04:00
aleka 9ba6b3d6ba fix typo in walletconnect wallet type (#63) 2023-10-06 15:50:52 -07:00
Jared Vu 62eeab06f5 Fix marketDetails stringKey, do not update state with markets not tracked by Abacus (#61) 2023-10-06 14:12:40 -07:00
John Huang fa621a085b TRCL-2892-configs-changes (#60)
* TRCL-2892-configs-changes

* Additional changes for main net template, and WalletConnect payloads

* Added logo file used for WalletConnect, and changed name and description in WC

* Removed a comma

* TRCL-2898 Additional node provider
2023-10-06 13:50:41 -07:00
Bill 0730e71109 Do not hide rewardpage on prod (#58) 2023-10-04 22:57:39 -07:00
Bill fdd3fbd774 Reward page (#52)
* Implement Rewards Page

* more rewards page panels

* add keplr dialog

* Finish up rewards page

* bump localization

* add to nav

* address comments

* Comment out migration work

* rename

* address comments

* add TODO
2023-10-04 13:11:35 -04:00
Jared Vu 15bf8a1b34 Update Abacus v0.6.0 (#55)
* Abacus 6: New init, deprecate asset.symbol

* deprecate asset.symbol

* Update networks constants

* filesystem

* Update networks.ts

* 0.6.0 -> 0.6.3

* Remove Market filter
2023-10-03 13:10:55 -07:00
Bill 6508a8b857 Add all squid evm networks to wagmi (#50)
* Add all squid evm networks to wagmi

* remove alchemy

* address nit
2023-10-02 18:50:39 -04:00
aleka e10e7c10e0 fix dialog area too long on mobile (#54) 2023-10-02 13:57:41 -04:00
John Huang 175a6fe523 Added tokenDenom to the configs. Also changed the environments payload to a map from list (#53)
* Added tokenDenom to the configs. Also changed the environments payload to a map from list

* Make tokens section more comprehensive
2023-09-28 16:10:09 -07:00
John Huang 54181a1f52 TRCL-2701 Move market configs to web app from Vercel (#51) 2023-09-27 17:53:56 -07:00
John Huang e6750589db Added a config file, as a retrievable public json (#49)
* Added a config file, retrievable as public json

* Change deployment name

* Refactor the configs

* Add more links

* typo fix
2023-09-27 15:28:46 -07:00
Bill 6c63e66bd6 bump abacus (#48)
* bump abacus

* bump again
2023-09-27 13:54:22 -04:00
Bill 50606a750f Add Rewards abacus transactions and trade form receipt (#47)
* temp

* add into reciept

* bump localization

* add tag
2023-09-25 17:45:46 -04:00
Bill fe46a4d927 Do not poll evm unless addressOrDenom is provided (#46) 2023-09-25 14:56:20 -04:00
Bill 68e5cb8680 Do not get token balance on withdraw (#45) 2023-09-22 17:12:54 -07:00
Bill dea36da7bf Use abacus for simulate transactions and balance polling (#43)
* Use abacus for simulate transactions and balance polling

* address comment

* use dydx gas token

* address nits
2023-09-22 14:21:42 -07:00
Jared Vu f7d052f52e Abacus Transactions Protocol (#38)
* Merge main

* MarketLinks: add key to map

* Merge stashed changes

* fix callback usage to fulfill success/error cbs

* Add Abacus analytics class

* Bump Abacus 0.4.27, Update cancelOrder to use Abacus

* Cancel order loading states

* Use latestOrderChanged to determine whether an order has been committed

* nits

* restore uncommittedOrderClientIds

* bump abacus@0.5.0

* fix for handling null testMarket
2023-09-21 09:19:01 -07:00
Bill 51906f1096 Onboarding testnet 3 and error handling (#42)
* temp

* Onboarding error handling

* address comments
2023-09-20 10:29:02 -07:00
aleka 9a230401cd enable conditional orders in order type dropdown in prod (#41) 2023-09-18 11:19:56 -04:00
aleka 342bd2d334 remove offline exchange dialog from testnet3 prod (#40) 2023-09-15 17:49:15 -04:00
Bill cf68740725 bump v4-client and abacus (#39) 2023-09-15 10:56:27 -07:00
aleka 1462e37c43 temporarily shut down prod FE (#37)
* shut down fe for testnet3 prod
2023-09-13 17:01:42 -04:00
aleka d99b0356e9 bump v4-localization to use testnet3 (#36) 2023-09-13 09:36:23 -07:00
aleka 5cd9bb0fc5 bump abacus for transfers ws fix (#35) 2023-09-13 12:19:34 -04:00
Jared Vu 986a134d07 handle composite client error (#33) 2023-09-13 09:15:22 -07:00
Jared Vu ab454d5928 eslint (#26)
* eslint - hooks

* eslint - icons

* eslint - styles

* eslint - state
2023-09-12 09:42:38 -07:00
aleka 0f1491ac33 show exchange offline dialog for testnet2 (#32) 2023-09-12 11:29:38 -04:00
Jared Vu 1f73f3a884 v4-abacus (#31) 2023-09-11 16:56:13 -07:00
Jared Vu 419d05a0e1 Satoshi font 2 (#30)
* Use Satoshi in TvChart

* update tradingview.tgz
2023-09-11 15:59:43 -07:00
Jared Vu 0c4b605666 Add base position notional (#29) 2023-09-11 15:15:03 -07:00
James Jia 710e5ac113 Update README (#27) 2023-09-08 16:32:24 -07:00
Bill 8fdac4dc09 bump v4-client (#28) 2023-09-08 16:31:34 -07:00
James Jia - Test 4b86068d8f Initial commit 2023-09-08 13:52:13 -07:00
363 changed files with 19453 additions and 5829 deletions
-18
View File
@@ -1,18 +0,0 @@
VITE_BASE_URL=https://v4.testnet.dydx.exchange
VITE_ALCHEMY_API_KEY=FP275q327Yh7qswtZWenbPXdZZdnAFmC
VITE_FAUCET_URL_DEV=https://faucet.v4dev.dydx.exchange/
VITE_FAUCET_URL_STAGE=https://faucet.v4staging.dydx.exchange/
VITE_FAUCET_URL_TESTNET2=https://faucet.v4testnet2.dydx.exchange/
VITE_VALIDATOR_URL_DEV=http://52.192.187.113:26657/
VITE_VALIDATOR_URL_STAGE=https://validator.v4staging.dydx.exchange/
VITE_VALIDATOR_URL_TESTNET2=https://validator.v4testnet2.dydx.exchange/
VITE_INDEXER_URL_DEV=http://dev-indexer-apne1-lb-public-890774175.ap-northeast-1.elb.amazonaws.com
VITE_INDEXER_URL_STAGE=https://indexer.v4staging.dydx.exchange
VITE_INDEXER_URL_TESTNET2=https://indexer.v4testnet2.dydx.exchange
VITE_WALLETCONNECT1_BRIDGE=wss://api.dydx.exchange/wc/
VITE_WALLETCONNECT2_PROJECT_ID=fbe94eaa691fa8d929561f8567062b32
+8 -11
View File
@@ -1,17 +1,14 @@
VITE_BASE_URL=
VITE_ALCHEMY_API_KEY=
VITE_PK_ENCRYPTION_KEY=
VITE_WALLETCONNECT2_PROJECT_ID=
VITE_FAUCET_URL_DEV=
VITE_FAUCET_URL_STAGE=
VITE_FAUCET_URL_TESTNET2=
VITE_V3_TOKEN_ADDRESS=
VITE_TOKEN_MIGRATION_URI=
VITE_VALIDATOR_URL_DEV=
VITE_VALIDATOR_URL_STAGE=
VITE_VALIDATOR_URL_TESTNET2=
VITE_INDEXER_URL_DEV=
VITE_INDEXER_URL_STAGE=
VITE_INDEXER_URL_TESTNET2=
AMPLITUDE_API_KEY=
BUGSNAG_API_KEY=
IOS_APP_ID=
INTERCOM_APP_ID=
STATUS_PAGE_SCRIPT_URI=
-5
View File
@@ -5,15 +5,10 @@ vite.config.ts
# Temporarily ignore, we will slowly remove each directory as we fix files to follow ESLint rules
/src/components
/src/dialogs
/src/forms
/src/hooks
/src/history.ts
/src/icons
/src/lib
/src/main.tsx
/src/menus
/src/pages
/src/state
/src/styles
/src/views
+4 -6
View File
@@ -33,14 +33,11 @@
"jsx-a11y/anchor-is-valid": "off",
"jsx-a11y/click-events-have-key-events": "off",
"no-continue": "off",
"no-console": [
"error",
{
"devDependencies": ["./scripts/*.js"]
}
],
"no-console": ["error"],
"no-lonely-if": "off",
"no-multi-assign": "off",
"no-nested-ternary": "off",
"no-param-reassign": ["error", { "props": false }],
"no-return-assign": "off",
"no-return-await": "off",
"no-underscore-dangle": "off",
@@ -65,6 +62,7 @@
"react/sort-comp": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/comma-dangle": "off",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/member-delimiter-style": [
"error",
{
+2
View File
@@ -33,11 +33,13 @@ jobs:
AMPLITUDE_API_KEY: ${{ secrets.AMPLITUDE_API_KEY }}
BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }}
STATUS_PAGE_SCRIPT_URI: ${{ secrets.STATUS_PAGE_SCRIPT_URI }}
IOS_APP_ID: ${{ secrets.IOS_APP_ID }}
run: |
pnpm run build
pnpm run build:inject-amplitude
pnpm run build:inject-bugsnag
pnpm run build:inject-statuspage
sh scripts/inject-app-deeplinks.sh
- name: Upload to IPFS via web3.storage
uses: dydxprotocol/add-to-web3@v1
+1
View File
@@ -13,6 +13,7 @@ dist
dist-ssr
*.local
*.key
.env
# Editor directories and files
.vscode/*
+18 -9
View File
@@ -5,29 +5,35 @@ import styled from 'styled-components';
import { store } from '@/state/_store';
import { GlobalStyle } from '@/styles/globalStyle';
import { SelectMenu, SelectItem } from '@/components/SelectMenu';
import { AppThemeProvider } from '@/hooks/useAppTheme';
import { AppTheme, setAppTheme } from '@/state/configs';
import { setLocaleLoaded } from '@/state/localization';
import '@/index.css';
import './ladle.css';
export const StoryWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [theme, setTheme] = useState('Default theme');
const [theme, setTheme] = useState(AppTheme.Classic);
useEffect(() => {
store.dispatch(setAppTheme(theme));
switch (theme) {
case 'Dark theme': {
case AppTheme.Dark: {
document?.documentElement?.classList.remove('theme-light');
document?.documentElement?.classList.add('theme-dark');
break;
}
case 'Light theme': {
case AppTheme.Light: {
document?.documentElement?.classList.remove('theme-dark');
document?.documentElement?.classList.add('theme-light');
break;
}
default: {
case AppTheme.Classic: {
document?.documentElement?.classList.remove('theme-dark', 'theme-light');
break;
}
@@ -48,15 +54,15 @@ export const StoryWrapper: React.FC<{ children: React.ReactNode }> = ({ children
>
{[
{
value: 'Default theme',
value: AppTheme.Classic,
label: 'Default theme',
},
{
value: 'Dark theme',
value: AppTheme.Dark,
label: 'Dark theme',
},
{
value: 'Light theme',
value: AppTheme.Light,
label: 'Light theme',
},
].map(({ value, label }) => (
@@ -69,8 +75,11 @@ export const StoryWrapper: React.FC<{ children: React.ReactNode }> = ({ children
</SelectMenu>
</StoryHeader>
<hr />
<StoryContent>{children}</StoryContent>
</Provider>
<AppThemeProvider>
<GlobalStyle />
<StoryContent>{children}</StoryContent>
</AppThemeProvider>
</Provider>
);
};
+4 -4
View File
@@ -1,4 +1,4 @@
# Contributing to Trader-Fe
# Contributing to V4-web
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
- Reporting a bug
@@ -18,10 +18,10 @@ Pull requests are the best way to propose changes to the codebase (we use [Githu
4. Issue that pull request!
## Any contributions you make will be under the same License
When you submit code changes, your submissions are understood to be under the same [License](https://github.com/dydxprotocol/trader-fe/blob/master/LICENSE) that covers the project.
When you submit code changes, your submissions are understood to be under the same [License](https://github.com/dydxprotocol/v4-web/blob/master/LICENSE) that covers the project.
## Report bugs using Github's [issues](https://github.com/dydxprotocol/trader-fe/issues)
Report a bug by [opening a new issue](https://github.com/dydxprotocol/trader-fe/issues/new).
## Report bugs using Github's [issues](https://github.com/dydxprotocol/v4-web/issues)
Report a bug by [opening a new issue](https://github.com/dydxprotocol/v4-web/issues/new).
**Great Bug Reports** tend to have:
+3 -39
View File
@@ -1,45 +1,9 @@
Business Source License 1.1
License text copyright © 2023 MariaDB plc, All Rights Reserved. “Business Source License” is a trademark of MariaDB plc.
Copyright (C) 2023 dYdX Trading Inc.
Use of this software before the Change Date specified in the LICENSE file is governed by the Business Source License included in the LICENSE file and at https://spdx.org/licenses/BUSL-1.1.html.
On and after the Change Date specified in the LICENSE file, use of this software will be governed by the Change License (GNU Affero GPL v3) as specified in the LICENSE file.
Parameters
Licensor: dYdX Trading Inc.
Licensed Work: dydxprotocol/cosmos-sdk, dydxprotocol/cometbft, dydxprotocol/v4-chain, dydxprotocol/v4-clients, dydxprotocol/v4-web, dydxprotocol/v4-abacus, dydxprotocol/v4-localization, dydxprotocol/v4-documentation, and any dYdX or dYdX Trading Inc. github repository reflecting a copy of this license, or link to this license.
Additional Use Grant: None
Change Date: On the later to occur of (i) the release of the Licensed Work labeled “dYdX Version 1.0 GPL”, and which includes a document uploaded to the relevant github repository stating “The software in this repository is Version 1.0, subject to GPL license”, and (ii) September 30, 2023 (approximate projected release of “Version 1.0” of this software).
Change License: GNU Affero GPL License v3
License text copyright © 2023 MariaDB plc, All Rights Reserved. “Business Source License” is a trademark of MariaDB plc.
Terms
The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make non-production use of the Licensed Work. The Licensor may make an Additional Use Grant, above, permitting limited production use.
Effective on the Change Date, or the fourth anniversary of the first publicly available distribution of a specific version of the Licensed Work under this License, whichever comes first, the Licensor hereby grants you rights under the terms of the Change License, and the rights granted in the paragraph above terminate.
If your use of the Licensed Work does not comply with the requirements currently in effect as described in this License, you must purchase a commercial license from the Licensor, its affiliated entities, or authorized resellers, or you must refrain from using the Licensed Work.
All copies of the original and modified Licensed Work, and derivative works of the Licensed Work, are subject to this License. This License applies separately for each version of the Licensed Work and the Change Date may vary for each version of the Licensed Work released by Licensor.
You must conspicuously display this License on each original or modified copy of the Licensed Work. If you receive the Licensed Work in original or modified form from a third party, the terms and conditions set forth in this License apply to your use of that work.
Any use of the Licensed Work in violation of this License will automatically terminate your rights under this License for the current and all other versions of the Licensed Work.
This License does not grant you any right in any trademark or logo of Licensor or its affiliates (provided that you may use a trademark or logo of Licensor as expressly required by this License).TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE. MariaDB hereby grants you permission to use this Licenses text to license your works, and to refer to it using the trademark “Business Source License”, as long as you comply with the Covenants of Licensor below.
Covenants of Licensor
In consideration of the right to use this Licenses text and the “Business Source License” name and trademark, Licensor covenants to MariaDB, and to all other recipients of the licensed work to be provided by Licensor:
To specify as the Change License the GPL Version 2.0 or any later version, or a license that is compatible with GPL Version 2.0 or a later version, where “compatible” means that software provided under the Change License can be included in a program with software provided under GPL Version 2.0 or a later version. Licensor may specify additional Change Licenses without limitation.
To either: (a) specify an additional grant of rights to use that does not impose any additional restriction on the right granted in this License, as the Additional Use Grant; or (b) insert the text “None” to specify a Change Date. Not to modify this License in any other way.
Notice
The Business Source License (this document, or the “License”) is not an Open Source license. However, the Licensed Work will eventually be made available under an Open Source License, as stated in this License.
Subject to your compliance with applicable law and the v4 Terms of Use, available at dydx.exchange/legal, you are granted the right to use the Program or Licensed Work (defined below) under the terms of the GNU Affero General Public License as set forth below; provided, however, that if you violate any such applicable law in your use of the Program or Licensed Work, all of your rights and licenses to use (including any rights to reproduce, distribute, install or modify) the Program or Licensed Work will automatically and immediately terminate.
OPEN SOURCE LICENSE BELOW - TO BE APPLIED AFTER THE CHANGE DATE.
Copyright (C) 2023 dYdX Trading Inc.
Use of this software is governed by the The GNU Affero General Public License as set forth below.
The “Program” or “Licensed Work” shall mean any of the following: dydxprotocol/cosmos-sdk, dydxprotocol/cometbft, dydxprotocol/v4-chain, dydxprotocol/v4-clients, dydxprotocol/v4-web, dydxprotocol/v4-abacus, dydxprotocol/v4-localization, dydxprotocol/v4-documentation, and any dYdX or dYdX Trading Inc. repository reflecting a copy of, or link to, this license.
The GNU Affero General Public License
@@ -835,4 +799,4 @@ copy of the Program in return for a fee.
For more information about this software, see https://dydx.exchange.
Copyright (C) 2023 dYdX Trading Inc.
Copyright (C) 2023 dYdX Trading Inc.
+60 -7
View File
@@ -1,8 +1,17 @@
# v4 Web App
<p align="center"><img src="https://dydx.exchange/icon.svg?" width="256" /></p>
<h1 align="center">dYdX Chain Web</h1>
<div align="center">
<a href='https://github.com/dydxprotocol/v4-web/blob/main/LICENSE'>
<img src='https://img.shields.io/badge/License-AGPL_v3-blue.svg' alt='License' />
</a>
</div>
## Prerequisites
- Node.js version 18 and `pnpm` installed on your system
- Wallet Connect account
For deploying with Vercel, create an account with [Vercel](https://vercel.com/signup) if you don't have one already.
@@ -17,16 +26,16 @@ Alternatively, follow the [IPFS Kubo installation guide](https://docs.ipfs.tech
## Part 1: Setting up your local environment
### Step 1: Clone the repo
### 1. Clone the repo
Clone the repository and navigate to its directory:
```bash
git clone https://github.com/dydxprotocol/trader-fe.git
cd trader-fe
git clone https://github.com/dydxprotocol/v4-web.git
cd v4-web
```
### Step 2: Install pnpm and dependencies
### 2. Install pnpm and dependencies
Install pnpm and the project dependencies:
@@ -53,7 +62,31 @@ pnpm ladle
This will automatically open your default browser at `http://localhost:61000`.
## Part 3: Deploying with Vercel
## Part 3: Configuring environment
Add or modify the relevant endpoints, links and options in `/public/configs/env.json`.
You'll need to provide a Wallet Connect project id to enable onboarding and wallet connection:
- Create a project on https://cloud.walletconnect.com/app
- Copy over the project ID into this [field](https://github.com/dydxprotocol/v4-web/blob/67ecbd75b43e0c264b7b4d2d9b3d969830b0621c/public/configs/env.json#L822C33-L822C46)
## Part 4: Set Enviornment variables
Set environment variables via `.env`.
- `VITE_BASE_URL` (required): The base URL of the deployment (e.g., `https://www.example.com`).
- `VITE_ALCHEMY_API_KEY` (optional): Add an Alchemy API key for EVM interactions; the app will fall back to public RPCs if not provided.
- `VITE_PK_ENCRYPTION_KEY` (optional): AES encryption key used for signature obfuscation; necessary for enabling the "Remember Me" feature.
- `VITE_V3_TOKEN_ADDRESS` (optional): Address of the V3 $DYDX token.
- `VITE_TOKEN_MIGRATION_URI` (optional): The URL of the token migration website.
- `AMPLITUDE_API_KEY` (optional): Amplitude API key for enabling Amplitude; used with `pnpm run build:inject-amplitude`.
- `BUGSNAG_API_KEY` (optional): API key for enabling Bugsnag; used with `pnpm run build:inject-bugsnag`.
- `IOS_APP_ID` (optional): iOS app ID used for enabling deep linking to the iOS app; used with `pnpm run build:inject-app-deeplinks`.
- `INTERCOM_APP_ID` (optional): Used for enabling Intercom; utilized with `pnpm run build:inject-intercom`.
- `STATUS_PAGE_SCRIPT_URI` (optional): Used for enabling the status page; used with `pnpm run build:inject-statuspage`.
# Deployments
## Deploying with Vercel
### Step 1: Connect your repository to Vercel
@@ -65,12 +98,17 @@ For the "Build & Development Settings", we recommend the following:
- Framework Preset: `Vite`
- Build Command (override): `pnpm run build`
By default, the dev server runs in development mode and the build command runs in production mode. To override the default mode, you can pass in the `--mode` option flag. For example, if you want to build your app for testnet:
```
pnpm run build --mode testnet
```
If you wish to incorporate analytics via Amplitude and Bugsnag, you can use our scripts:
`pnpm run build:inject-amplitude` and `pnpm run build:inject-bugsnag`. You will need to provide your own API keys for these services. In the Environment Variables section, name the variables as `AMPLITUDE_API_KEY` and `BUGSNAG_API_KEY` and provide the respective keys as their values.
For more details, check out Vercel's [official documentation](https://vercel.com/docs).
## Part 4: Deploying to IPFS
## Deploying to IPFS
### web3.storage: deploy to IPFS via web3.storage using the provided script
@@ -102,3 +140,18 @@ To access your content on IPFS:
2. **Public IPFS gateway:** Access your content via a public IPFS gateway, such as [https://dweb.link](https://dweb.link/) or [https://w3s.link/](https://w3s.link/). Use the gateway URL with your CID appended, like `https://dweb.link/ipfs/your_cid`.
Replace `your_cid` with the actual CID.
## Cloudflare Settings
We recommend that you add your website to Cloudflare for additional security settings.
To block OFAC Sanctioned countries:
1. Navigate Websites > Domain > Security > WAF
2. Create Rule with the following settings:
* If incoming requests match
`(ip.geoip.country eq "CU") or (ip.geoip.country eq "IR") or (ip.geoip.country eq "KP") or (ip.geoip.country eq "SY") or (ip.geoip.country eq "MM") or (ip.geoip.subdivision_1_iso_code eq "UA-09") or (ip.geoip.subdivision_1_iso_code eq "UA-14") or (ip.geoip.subdivision_1_iso_code eq "UA-43")`
* This rule will bring up a Cloudflare page when a restricted geography tries to access your site. You will have the option to display:
1. Custom Text
- (e.g. `Because you appear to be a resident of, or trading from, a jurisdiction that violates our terms of use, or have engaged in activity that violates our terms of use, you have been blocked. You may withdraw your funds from the protocol at any time.`)
2. Default Cloudflare WAF block page
+25 -13
View File
@@ -1,17 +1,19 @@
{
"name": "dydx-chain-web",
"private": true,
"version": "0.0.1",
"version": "1.0.0",
"type": "module",
"license": "BSL-1.1",
"license": "AGPL-3.0",
"engines": {
"node": ">=18"
},
"scripts": {
"dev": "vite",
"build": "vite build",
"build:inject-app-deeplinks": "sh scripts/inject-app-deeplinks.sh",
"build:inject-amplitude": "node scripts/inject-amplitude.js",
"build:inject-bugsnag": "node scripts/inject-bugsnag.js",
"build:inject-intercom": "node scripts/inject-intercom.js",
"build:inject-statuspage": "node scripts/inject-statuspage.js",
"deploy:ipfs": "node scripts/upload-ipfs.js --verbose",
"deploy:update-ipns": "node scripts/update-ipns.js",
@@ -31,20 +33,23 @@
"packageManager": "pnpm@8.6.6",
"dependencies": {
"@0xsquid/sdk": "^1.10.0",
"@cosmjs/amino": "^0.31.0",
"@cosmjs/crypto": "^0.31.0",
"@cosmjs/encoding": "^0.31.0",
"@cosmjs/proto-signing": "^0.31.0",
"@cosmjs/stargate": "^0.31.0",
"@cosmjs/tendermint-rpc": "^0.31.0",
"@dydxprotocol/abacus": "^0.4.7",
"@dydxprotocol/v4-client-js": "^0.32.0",
"@dydxprotocol/v4-localization": "^0.0.25",
"@cosmjs/amino": "^0.32.1",
"@cosmjs/crypto": "^0.32.1",
"@cosmjs/encoding": "^0.32.1",
"@cosmjs/proto-signing": "^0.32.1",
"@cosmjs/stargate": "^0.32.1",
"@cosmjs/tendermint-rpc": "^0.32.1",
"@dydxprotocol/v4-abacus": "^1.3.2",
"@dydxprotocol/v4-client-js": "^1.0.17",
"@dydxprotocol/v4-localization": "^1.1.19",
"@ethersproject/providers": "^5.7.2",
"@js-joda/core": "^5.5.3",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-collapsible": "^1.0.3",
"@radix-ui/react-dialog": "^1.0.4",
"@radix-ui/react-dropdown-menu": "^2.0.5",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-navigation-menu": "^1.1.3",
"@radix-ui/react-popover": "^1.0.6",
"@radix-ui/react-radio-group": "^1.1.3",
@@ -87,6 +92,7 @@
"buffer": "^6.0.3",
"cmdk": "^0.2.0",
"color": "^4.2.3",
"cosmjs-types": "^0.9.0",
"crypto-js": "^4.1.1",
"ethers": "^6.6.1",
"graz": "^0.0.43",
@@ -94,6 +100,7 @@
"long": "^5.2.3",
"luxon": "^3.3.0",
"qr-code-styling": "1.6.0-rc.1",
"query-string": "^8.1.0",
"react": "^18.2.0",
"react-aria": "^3.25.0",
"react-dom": "^18.2.0",
@@ -105,8 +112,8 @@
"reselect": "^4.1.8",
"styled-components": "^5.3.11",
"use-latest": "^1.2.1",
"viem": "^1.1.6",
"wagmi": "^1.3.7"
"viem": "^1.20.0",
"wagmi": "^1.4.12"
},
"devDependencies": {
"@babel/core": "^7.22.5",
@@ -149,5 +156,10 @@
"vitest": "^0.32.2",
"w3name": "^1.0.8",
"web3.storage": "^4.5.4"
},
"pnpm": {
"overrides": {
"follow-redirects": "1.15.3"
}
}
}
+1323 -673
View File
File diff suppressed because it is too large Load Diff
+14 -38
View File
@@ -4,71 +4,47 @@
"details": [
{
"appIDs": [
"75C6UARB5H.exchangeV4.dydx.trading"
"{PLACE_YOUR_APP_ID_HERE}"
],
"components": [
{
"/": "/trade/*"
"/": "/"
},
{
"/": "/r/*"
"/": "/#/"
},
{
"/": "/portfolio/overview"
"/": "*/markets"
},
{
"/": "/portfolio/positions"
"/": "*/trade"
},
{
"/": "/portfolio/orders"
"/": "*/trade/*"
},
{
"/": "/portfolio/fees"
"/": "*/portfolio"
},
{
"/": "/portfolio/history"
"/": "*/portfolio/overview"
},
{
"/": "/portfolio/history/trades"
"/": "*/portfolio/positions"
},
{
"/": "/portfolio/history/transfers"
"/": "*/portfolio/orders"
},
{
"/": "/portfolio/history/funding"
"/": "*/portfolio/fees"
},
{
"/": "/rewards"
"/": "*/portfolio/history/trades"
},
{
"/": "/my-profile"
"/": "*/portfolio/history/transfers"
},
{
"/": "/rankings/hedgies"
},
{
"/": "/rankings/competition"
},
{
"/": "/rankings/diamond"
},
{
"/": "/rankings/platinum"
},
{
"/": "/rankings/gold"
},
{
"/": "/rankings/silver"
},
{
"/": "/rankings/bronze"
},
{
"/": "/rankings/pnl-absolute"
},
{
"/": "/rankings/pnl-percent"
"/": "*/portfolio/history/funding"
},
{
"/": "/walletsegue",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 122 KiB

+12
View File
@@ -0,0 +1,12 @@
[
{
"chainId": "1",
"tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"name": "Ethereum"
},
{
"chainId": "5",
"tokenAddress": "0x07865c6E87B9F70255377e024ace6630C1Eaa37F",
"name": "Ethereum Goerli"
}
]
+16
View File
@@ -0,0 +1,16 @@
{
"tradingRewardsFAQs": [
{
"questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_WHO_IS_ELIGIBLE_QUESTION",
"answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_WHO_IS_ELIGIBLE_ANSWER"
},
{
"questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_TRADING_REWARDS_WORK_QUESTION",
"answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_TRADING_REWARDS_WORK_ANSWER"
},
{
"questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_I_CLAIM_MY_REWARDS_QUESTION",
"answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_I_CLAIM_MY_REWARDS_ANSWER"
}
]
}
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
[
{
"name": "coinbase",
"label": "Coinbase",
"icon": "/exchanges/coinbase.png",
"depositType": "noble"
}
]
+367
View File
@@ -0,0 +1,367 @@
{
"1INCH-USD": {
"name": "1inch",
"tags": ["Defi"],
"websiteLink": "https://1inch.io/",
"whitepaperLink": "https://github.com/1inch",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/1inch/"
},
"AAVE-USD": {
"name": "Aave",
"tags": ["Defi"],
"websiteLink": "https://aave.com/",
"whitepaperLink": "https://github.com/aave/protocol-v2/blob/master/aave-v2-whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/aave/"
},
"ADA-USD": {
"name": "Cardano",
"tags": ["Layer 1"],
"websiteLink": "https://cardano.org/",
"whitepaperLink": "https://why.cardano.org/en/introduction/motivation/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/cardano/"
},
"ALGO-USD": {
"name": "Algorand",
"tags": ["Layer 1"],
"websiteLink": "https://algorand.com/",
"whitepaperLink": "https://algorand.com/technology/white-papers",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/algorand/"
},
"APE-USD": {
"name": "ApeCoin",
"tags": [],
"websiteLink": "https://apecoin.com/",
"whitepaperLink": "https://apecoin.com/about",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/apecoin-ape/"
},
"APT-USD": {
"name": "Aptos",
"tags": ["Layer 1"],
"websiteLink": "https://aptoslabs.com/",
"whitepaperLink": "https://aptos.dev/aptos-white-paper/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/aptos/"
},
"ARB-USD": {
"name": "Arbitrum",
"tags": [],
"websiteLink": "https://arbitrum.io/",
"whitepaperLink": "https://github.com/OffchainLabs/nitro",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/arbitrum/"
},
"ATOM-USD": {
"name": "Cosmos",
"tags": ["Layer 1"],
"websiteLink": "https://cosmos.network/",
"whitepaperLink": "https://v1.cosmos.network/resources/whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/cosmos/"
},
"AVAX-USD": {
"name": "Avalanche",
"tags": ["Layer 1"],
"websiteLink": "https://www.avalabs.org/",
"whitepaperLink": "https://assets.website-files.com/5d80307810123f5ffbb34d6e/6008d7bbf8b10d1eb01e7e16_Avalanche%20Platform%20Whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/avalanche/"
},
"BCH-USD": {
"name": "Bitcoin Cash",
"tags": ["Layer 1"],
"websiteLink": "https://bitcoincash.org/",
"whitepaperLink": "https://bitcoincash.org/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/bitcoin-cash/"
},
"BONK-USD": {
"name": "BONK COIN",
"tags": [],
"websiteLink": "https://bonkcoin.com/",
"whitepaperLink": "https://bonkcoin.com/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/bonk1/"
},
"BLUR-USD": {
"name": "Blur",
"tags": [],
"websiteLink": "https://blur.io/",
"whitepaperLink": "https://docs.blur.foundation/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/blur-token/"
},
"CELO-USD": {
"name": "Celo",
"tags": [],
"websiteLink": "https://celo.org",
"whitepaperLink": "https://docs.celo.org",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/celo/"
},
"BTC-USD": {
"name": "Bitcoin",
"tags": ["Layer 1"],
"websiteLink": "https://bitcoin.org/",
"whitepaperLink": "https://bitcoin.org/bitcoin.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/bitcoin/"
},
"COMP-USD": {
"name": "Compound",
"tags": ["Defi"],
"websiteLink": "https://compound.finance/",
"whitepaperLink": "https://compound.finance/documents/Compound.Whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/compound/"
},
"CRV-USD": {
"name": "Curve",
"tags": ["Governance"],
"websiteLink": "https://curve.fi/",
"whitepaperLink": "https://curve.fi/whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/curve-dao-token/"
},
"DOGE-USD": {
"name": "Dogecoin",
"tags": ["Layer 1"],
"websiteLink": "https://dogecoin.com/",
"whitepaperLink": "https://github.com/dogecoin/dogecoin",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/dogecoin/"
},
"DOT-USD": {
"name": "Polkadot",
"tags": ["Layer 1"],
"websiteLink": "https://polkadot.network/",
"whitepaperLink": "https://polkadot.network/PolkaDotPaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/polkadot-new/"
},
"ENJ-USD": {
"name": "Enjin",
"tags": [],
"websiteLink": "https://enjin.io/",
"whitepaperLink": "https://cdn.enjin.io/downloads/whitepapers/enjin-coin/en.pdf/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/enjin-coin/"
},
"EOS-USD": {
"name": "EOS",
"tags": ["Layer 1"],
"websiteLink": "https://eos.io/",
"whitepaperLink": "https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/eos/"
},
"ETC-USD": {
"name": "Ethereum Classic",
"tags": ["Layer 1"],
"websiteLink": "https://ethereumclassic.org/",
"whitepaperLink": "https://ethereumclassic.org/why-classic",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/ethereum-classic/"
},
"ETH-USD": {
"name": "Ethereum",
"tags": ["Layer 1"],
"websiteLink": "https://ethereum.org/",
"whitepaperLink": "https://ethereum.org/whitepaper/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/ethereum/",
"displayStepSize": "0.001",
"displayTickSize": "0.1"
},
"FIL-USD": {
"name": "Filecoin",
"tags": ["Layer 1"],
"websiteLink": "https://filecoin.io/",
"whitepaperLink": "https://filecoin.io/filecoin.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/filecoin/"
},
"HNT-USD": {
"name": "Helium",
"tags": ["Layer 1"],
"websiteLink": "https://www.helium.com",
"whitepaperLink": "http://whitepaper.helium.com",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/helium/"
},
"ICP-USD": {
"name": "Internet Computer",
"tags": ["Layer 1"],
"websiteLink": "https://dfinity.org",
"whitepaperLink": "https://dfinity.org/whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/internet-computer/"
},
"LDO-USD": {
"name": "Lido DAO",
"tags": ["Defi"],
"websiteLink": "https://lido.fi/",
"whitepaperLink": "https://lido.fi/static/Lido:Ethereum-Liquid-Staking.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/lido-dao/"
},
"LINK-USD": {
"name": "Chainlink",
"tags": ["Defi"],
"websiteLink": "https://chain.link/",
"whitepaperLink": "https://link.smartcontract.com/whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/chainlink/"
},
"LTC-USD": {
"name": "Litecoin",
"tags": ["Layer 1"],
"websiteLink": "https://litecoin.org/",
"whitepaperLink": "https://litecoin.info/index.php/Main_Page",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/litecoin/"
},
"MATIC-USD": {
"name": "Polygon",
"tags": ["Layer 2"],
"websiteLink": "https://polygon.technology/",
"whitepaperLink": "https://polygon.technology/lightpaper-polygon.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/polygon/"
},
"MKR-USD": {
"name": "Maker",
"tags": ["Governance"],
"websiteLink": "https://makerdao.com",
"whitepaperLink": "https://makerdao.com/whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/maker/"
},
"NEAR-USD": {
"name": "NEAR Protocol",
"tags": ["Layer 1"],
"websiteLink": "https://near.org",
"whitepaperLink": "https://near.org/papers/the-official-near-white-paper/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/near-protocol/"
},
"OP-USD": {
"name": "Optimism",
"tags": [],
"websiteLink": "https://www.optimism.io/",
"whitepaperLink": "https://github.com/ethereum-optimism",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/optimism-ethereum/"
},
"PEPE-USD": {
"name": "Pepe",
"tags": [],
"websiteLink": "https://www.pepe.vip/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/pepe/"
},
"RUNE-USD": {
"name": "THORChain",
"tags": ["Layer 1"],
"websiteLink": "https://thorchain.org",
"whitepaperLink": "https://whitepaper.io/document/709/thorchain-whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/thorchain/"
},
"SEI-USD": {
"name": "Sei",
"tags": ["Layer 1", "Defi"],
"websiteLink": "https://www.sei.io/",
"whitepaperLink": "https://github.com/sei-protocol/sei-chain/blob/3c9576fee3494ce039df684624f918dd8066ba3f/whitepaper/Sei_Whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/sei/"
},
"SHIB-USD": {
"name": "Shiba Inu",
"tags": [],
"websiteLink": "https://shibatoken.com/",
"whitepaperLink": "https://docs.shibatoken.com/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/shiba-inu/"
},
"SNX-USD": {
"name": "Synthetix",
"tags": ["Defi"],
"websiteLink": "https://synthetix.io/",
"whitepaperLink": "https://docs.synthetix.io/litepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/synthetix-network-token/"
},
"SOL-USD": {
"name": "Solana",
"tags": ["Layer 1"],
"websiteLink": "https://solana.com/",
"whitepaperLink": "https://solana.com/solana-whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/solana/"
},
"SUI-USD": {
"name": "Sui",
"tags": ["Layer 1"],
"websiteLink": "https://sui.io/",
"whitepaperLink": "https://github.com/MystenLabs",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/sui/"
},
"SUSHI-USD": {
"name": "Sushi",
"tags": ["Defi"],
"websiteLink": "https://sushi.com/",
"whitepaperLink": "https://docs.sushi.com/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/sushiswap/"
},
"TIA-USD": {
"name": "Celestia",
"tags": ["Layer 1"],
"websiteLink": "https://celestia.org/",
"whitepaperLink": "https://arxiv.org/pdf/1905.09274.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/celestia/"
},
"TRX-USD": {
"name": "TRON",
"tags": ["Defi"],
"websiteLink": "https://tron.network/",
"whitepaperLink": "https://tron.network/static/doc/white_paper_v_2_0.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/tron/"
},
"UMA-USD": {
"name": "UMA",
"tags": ["Defi"],
"websiteLink": "https://umaproject.org/",
"whitepaperLink": "https://github.com/UMAprotocol/whitepaper",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/uma/"
},
"UNI-USD": {
"name": "Uniswap",
"tags": ["Defi"],
"websiteLink": "https://uniswap.org/",
"whitepaperLink": "https://uniswap.org/whitepaper-v3.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/uniswap/"
},
"WLD-USD": {
"name": "Worldcoin",
"tags": [],
"websiteLink": "https://worldcoin.org/",
"whitepaperLink": "https://whitepaper.worldcoin.org/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/worldcoin-org/"
},
"XLM-USD": {
"name": "Stellar",
"tags": ["Layer 1"],
"websiteLink": "https://www.stellar.org/",
"whitepaperLink": "https://www.stellar.org/papers/stellar-consensus-protocol",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/stellar/"
},
"XMR-USD": {
"name": "Monero",
"tags": ["Layer 1"],
"websiteLink": "https://www.getmonero.org/",
"whitepaperLink": "https://www.getmonero.org/resources/research-lab/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/monero/"
},
"XRP-USD": {
"name": "Ripple",
"tags": ["Layer 1"],
"websiteLink": "https://ripple.com/currency/",
"whitepaperLink": "https://github.com/ripple",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/xrp/"
},
"XTZ-USD": {
"name": "Tezos",
"tags": ["Layer 1"],
"websiteLink": "https://tezos.com",
"whitepaperLink": "https://tezos.com/whitepaper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/tezos/"
},
"YFI-USD": {
"name": "Yearn",
"tags": ["Defi"],
"websiteLink": "https://yearn.finance/",
"whitepaperLink": "https://docs.yearn.finance/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/yearn-finance/"
},
"ZEC-USD": {
"name": "Zcash",
"tags": ["Layer 1"],
"websiteLink": "https://z.cash/",
"whitepaperLink": "https://z.cash/technology/",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/zcash/"
},
"ZRX-USD": {
"name": "0x",
"tags": ["Defi"],
"websiteLink": "https://0x.org/",
"whitepaperLink": "https://0x.org/pdfs/0x_white_paper.pdf",
"coinMarketCapsLink": "https://coinmarketcap.com/currencies/0x/"
}
}
@@ -0,0 +1,704 @@
base_asset,exchange,pair,min_2_depth,avg_30d_vol,reference_price,risk_assessment,num_oracles,liquidity_tier,asset_name,adjust_by_market
AAVE,Mexc,AAVE_USDT,403707.603,299498.6587,88.46188619,A,7,2,AAVE,USDT-USD
AAVE,Huobi,aaveusdt,49562.27661,34092101.66,88.52768881,A,7,2,AAVE,USDT-USD
AAVE,Kraken,AAVEUSD,84969.1289,732237.4435,88.21901516,A,7,2,AAVE,
AAVE,Okx,AAVE-USDT,120824.3981,5483819.403,88.48717486,A,7,2,AAVE,USDT-USD
AAVE,Kucoin,AAVE-USDT,60134.45372,1454001.73,88.41847956,A,7,2,AAVE,USDT-USD
AAVE,Binance,AAVEUSDT,336646.7802,17941167.87,88.40806057,A,7,2,AAVE,USDT-USD
AAVE,CoinbasePro,AAVE-USD,162207.2275,7955414.095,88.41304215,A,7,2,AAVE,
ADA,Okx,ADA-USDT,303911.146,12693505.79,0.4718322348,A,9,1,Cardano,USDT-USD
ADA,CoinbasePro,ADA-USD,611511.2428,18323224.07,0.4703816721,A,9,1,Cardano,
ADA,Huobi,adausdt,149750.1588,18688486.68,0.470293013,A,9,1,Cardano,USDT-USD
ADA,Kucoin,ADA-USDT,204346.5493,11339662.31,0.470650622,A,9,1,Cardano,USDT-USD
ADA,Bitstamp,ADA/USD,111141.4265,495063.9401,0.4732612949,A,9,1,Cardano,
ADA,Mexc,ADA_USDT,1480561.883,34705754.08,0.4706681442,A,9,1,Cardano,USDT-USD
ADA,Bybit,ADAUSDT,261755.7266,15267158.53,0.4715127504,A,9,1,Cardano,USDT-USD
ADA,Kraken,ADAUSD,631495.1952,4783679.81,0.4728831552,A,9,1,Cardano,
ADA,Binance,ADAUSDT,1014519.017,74913609.68,0.4709109462,A,9,1,Cardano,USDT-USD
AGIX,Okx,AGIX-USDT,144402.4677,1230616.692,0.2534299858,A,6,2,SingularityNET,USDT-USD
AGIX,Bybit,AGIXUSDT,72731.67454,2177116.497,0.2534800192,A,6,2,SingularityNET,USDT-USD
AGIX,Kucoin,AGIX-USDT,86823.62761,4637581.791,0.2531545743,A,6,2,SingularityNET,USDT-USD
AGIX,Mexc,AGIX_USDT,114261.8075,179945.4082,0.2532243225,A,6,2,SingularityNET,USDT-USD
AGIX,Binance,AGIXUSDT,181499.5614,6601700.149,0.2535772917,A,6,2,SingularityNET,USDT-USD
AGIX,Gate,AGIX_USDT,50000,100000,0,A,6,2,SingularityNET,USDT-USD
ALGO,Kucoin,ALGO-USDT,125172.0507,2774508.432,0.1612760665,A,6,2,Algorand,USDT-USD
ALGO,Mexc,ALGO_USDT,471722.5569,391031.4403,0.1615972948,A,6,2,Algorand,USDT-USD
ALGO,Okx,ALGO-USDT,84724.99655,3001155.055,0.1614784231,A,6,2,Algorand,USDT-USD
ALGO,CoinbasePro,ALGO-USD,137293.3037,3626194.058,0.1612613776,A,6,2,Algorand,
ALGO,Kraken,ALGOUSD,94239.46899,856438.0736,0.1611316036,A,6,2,Algorand,
ALGO,Binance,ALGOUSDT,240363.9844,10216526.81,0.1613137606,A,6,2,Algorand,USDT-USD
APE,Mexc,APE_USDT,845830.979,329116.5427,1.31149687,A,7,2,ApeCoin,USDT-USD
APE,Kucoin,APE-USDT,74830.83223,1527594.928,1.306893397,A,7,2,ApeCoin,USDT-USD
APE,CoinbasePro,APE-USD,79825.96928,1765569.337,1.310147807,A,7,2,ApeCoin,
APE,Okx,APE-USDT,127038.7774,4931009.134,1.310171735,A,7,2,ApeCoin,USDT-USD
APE,Binance,APEUSDT,295540.0092,16809984.56,1.309457667,A,7,2,ApeCoin,USDT-USD
APE,Kraken,APEUSD,47261.34196,350969.3303,1.302436726,A,7,2,ApeCoin,
APE,Gate,APE_USDT,50000,100000,0,A,7,2,ApeCoin,USDT-USD
APT,Binance,APTUSDT,970622.772,42662112,8.365109058,A,8,2,Aptos,USDT-USD
APT,Kraken,APTUSD,95252.8507,687239.9038,8.373953519,A,8,2,Aptos,
APT,Bybit,APTUSDT,421662.7604,13658424.61,8.360517459,A,8,2,Aptos,USDT-USD
APT,Kucoin,APT-USDT,59781.95498,3012611.094,8.371347497,A,8,2,Aptos,USDT-USD
APT,Mexc,APT_USDT,188448.7027,6995386.772,8.37360865,A,8,2,Aptos,USDT-USD
APT,CoinbasePro,APT-USD,158248.5255,5176336.024,8.369192123,A,8,2,Aptos,
APT,Okx,APT-USDT,596052.5515,20209030.67,8.37385096,A,8,2,Aptos,USDT-USD
APT,Gate,APT_USDT,50000,100000,0,A,8,2,Aptos,USDT-USD
ARB,Kraken,ARBUSD,100206.2199,4381943.143,1.705803002,A,8,1,Arbitrum,
ARB,Mexc,ARB_USDT,563395.9496,70966050.57,1.700151185,A,8,1,Arbitrum,USDT-USD
ARB,CoinbasePro,ARB-USD,323984.7248,25023919.67,1.706804349,A,8,1,Arbitrum,
ARB,Binance,ARBUSDT,1448064.308,225490594,1.700534337,A,8,1,Arbitrum,USDT-USD
ARB,Bybit,ARBUSDT,188544.697,49644508.17,1.697965318,A,8,1,Arbitrum,USDT-USD
ARB,Okx,ARB-USDT,619050.2317,56911723.48,1.700105696,A,8,1,Arbitrum,USDT-USD
ARB,Kucoin,ARB-USDT,244278.1403,15751598.26,1.705204466,A,8,1,Arbitrum,USDT-USD
ARB,Huobi,arbusdt,111073.3497,24106121.68,1.696818375,A,8,1,Arbitrum,USDT-USD
ATOM,Kucoin,ATOM-USDT,122511.6105,4164205.618,9.196821466,A,8,2,Cosmos,USDT-USD
ATOM,CoinbasePro,ATOM-USD,205758.8309,4244575.601,9.188194158,A,8,2,Cosmos,
ATOM,Binance,ATOMUSDT,500205.8745,32707609.21,9.19886839,A,8,2,Cosmos,USDT-USD
ATOM,Kraken,ATOMUSD,228688.3729,1024035.956,9.218557996,A,8,2,Cosmos,
ATOM,Okx,ATOM-USDT,147209.9881,6727992.679,9.196235185,A,8,2,Cosmos,USDT-USD
ATOM,Mexc,ATOM_USDT,396797.5433,1008586.239,9.21317801,A,8,2,Cosmos,USDT-USD
ATOM,Bybit,ATOMUSDT,100035.0706,5523700.635,9.191262868,A,8,2,Cosmos,USDT-USD
ATOM,Gate,ATOM_USDT,50000,100000,0,A,8,2,Cosmos,USDT-USD
AVAX,Okx,AVAX-USDT,459223.0249,27191336.53,30.3671387,A,9,1,Avalanche,USDT-USD
AVAX,Mexc,AVAX_USDT,2630410.171,40197237.8,30.31335915,A,9,1,Avalanche,USDT-USD
AVAX,CoinbasePro,AVAX-USD,710189.1641,41234008.85,30.43579342,A,9,1,Avalanche,
AVAX,Kraken,AVAXUSD,455749.7351,5083869.862,30.36461631,A,9,1,Avalanche,
AVAX,Huobi,avaxusdt,83674.34414,20197355.5,30.38713582,A,9,1,Avalanche,USDT-USD
AVAX,Bitstamp,AVAX/USD,78931.59345,492591.779,30.51926775,A,9,1,Avalanche,
AVAX,Binance,AVAXUSDT,1424442.662,110228072.3,30.31927119,A,9,1,Avalanche,USDT-USD
AVAX,Bybit,AVAXUSDT,266594.6447,19032772.46,30.37667694,A,9,1,Avalanche,USDT-USD
AVAX,Kucoin,AVAX-USDT,256007.3589,13423273.72,30.36129437,A,9,1,Avalanche,USDT-USD
BCH,Kraken,BCHUSD,203340.9953,1163173.528,236.4383838,A,9,1,Bitcoin Cash,
BCH,Bitstamp,BCH/USD,133890.8622,1113055.48,236.3834073,A,9,1,Bitcoin Cash,
BCH,Kucoin,BCH-USDT,153403.2244,1766025.88,236.2130317,A,9,1,Bitcoin Cash,USDT-USD
BCH,Mexc,BCH_USDT,1688109.018,340077.5421,236.974317,A,9,1,Bitcoin Cash,USDT-USD
BCH,Binance,BCHUSDT,672821.7917,32395763.97,236.0220829,A,9,1,Bitcoin Cash,USDT-USD
BCH,Bybit,BCHUSDT,156013.3525,7323063.446,236.304741,A,9,1,Bitcoin Cash,USDT-USD
BCH,Huobi,bchusdt,65221.14333,14976246.74,236.1401006,A,9,1,Bitcoin Cash,USDT-USD
BCH,Okx,BCH-USDT,351452.4549,15579827.1,236.1496084,A,9,1,Bitcoin Cash,USDT-USD
BCH,CoinbasePro,BCH-USD,448678.0454,10694749.58,236.3332929,A,9,1,Bitcoin Cash,
BLUR,Kraken,BLURUSD,99075.46212,1216513.285,0.6025188372,A,7,2,Blur,
BLUR,Bybit,BLURUSDT,68313.916,6461469.994,0.60531087,A,7,2,Blur,USDT-USD
BLUR,Binance,BLURUSDT,523824.0691,49785352.29,0.6085401119,A,7,2,Blur,USDT-USD
BLUR,Kucoin,BLUR-USDT,114279.3879,3580944.358,0.6060076016,A,7,2,Blur,USDT-USD
BLUR,Okx,BLUR-USDT,242440.7708,21042871.79,0.6072397492,A,7,2,Blur,USDT-USD
BLUR,CoinbasePro,BLUR-USD,156092.3813,8736803.112,0.6038877368,A,7,2,Blur,
BLUR,Mexc,BLUR_USDT,845700.0176,614271.1779,0.6015683969,A,7,2,Blur,USDT-USD
BNB,Okx,BNB-USDT,171035.3871,10049830.17,291.7391615,A,6,2,Binance Coin,USDT-USD
BNB,Kucoin,BNB-USDT,172933.5367,7563235.244,291.8671543,A,6,2,Binance Coin,USDT-USD
BNB,Mexc,BNB_USDT,2668302.204,2095942.424,291.3317029,A,6,2,Binance Coin,USDT-USD
BNB,Binance,BNBUSDT,2315487.589,299938471.1,292.0261567,A,6,2,Binance Coin,USDT-USD
BNB,Bybit,BNBUSDT,73840.12419,11584488.51,291.812684,A,6,2,Binance Coin,USDT-USD
BNB,Gate,BNB_USDT,50000,100000,0,A,6,2,Binance Coin,USDT-USD
BONK,Bybit,BONKUSDT,91223.30674,10108782.84,1.09E-05,A,6,2,Bonk Token,USDT-USD
BONK,Mexc,BONK_USDT,880507.727,1996432.036,1.10E-05,A,6,2,Bonk Token,USDT-USD
BONK,Binance,BONKUSDT,496236.8093,63520367.26,1.09E-05,A,6,2,Bonk Token,USDT-USD
BONK,Okx,BONK-USDT,84194.41757,4939704.699,1.09E-05,A,6,2,Bonk Token,USDT-USD
BONK,CoinbasePro,BONK-USD,291120.8766,24041618.38,1.10E-05,A,6,2,Bonk Token,
BONK,Kucoin,BONK-USDT,104413.0879,5795566.827,1.09E-05,A,6,2,Bonk Token,USDT-USD
BTC,Kucoin,BTC-USDT,1385049.373,192647255.8,39920.8141,A,9,1,Bitcoin,USDT-USD
BTC,Mexc,BTC_USDT,6055794.786,468890338.6,39929.87241,A,9,1,Bitcoin,USDT-USD
BTC,Bybit,BTCUSDT,1934000.115,501075059.1,39905.40634,A,9,1,Bitcoin,USDT-USD
BTC,Okx,BTC-USDT,3216401.515,736570802.6,39910.57726,A,9,1,Bitcoin,USDT-USD
BTC,Bitstamp,BTC/USD,4904357.079,103847807.2,39898.51266,A,9,1,Bitcoin,
BTC,Huobi,btcusdt,1628523.051,85957777.78,39927.11023,A,9,1,Bitcoin,USDT-USD
BTC,CoinbasePro,BTC-USD,11838510.17,799998360.6,39872.42919,A,9,1,Bitcoin,
BTC,Kraken,BTCUSD,11254244.98,152725974.7,39905.34906,A,9,1,Bitcoin,
BTC,Binance,BTCUSDT,13081922.22,1943592587,39912.24136,A,9,1,Bitcoin,USDT-USD
CHZ,Okx,CHZ-USDT,76721.70261,9853334.361,0.1037356507,A,6,2,Chiliz,USDT-USD
CHZ,Mexc,CHZ_USDT,230477.9128,285408.6504,0.1038430482,A,6,2,Chiliz,USDT-USD
CHZ,CoinbasePro,CHZ-USD,51276.07653,1252645.033,0.1054762023,A,6,2,Chiliz,
CHZ,Kraken,CHZUSD,48524.85664,395637.5252,0.1050375877,A,6,2,Chiliz,
CHZ,Binance,CHZUSDT,249888.0127,28501304.85,0.1046721926,A,6,2,Chiliz,USDT-USD
CHZ,Gate,CHZ_USDT,50000,100000,0,A,6,2,Chiliz,USDT-USD
CRV,Kraken,CRVUSD,60416.85503,292275.2165,0.4482389055,A,6,2,Curve DAO Token,
CRV,Kucoin,CRV-USDT,50096.30378,680353.338,0.4434254994,A,6,2,Curve DAO Token,USDT-USD
CRV,Binance,CRVUSDT,265385.0097,9688519.274,0.443424373,A,6,2,Curve DAO Token,USDT-USD
CRV,CoinbasePro,CRV-USD,96582.28361,871025.6346,0.4446821049,A,6,2,Curve DAO Token,
CRV,Mexc,CRV_USDT,202941.3475,133320.8099,0.4438313683,A,6,2,Curve DAO Token,USDT-USD
CRV,Okx,CRV-USDT,109901.21,6873330.009,0.4425725114,A,6,2,Curve DAO Token,USDT-USD
DOGE,CoinbasePro,DOGE-USD,705184.7562,25424875.32,0.07793120656,A,9,1,Dogecoin,
DOGE,Okx,DOGE-USDT,565834.5118,33076839.3,0.07788150395,A,9,1,Dogecoin,USDT-USD
DOGE,Mexc,DOGE_USDT,1091538.578,22937578.29,0.0779243829,A,9,1,Dogecoin,USDT-USD
DOGE,Kraken,DOGEUSD,547998.0729,4621710.265,0.07778464129,A,9,1,Dogecoin,
DOGE,Bybit,DOGEUSDT,290256.381,15914185,0.07796760983,A,9,1,Dogecoin,USDT-USD
DOGE,Bitstamp,DOGE/USD,46447.64873,189541.7938,0.07799339803,A,9,1,Dogecoin,
DOGE,Binance,DOGEUSDT,1252926.134,84403824.56,0.07796643769,A,9,1,Dogecoin,USDT-USD
DOGE,Huobi,dogeusdt,269955.645,21525311.57,0.07794967908,A,9,1,Dogecoin,USDT-USD
DOGE,Kucoin,DOGE-USDT,365702.9014,7810505.65,0.07798714967,A,9,1,Dogecoin,USDT-USD
DOT,Kraken,DOTUSD,368701.8747,4429592.47,6.452188898,A,8,1,Polkadot,
DOT,Okx,DOT-USDT,222355.039,10742911.87,6.458175307,A,8,1,Polkadot,USDT-USD
DOT,Huobi,dotusdt,45783.29935,10974447.87,6.450317276,A,8,1,Polkadot,USDT-USD
DOT,Mexc,DOT_USDT,1098245.94,1339831.03,6.446585762,A,8,1,Polkadot,USDT-USD
DOT,Bybit,DOTUSDT,166496.7868,9913978.391,6.454271244,A,8,1,Polkadot,USDT-USD
DOT,CoinbasePro,DOT-USD,168119.2694,9778920.932,6.452749635,A,8,1,Polkadot,
DOT,Kucoin,DOT-USDT,124303.7984,5544103.268,6.453780538,A,8,1,Polkadot,USDT-USD
DOT,Binance,DOTUSDT,593806.1697,48873686.06,6.451243808,A,8,1,Polkadot,USDT-USD
ENS,Mexc,ENS_USDT,367658.849,670539.5241,17.98863652,A,6,2,Ethereum Name Service (ENS),USDT-USD
ENS,Kucoin,ENS-USDT,54724.81451,3676707.428,17.75880758,A,6,2,Ethereum Name Service (ENS),USDT-USD
ENS,Binance,ENSUSDT,291418.3232,62479176.65,17.81688813,A,6,2,Ethereum Name Service (ENS),USDT-USD
ENS,CoinbasePro,ENS-USD,91775.13594,7641723.902,17.79343763,A,6,2,Ethereum Name Service (ENS),
ENS,Okx,ENS-USDT,137796.003,17044833.9,17.78364476,A,6,2,Ethereum Name Service (ENS),USDT-USD
ENS,Gate,ENS_USDT,50000,100000,0,A,6,2,Ethereum Name Service (ENS),USDT-USD
EOS,Binance,EOSUSDT,372008.7468,8074383.692,0.6830128043,A,8,2,Eos,USDT-USD
EOS,Mexc,EOS_USDT,1199704.281,272102.5368,0.6840073934,A,8,2,Eos,USDT-USD
EOS,Kucoin,EOS-USDT,75854.21225,709014.6871,0.68384828,A,8,2,Eos,USDT-USD
EOS,CoinbasePro,EOS-USD,77320.52881,1313993.017,0.6822937779,A,8,2,Eos,
EOS,Kraken,EOSUSD,88673.50535,723904.186,0.6839062109,A,8,2,Eos,
EOS,Okx,EOS-USDT,139325.4759,9112853.76,0.6825281331,A,8,2,Eos,USDT-USD
EOS,Bybit,EOSUSDT,50578.19146,5841158.864,0.6822045569,A,8,2,Eos,USDT-USD
EOS,Gate,EOS_USDT,50000,100000,0,A,8,2,Eos,USDT-USD
ETC,Kucoin,ETC-USDT,113759.0808,3477554.997,22.85192736,A,8,1,Ethereum Classic,USDT-USD
ETC,Binance,ETCUSDT,655668.4981,60729272.86,22.86694828,A,8,1,Ethereum Classic,USDT-USD
ETC,Bybit,ETCUSDT,49561.58743,2838378.919,22.8367253,A,8,1,Ethereum Classic,USDT-USD
ETC,Kraken,ETCUSD,155878.8877,734888.778,22.88123977,A,8,1,Ethereum Classic,
ETC,CoinbasePro,ETC-USD,584427.6111,7597750.664,22.83725611,A,8,1,Ethereum Classic,
ETC,Huobi,etcusdt,81646.91108,13533193.91,22.77483439,A,8,1,Ethereum Classic,USDT-USD
ETC,Okx,ETC-USDT,338589.5466,23459446.52,22.81594291,A,8,1,Ethereum Classic,USDT-USD
ETC,Mexc,ETC_USDT,1378585.921,911135.813,22.92403344,A,8,1,Ethereum Classic,USDT-USD
ETH,Bitstamp,ETH/USD,1786424.201,19272496.97,2212.492226,A,9,1,Ethereum,
ETH,Okx,ETH-USDT,2444418.764,388934350.5,2210.16441,A,9,1,Ethereum,USDT-USD
ETH,Huobi,ethusdt,1695970.121,34272154.83,2212.288729,A,9,1,Ethereum,USDT-USD
ETH,Kucoin,ETH-USDT,1037412.076,119386693.6,2211.480181,A,9,1,Ethereum,USDT-USD
ETH,Bybit,ETHUSDT,1345249.473,304189767.2,2211.399676,A,9,1,Ethereum,USDT-USD
ETH,Kraken,ETHUSD,5075383.05,56853252.58,2212.377288,A,9,1,Ethereum,
ETH,Mexc,ETH_USDT,4484321.007,210359167.7,2214.032265,A,9,1,Ethereum,USDT-USD
ETH,CoinbasePro,ETH-USD,7298871.343,296252747.3,2210.07616,A,9,1,Ethereum,
ETH,Binance,ETHUSDT,10324165.63,1060630897,2211.179573,A,9,1,Ethereum,USDT-USD
FET,Mexc,FET_USDT,494656.0995,559935.8786,0.5882081836,A,6,2,Fetch AI,USDT-USD
FET,Binance,FETUSDT,465708.0914,22769357.29,0.5862566061,A,6,2,Fetch AI,USDT-USD
FET,Kucoin,FET-USDT,96173.26242,4354855.944,0.5872583338,A,6,2,Fetch AI,USDT-USD
FET,Okx,FET-USDT,80416.82548,1578553.143,0.587271404,A,6,2,Fetch AI,USDT-USD
FET,Kraken,FETUSD,80688.82031,1386327.677,0.5848580771,A,6,2,Fetch AI,
FET,CoinbasePro,FET-USD,241779.2529,9092328.77,0.5848723328,A,6,2,Fetch AI,
FIL,Kucoin,FIL-USDT,136368.2949,7410428.74,4.93172295,A,8,1,Filecoin,USDT-USD
FIL,Kraken,FILUSD,133991.2228,1832800.962,4.933693054,A,8,1,Filecoin,
FIL,CoinbasePro,FIL-USD,258870.6985,11530932.48,4.934286612,A,8,1,Filecoin,
FIL,Bybit,FILUSDT,86576.25386,7525363.033,4.91922609,A,8,1,Filecoin,USDT-USD
FIL,Mexc,FIL_USDT,1094874.372,1819214.992,4.927851525,A,8,1,Filecoin,USDT-USD
FIL,Okx,FIL-USDT,646778.4394,55504900,4.9289709,A,8,1,Filecoin,USDT-USD
FIL,Binance,FILUSDT,844740.0409,75887089.73,4.930605871,A,8,1,Filecoin,USDT-USD
FIL,Huobi,filusdt,68173.55527,16793194.38,4.936018668,A,8,1,Filecoin,USDT-USD
FTM,Bybit,FTMUSDT,71346.61591,4128311.729,0.3352808917,A,6,2,Fantom,USDT-USD
FTM,Kraken,FTMUSD,87646.51897,1176507.833,0.3346537706,A,6,2,Fantom,
FTM,Kucoin,FTM-USDT,106225.8231,4400742.84,0.3358058793,A,6,2,Fantom,USDT-USD
FTM,Mexc,FTM_USDT,632339.7399,1081199.831,0.3365010633,A,6,2,Fantom,USDT-USD
FTM,Binance,FTMUSDT,424997.2126,25764943.66,0.3360637395,A,6,2,Fantom,USDT-USD
FTM,Okx,FTM-USDT,98090.82999,4900885.095,0.3376845609,A,6,2,Fantom,USDT-USD
GALA,Okx,GALA-USDT,189873.4137,6654005.649,0.02204820477,A,6,2,Gala,USDT-USD
GALA,Mexc,GALA_USDT,674173.1073,662194.7213,0.02211283071,A,6,2,Gala,USDT-USD
GALA,Bybit,GALAUSDT,81233.95423,2802651.478,0.02204724605,A,6,2,Gala,USDT-USD
GALA,Kraken,GALAUSD,81853.15768,971887.7737,0.02213452999,A,6,2,Gala,
GALA,Binance,GALAUSDT,415969.0247,23466983.63,0.02205812128,A,6,2,Gala,USDT-USD
GALA,Gate,GALA_USDT,50000,100000,0,A,6,2,Gala,USDT-USD
GRT,CoinbasePro,GRT-USD,212787.1065,5275612.932,0.1493811838,A,7,2,The Graph,
GRT,Okx,GRT-USDT,65342.41311,2506599.164,0.1492456221,A,7,2,The Graph,USDT-USD
GRT,Mexc,GRT_USDT,598125.0805,479952.4649,0.1491757716,A,7,2,The Graph,USDT-USD
GRT,Kraken,GRTUSD,75871.99326,633740.4267,0.1498390276,A,7,2,The Graph,
GRT,Binance,GRTUSDT,326438.7018,17403725.33,0.1491240716,A,7,2,The Graph,USDT-USD
GRT,Kucoin,GRT-USDT,81544.85738,1753762.597,0.1493661616,A,7,2,The Graph,USDT-USD
GRT,Gate,GRT_USDT,50000,100000,0,A,7,2,The Graph,USDT-USD
HBAR,Kucoin,HBAR-USDT,114290.7661,2775278.488,0.07132025496,A,7,2,Hedera Hashgraph,USDT-USD
HBAR,Mexc,HBAR_USDT,460300.1662,483877.2872,0.07108943658,A,7,2,Hedera Hashgraph,USDT-USD
HBAR,CoinbasePro,HBAR-USD,214294.0589,7087561.93,0.07116005717,A,7,2,Hedera Hashgraph,
HBAR,Okx,HBAR-USDT,112689.0708,4026461.082,0.07125365623,A,7,2,Hedera Hashgraph,USDT-USD
HBAR,Huobi,hbarusdt,46422.78344,12502601.52,0.07144363395,A,7,2,Hedera Hashgraph,USDT-USD
HBAR,Binance,HBARUSDT,342801.5964,14209768.84,0.07132722883,A,7,2,Hedera Hashgraph,USDT-USD
HBAR,Bybit,HBARUSDT,45261.49627,1258321.041,0.07136344216,A,7,2,Hedera Hashgraph,USDT-USD
ICP,Binance,ICPUSDT,501774.1138,77170682.6,11.52804787,A,7,2,Internet Computer,USDT-USD
ICP,Okx,ICP-USDT,297422.7336,20593859.34,11.59386803,A,7,2,Internet Computer,USDT-USD
ICP,Mexc,ICP_USDT,229038.0671,2659248.459,11.29959518,A,7,2,Internet Computer,USDT-USD
ICP,Bybit,ICPUSDT,145658.1104,13815502.64,11.47155514,A,7,2,Internet Computer,USDT-USD
ICP,CoinbasePro,ICP-USD,481694.0934,22919263.78,11.51929241,A,7,2,Internet Computer,
ICP,Kucoin,ICP-USDT,243799.5596,21281791.71,11.4267898,A,7,2,Internet Computer,USDT-USD
ICP,Kraken,ICPUSD,152510.8207,4230646.898,11.48180455,A,7,2,Internet Computer,
INJ,Binance,INJUSDT,761854.6344,75471268.13,31.75641906,A,7,2,Injective Protocol,USDT-USD
INJ,Bybit,INJUSDT,46259.03266,8671297.48,31.81868206,A,7,2,Injective Protocol,USDT-USD
INJ,Mexc,INJ_USDT,195130.7785,2547540.558,31.75180875,A,7,2,Injective Protocol,USDT-USD
INJ,Kraken,INJUSD,110554.9597,4615214.653,31.81822066,A,7,2,Injective Protocol,
INJ,CoinbasePro,INJ-USD,263574.9589,21960083.14,31.75834432,A,7,2,Injective Protocol,
INJ,Kucoin,INJ-USDT,112763.3848,13043315.83,31.73964964,A,7,2,Injective Protocol,USDT-USD
INJ,Okx,INJ-USDT,156547.4276,6879780.129,31.838232,A,7,2,Injective Protocol,USDT-USD
JTO,CoinbasePro,JTO-USD,209989.3821,10018464.73,1.887681028,A,6,2,Jito,
JTO,Binance,JTOUSDT,350644.6827,47762160.17,1.883291251,A,6,2,Jito,USDT-USD
JTO,Bybit,JTOUSDT,74864.14695,4967573.71,1.886557933,A,6,2,Jito,USDT-USD
JTO,Mexc,JTO_USDT,138559.5351,998743.8255,1.88425904,A,6,2,Jito,USDT-USD
JTO,Okx,JTO-USDT,96745.66258,8928569.193,1.884792183,A,6,2,Jito,USDT-USD
JTO,Kucoin,JTO-USDT,87953.5565,3015273.183,1.890669659,A,6,2,Jito,USDT-USD
KAVA,CoinbasePro,KAVA-USD,176534.8573,385485.2501,0.6919030037,A,6,2,Kava,
KAVA,Mexc,KAVA_USDT,1176186.319,270495.2643,0.6895330959,A,6,2,Kava,USDT-USD
KAVA,Kucoin,KAVA-USDT,89752.19321,596070.2703,0.6890117656,A,6,2,Kava,USDT-USD
KAVA,Binance,KAVAUSDT,646090.2324,11218433.99,0.6895853325,A,6,2,Kava,USDT-USD
KAVA,Kraken,KAVAUSD,85320.83296,641014.1765,0.6908946014,A,6,2,Kava,
KAVA,Gate,KAVA_USDT,50000,100000,0,A,6,2,Kava,USDT-USD
LDO,Okx,LDO-USDT,181894.181,10111578.42,2.88714217,A,8,2,Lido DAO,USDT-USD
LDO,Binance,LDOUSDT,387738.82,41043700.87,2.883611792,A,8,2,Lido DAO,USDT-USD
LDO,CoinbasePro,LDO-USD,220300.8676,11976409.69,2.884625596,A,8,2,Lido DAO,
LDO,Kraken,LDOUSD,100447.1249,2150960.494,2.887488478,A,8,2,Lido DAO,
LDO,Mexc,LDO_USDT,588930.053,638809.6967,2.882180527,A,8,2,Lido DAO,USDT-USD
LDO,Kucoin,LDO-USDT,91009.30345,4468563.248,2.885880042,A,8,2,Lido DAO,USDT-USD
LDO,Bybit,LDOUSDT,71154.49236,6463827.135,2.885385432,A,8,2,Lido DAO,USDT-USD
LDO,Gate,LDO_USDT,50000,100000,0,A,8,2,Lido DAO,USDT-USD
LINK,Kraken,LINKUSD,552242.3853,5755261.063,13.82357462,A,8,1,ChainLink,
LINK,CoinbasePro,LINK-USD,680356.4439,32122820.26,13.80640803,A,8,1,ChainLink,
LINK,Mexc,LINK_USDT,1218298.471,49003625.57,13.80057366,A,8,1,ChainLink,USDT-USD
LINK,Binance,LINKUSDT,1057623.562,91375865.04,13.7948244,A,8,1,ChainLink,USDT-USD
LINK,Okx,LINK-USDT,275176.1551,13565986.64,13.79776617,A,8,1,ChainLink,USDT-USD
LINK,Bitstamp,LINK/USD,151182.7984,1359533.87,13.84044633,A,8,1,ChainLink,
LINK,Kucoin,LINK-USDT,196203.2947,9579617.943,13.81059009,A,8,1,ChainLink,USDT-USD
LINK,Bybit,LINKUSDT,180315.7755,14220162.33,13.85826731,A,8,1,ChainLink,USDT-USD
LTC,CoinbasePro,LTC-USD,543451.3689,13785634.51,65.4631381,A,9,1,Litecoin,
LTC,Mexc,LTC_USDT,1879096.824,17331806.29,65.43634611,A,9,1,Litecoin,USDT-USD
LTC,Okx,LTC-USDT,507929.3471,26530065.91,65.41225491,A,9,1,Litecoin,USDT-USD
LTC,Kucoin,LTC-USDT,290350.1634,6126387.388,65.4318351,A,9,1,Litecoin,USDT-USD
LTC,Bybit,LTCUSDT,201299.6733,12383937.05,65.45086009,A,9,1,Litecoin,USDT-USD
LTC,Bitstamp,LTC/USD,71302.43935,837193.57,65.38819428,A,9,1,Litecoin,
LTC,Huobi,ltcusdt,150004.7632,4614143.66,65.4369822,A,9,1,Litecoin,USDT-USD
LTC,Kraken,LTCUSD,485564.9077,2601077.121,65.43280684,A,9,1,Litecoin,
LTC,Binance,LTCUSDT,975861.6282,46447198.76,65.43597402,A,9,1,Litecoin,USDT-USD
MANA,Binance,MANAUSDT,161539.8083,8060438.22,0.4335988613,A,7,2,Decentraland,USDT-USD
MANA,Kucoin,MANA-USDT,58087.72222,503402.4757,0.4338408816,A,7,2,Decentraland,USDT-USD
MANA,Kraken,MANAUSD,84924.79935,272373.0049,0.432452467,A,7,2,Decentraland,
MANA,Mexc,MANA_USDT,253761.7046,145519.6743,0.4345951497,A,7,2,Decentraland,USDT-USD
MANA,Okx,MANA-USDT,68844.47795,1431443.961,0.4338122156,A,7,2,Decentraland,USDT-USD
MANA,CoinbasePro,MANA-USD,69142.62162,865483.8728,0.4332575848,A,7,2,Decentraland,
MANA,Gate,MANA_USDT,50000,100000,0,A,7,2,Decentraland,USDT-USD
MASK,Binance,MASKUSDT,527334.4347,29606345.22,3.252034856,A,7,2,Mask Network,USDT-USD
MASK,Okx,MASK-USDT,164626.3439,17425407.01,3.247435343,A,7,2,Mask Network,USDT-USD
MASK,Kucoin,MASK-USDT,68471.50785,2787550.55,3.250394924,A,7,2,Mask Network,USDT-USD
MASK,Mexc,MASK_USDT,551854.5319,340523.7233,3.255251096,A,7,2,Mask Network,USDT-USD
MASK,CoinbasePro,MASK-USD,76371.2574,1172479.2,3.257449365,A,7,2,Mask Network,
MASK,Bybit,MASKUSDT,55836.09372,3549089.841,3.251526238,A,7,2,Mask Network,USDT-USD
MASK,Gate,MASK_USDT,50000,100000,0,A,7,2,Mask Network,USDT-USD
MATIC,Okx,MATIC-USDT,286529.4599,19272111.96,0.7282054395,A,9,1,Matic Network,USDT-USD
MATIC,CoinbasePro,MATIC-USD,392683.598,14444572.98,0.7281953324,A,9,1,Matic Network,
MATIC,Binance,MATICUSDT,880166.8053,97986293.13,0.7281469424,A,9,1,Matic Network,USDT-USD
MATIC,Huobi,maticusdt,109573.122,15234696.66,0.7286294763,A,9,1,Matic Network,USDT-USD
MATIC,Bybit,MATICUSDT,253953.798,21099460.02,0.7281887236,A,9,1,Matic Network,USDT-USD
MATIC,Mexc,MATIC_USDT,985242.4337,45954909.9,0.7282376458,A,9,1,Matic Network,USDT-USD
MATIC,Kraken,MATICUSD,478478.4995,4510025.126,0.7294573007,A,9,1,Matic Network,
MATIC,Bitstamp,MATIC/USD,77920.84684,344911.6889,0.733080163,A,9,1,Matic Network,
MATIC,Kucoin,MATIC-USDT,356785.0871,8215026.183,0.7274795596,A,9,1,Matic Network,USDT-USD
MKR,CoinbasePro,MKR-USD,189657.3728,7901151.839,2113.462825,A,6,2,Maker,
MKR,Mexc,MKR_USDT,659686.2959,230714.6623,2119.293037,A,6,2,Maker,USDT-USD
MKR,Binance,MKRUSDT,368523.4153,23448263.7,2114.219678,A,6,2,Maker,USDT-USD
MKR,Kraken,MKRUSD,49658.74142,622993.922,2107.930364,A,6,2,Maker,
MKR,Okx,MKR-USDT,81342.70903,3487712.056,2111.932327,A,6,2,Maker,USDT-USD
MKR,Kucoin,MKR-USDT,45425.02507,675263.6294,2112.071675,A,6,2,Maker,USDT-USD
NEAR,Kucoin,NEAR-USDT,124294.3172,5843254.667,2.674161205,A,8,1,Near,USDT-USD
NEAR,Bybit,NEARUSDT,58206.62204,4630072.987,2.678918634,A,8,1,Near,USDT-USD
NEAR,CoinbasePro,NEAR-USD,185291.8636,5187550.998,2.67843549,A,8,1,Near,
NEAR,Kraken,NEARUSD,191549.9708,3360632.501,2.667463339,A,8,1,Near,
NEAR,Okx,NEAR-USDT,311377.3773,15382244.05,2.672818299,A,8,1,Near,USDT-USD
NEAR,Binance,NEARUSDT,578778.0911,61784058.07,2.676081404,A,8,1,Near,USDT-USD
NEAR,Mexc,NEAR_USDT,871096.6953,1184958.966,2.678323491,A,8,1,Near,USDT-USD
NEAR,Huobi,nearusdt,74787.28484,6999178.627,2.67181076,A,8,1,Near,USDT-USD
OP,Mexc,OP_USDT,1987545.663,1684136.999,2.871032553,A,7,2,Optimism,USDT-USD
OP,Okx,OP-USDT,456470.0968,40684606.93,2.865726402,A,7,2,Optimism,USDT-USD
OP,Bybit,OPUSDT,121956.4932,12754054.86,2.863599682,A,7,2,Optimism,USDT-USD
OP,Binance,OPUSDT,1189317.678,120606269.7,2.866861935,A,7,2,Optimism,USDT-USD
OP,Kucoin,OP-USDT,151102.3965,7514893.178,2.86647468,A,7,2,Optimism,USDT-USD
OP,CoinbasePro,OP-USD,351393.8984,22928210.76,2.864965623,A,7,2,Optimism,
OP,Gate,OP_USDT,50000,100000,0,A,7,2,Optimism,USDT-USD
ORDI,Kucoin,ORDI-USDT,110936.0169,7517594.63,51.5460857,A,6,2,Ordinals,USDT-USD
ORDI,Bybit,ORDIUSDT,119439.2682,9142897.563,51.46062583,A,6,2,Ordinals,USDT-USD
ORDI,Binance,ORDIUSDT,1816384.797,157536421.3,51.50890555,A,6,2,Ordinals,USDT-USD
ORDI,Okx,ORDI-USDT,897255.021,111729885.1,51.56285708,A,6,2,Ordinals,USDT-USD
ORDI,Huobi,ordiusdt,90017.00367,6939659.846,52.21823543,A,6,2,Ordinals,USDT-USD
ORDI,Gate,ORDI_USDT,50000,100000,0,A,6,2,Ordinals,USDT-USD
PEPE,Binance,PEPEUSDT,1854338.485,21983200.56,1.02E-06,A,6,2,Pepe,USDT-USD
PEPE,Kraken,PEPEUSD,66383.09612,339921.3126,1.02E-06,A,6,2,Pepe,
PEPE,Bybit,PEPEUSDT,70662.28564,5776041.599,1.02E-06,A,6,2,Pepe,USDT-USD
PEPE,Kucoin,PEPE-USDT,117845.5631,6320839.499,1.02E-06,A,6,2,Pepe,USDT-USD
PEPE,Mexc,PEPE_USDT,576088.0345,1051367.142,1.02E-06,A,6,2,Pepe,USDT-USD
PEPE,Okx,PEPE-USDT,253199.6634,10378463.48,1.02E-06,A,6,2,Pepe,USDT-USD
RNDR,Kucoin,RNDR-USDT,93245.66824,3389990.196,3.78277704,A,6,2,Render Token,USDT-USD
RNDR,Binance,RNDRUSDT,456778.1853,34499985.8,3.781059636,A,6,2,Render Token,USDT-USD
RNDR,CoinbasePro,RNDR-USD,180418.0343,11691967.24,3.767943401,A,6,2,Render Token,
RNDR,Kraken,RNDRUSD,62255.2913,1176061.236,3.788017753,A,6,2,Render Token,
RNDR,Mexc,RNDR_USDT,627963.3038,617023.2409,3.770998381,A,6,2,Render Token,USDT-USD
RNDR,Okx,RNDR-USDT,122198.2874,5319549.855,3.772653723,A,6,2,Render Token,USDT-USD
SAND,Okx,SAND-USDT,100469.8264,3508230.948,0.4373225476,A,7,2,SAND,USDT-USD
SAND,Kucoin,SAND-USDT,64668.48254,997968.9032,0.4371193254,A,7,2,SAND,USDT-USD
SAND,Kraken,SANDUSD,47650.66542,278973.929,0.4395664881,A,7,2,SAND,
SAND,CoinbasePro,SAND-USD,54744.16281,731889.0885,0.437434037,A,7,2,SAND,
SAND,Binance,SANDUSDT,263841.1812,14105685.55,0.4370122624,A,7,2,SAND,USDT-USD
SAND,Mexc,SAND_USDT,380990.8836,209883.4311,0.437304002,A,7,2,SAND,USDT-USD
SAND,Gate,SAND_USDT,50000,100000,0,A,7,2,SAND,USDT-USD
SEI,Binance,SEIUSDT,960266.1108,147580247.1,0.613207501,A,7,2,Sei,USDT-USD
SEI,CoinbasePro,SEI-USD,501975.7126,44992922.16,0.6149800585,A,7,2,Sei,
SEI,Huobi,seiusdt,58169.10057,38375753.16,0.6146183588,A,7,2,Sei,USDT-USD
SEI,Bybit,SEIUSDT,131815.1551,20617259.61,0.6146716564,A,7,2,Sei,USDT-USD
SEI,Kraken,SEIUSD,60743.57825,6077393.643,0.6142689745,A,7,2,Sei,
SEI,Kucoin,SEI-USDT,178642.4194,10251443.59,0.6122370319,A,7,2,Sei,USDT-USD
SEI,Mexc,SEI_USDT,456994.8627,3721782.454,0.6209961106,A,7,2,Sei,USDT-USD
SHIB,Okx,SHIB-USDT,186962.879,5752876.108,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SHIB,Bybit,SHIBUSDT,97654.78678,2621562.66,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SHIB,Kucoin,SHIB-USDT,214053.7893,4620710.046,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SHIB,CoinbasePro,SHIB-USD,472915.9234,9834603.706,8.84E-06,A,8,1,Shiba Inu,
SHIB,Binance,SHIBUSDT,711743.4514,34409618.31,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SHIB,Kraken,SHIBUSD,104567.4626,420513.5586,8.84E-06,A,8,1,Shiba Inu,
SHIB,Mexc,SHIB_USDT,1940827.945,796547.7524,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SHIB,Huobi,shibusdt,67117.45039,363334.4836,8.84E-06,A,8,1,Shiba Inu,USDT-USD
SNX,Mexc,SNX_USDT,310714.3857,335052.6602,3.112944227,A,6,2,Synthetix Network Token,USDT-USD
SNX,Kraken,SNXUSD,63489.12006,606793.6628,3.13979134,A,6,2,Synthetix Network Token,
SNX,Okx,SNX-USDT,103282.8979,3298762.932,3.135011753,A,6,2,Synthetix Network Token,USDT-USD
SNX,Bybit,SNXUSDT,60753.04211,1293350.734,3.125053636,A,6,2,Synthetix Network Token,USDT-USD
SNX,Binance,SNXUSDT,287994.4111,12367152.42,3.133185754,A,6,2,Synthetix Network Token,USDT-USD
SNX,CoinbasePro,SNX-USD,138260.8807,3807927.897,3.137731528,A,6,2,Synthetix Network Token,
SOL,Kucoin,SOL-USDT,374442.0549,56433240.02,87.53739207,A,9,1,Solana,USDT-USD
SOL,CoinbasePro,SOL-USD,2257090.149,145521917.4,87.38247282,A,9,1,Solana,
SOL,Okx,SOL-USDT,1397468.011,135207705.4,87.4902174,A,9,1,Solana,USDT-USD
SOL,Mexc,SOL_USDT,1779392.262,299329951.9,87.49495206,A,9,1,Solana,USDT-USD
SOL,Kraken,SOLUSD,2251190.633,64593290.11,87.67728718,A,9,1,Solana,
SOL,Binance,SOLUSDT,3741601.199,607947665.6,87.49377311,A,9,1,Solana,USDT-USD
SOL,Bitstamp,SOL/USD,109890.2738,2646819.043,87.31111501,A,9,1,Solana,
SOL,Bybit,SOLUSDT,831770.3877,120667847.4,87.36083166,A,9,1,Solana,USDT-USD
SOL,Huobi,solusdt,275163.2969,41233952.41,87.4809317,A,9,1,Solana,USDT-USD
STX,Okx,STX-USDT,180203.7241,13352549.39,1.463485107,A,7,2,Stacks,USDT-USD
STX,Kraken,STXUSD,58949.55711,1353219.917,1.468122483,A,7,2,Stacks,
STX,CoinbasePro,STX-USD,258400.6869,14123894.62,1.463175003,A,7,2,Stacks,
STX,Kucoin,STX-USDT,152358.5064,5233980.249,1.465347379,A,7,2,Stacks,USDT-USD
STX,Binance,STXUSDT,584610.0183,45329052.16,1.462632266,A,7,2,Stacks,USDT-USD
STX,Mexc,STX_USDT,227354.8541,915054.5567,1.463303254,A,7,2,Stacks,USDT-USD
STX,Gate,STX_USDT,50000,100000,0,A,7,2,Stacks,USDT-USD
SUI,Kucoin,SUI-USDT,157119.1,12511155.03,1.224163869,A,6,2,SuiNetwork,USDT-USD
SUI,Mexc,SUI_USDT,233548.7548,2056662.292,1.222993101,A,6,2,SuiNetwork,USDT-USD
SUI,Binance,SUIUSDT,1262079.981,111516956.8,1.223930951,A,6,2,SuiNetwork,USDT-USD
SUI,CoinbasePro,SUI-USD,164063.7043,14862283.81,1.225266393,A,6,2,SuiNetwork,
SUI,Bybit,SUIUSDT,212067.1354,19630489.94,1.225408738,A,6,2,SuiNetwork,USDT-USD
SUI,Okx,SUI-USDT,613217.7334,54191478.11,1.223865903,A,6,2,SuiNetwork,USDT-USD
SUSHI,Mexc,SUSHI_USDT,698897.3305,162827.6862,1.069891177,A,6,2,Sushi,USDT-USD
SUSHI,Binance,SUSHIUSDT,314905.5164,8301205.3,1.070356721,A,6,2,Sushi,USDT-USD
SUSHI,Okx,SUSHI-USDT,140667.711,3610840.809,1.067487683,A,6,2,Sushi,USDT-USD
SUSHI,Kraken,SUSHIUSD,60333.51362,206177.6733,1.075978241,A,6,2,Sushi,
SUSHI,CoinbasePro,SUSHI-USD,84615.09476,3085188.166,1.072066002,A,6,2,Sushi,
SUSHI,Gate,SUSHI_USDT,50000,100000,0,A,6,2,Sushi,USDT-USD
TIA,Bybit,TIAUSDT,187918.6442,14660427.8,15.52650347,A,7,2,Celestia,USDT-USD
TIA,Binance,TIAUSDT,841382.0946,102103230.5,15.53648038,A,7,2,Celestia,USDT-USD
TIA,CoinbasePro,TIA-USD,383069.4815,25165071.27,15.51546599,A,7,2,Celestia,
TIA,Kraken,TIAUSD,111097.8042,6238500.3,15.50599396,A,7,2,Celestia,
TIA,Kucoin,TIA-USDT,125355.6151,11079068.85,15.55654998,A,7,2,Celestia,USDT-USD
TIA,Mexc,TIA_USDT,100237.1437,2406206.399,15.72168637,A,7,2,Celestia,USDT-USD
TIA,Okx,TIA-USDT,552714.9757,23266716.08,15.50535992,A,7,2,Celestia,USDT-USD
TRX,Kraken,TRXUSD,256930.9396,749814.9748,0.1113946358,A,8,2,TRON,
TRX,Binance,TRXUSDT,613911.798,39811843.58,0.110779356,A,8,2,TRON,USDT-USD
TRX,Huobi,trxusdt,213398.1056,8135870.339,0.1107429915,A,8,2,TRON,USDT-USD
TRX,Okx,TRX-USDT,162323.4689,5484388.924,0.1107910725,A,8,2,TRON,USDT-USD
TRX,Bybit,TRXUSDT,137021.0481,4074633.26,0.1107581644,A,8,2,TRON,USDT-USD
TRX,Kucoin,TRX-USDT,129267.4773,2807145.376,0.1109288304,A,8,2,TRON,USDT-USD
TRX,Mexc,TRX_USDT,676244.1047,18412701.3,0.1107773897,A,8,2,TRON,USDT-USD
TRX,Gate,TRX_USDT,50000,100000,0,A,8,2,TRON,USDT-USD
UNI,Mexc,UNI_USDT,764302.9979,247466.3051,5.761766722,A,7,2,Uniswap,USDT-USD
UNI,Binance,UNIUSDT,399637.0021,17327263.14,5.766455246,A,7,2,Uniswap,USDT-USD
UNI,Bybit,UNIUSDT,67657.94054,2493651.981,5.759751567,A,7,2,Uniswap,USDT-USD
UNI,Kucoin,UNI-USDT,62238.34996,915687.2194,5.769731774,A,7,2,Uniswap,USDT-USD
UNI,Kraken,UNIUSD,110184.576,575064.438,5.744322919,A,7,2,Uniswap,
UNI,Okx,UNI-USDT,188134.5271,8636195.728,5.755593059,A,7,2,Uniswap,USDT-USD
UNI,CoinbasePro,UNI-USD,136046.1025,4933014.237,5.766666815,A,7,2,Uniswap,
WLD,Okx,WLD-USDT,251129.2683,9586681.603,2.292928825,A,6,2,Worldcoin WLD,USDT-USD
WLD,Mexc,WLD_USDT,487737.0114,273829.0676,2.273495768,A,6,2,Worldcoin WLD,USDT-USD
WLD,Bybit,WLDUSDT,56863.91933,3194845.195,2.293914994,A,6,2,Worldcoin WLD,USDT-USD
WLD,Binance,WLDUSDT,309841.6575,26594366.07,2.291594044,A,6,2,Worldcoin WLD,USDT-USD
WLD,Kucoin,WLD-USDT,82240.3581,1301628.522,2.294060237,A,6,2,Worldcoin WLD,USDT-USD
WLD,Gate,WLD_USDT,50000,100000,0,A,6,2,Worldcoin WLD,USDT-USD
XLM,Kucoin,XLM-USDT,85927.31243,1417810.596,0.1117112483,A,8,1,Stellar,USDT-USD
XLM,CoinbasePro,XLM-USD,225276.1032,8883356.851,0.1117142784,A,8,1,Stellar,
XLM,Okx,XLM-USDT,118111.3781,1765770.66,0.1116885221,A,8,1,Stellar,USDT-USD
XLM,Kraken,XLMUSD,176811.499,408089.0655,0.1115158801,A,8,1,Stellar,
XLM,Bitstamp,XLM/USD,72720.87116,733454.4667,0.1113217575,A,8,1,Stellar,
XLM,Mexc,XLM_USDT,1132933.24,618310.8309,0.1117266616,A,8,1,Stellar,USDT-USD
XLM,Bybit,XLMUSDT,88709.74889,3151890.822,0.111753146,A,8,1,Stellar,USDT-USD
XLM,Binance,XLMUSDT,345297.9107,8403369.953,0.1117183159,A,8,1,Stellar,USDT-USD
XRP,Kraken,XRPUSD,814559.1334,6616229.004,0.5113032699,A,9,1,Ripple,
XRP,Binance,XRPUSDT,1884848.243,189067323.1,0.5112663149,A,9,1,Ripple,USDT-USD
XRP,Okx,XRP-USDT,563822.8277,34832795.43,0.5114652914,A,9,1,Ripple,USDT-USD
XRP,CoinbasePro,XRP-USD,730290.9717,38862484.52,0.5115428632,A,9,1,Ripple,
XRP,Huobi,xrpusdt,130799.1755,30764931.78,0.5116267728,A,9,1,Ripple,USDT-USD
XRP,Kucoin,XRP-USDT,711262.8242,17611337.65,0.5113220721,A,9,1,Ripple,USDT-USD
XRP,Bybit,XRPUSDT,574200.8828,60341501.96,0.511381899,A,9,1,Ripple,USDT-USD
XRP,Bitstamp,XRP/USD,893779.877,8546572.012,0.5101769016,A,9,1,Ripple,
XRP,Mexc,XRP_USDT,2253802.257,64063212.39,0.5113602624,A,9,1,Ripple,USDT-USD
CFX,Mexc,CFX_USDT,741948.4908,377232.5696,0.1828636419,B,5,2,Conflux Token,USDT-USD
CFX,Kucoin,CFX-USDT,55943.9793,3166120.044,0.1814791365,B,5,2,Conflux Token,USDT-USD
CFX,Binance,CFXUSDT,425985.235,21370941.25,0.1814141679,B,5,2,Conflux Token,USDT-USD
CFX,Okx,CFX-USDT,225570.4218,11740974.87,0.1814352472,B,5,2,Conflux Token,USDT-USD
CFX,Gate,CFX_USDT,50000,100000,0,B,5,2,Conflux Token,USDT-USD
COMP,Kraken,COMPUSD,53754.17258,243932.5958,53.11057205,B,5,2,Compound Coin,
COMP,Mexc,COMP_USDT,230873.8911,180053.2444,52.64207051,B,5,2,Compound Coin,USDT-USD
COMP,Okx,COMP-USDT,66721.14412,2254113.721,52.63991084,B,5,2,Compound Coin,USDT-USD
COMP,CoinbasePro,COMP-USD,62085.28523,1437341.815,52.63084228,B,5,2,Compound Coin,
COMP,Binance,COMPUSDT,121785.3724,8389374.272,52.68915121,B,5,2,Compound Coin,USDT-USD
EGLD,Kucoin,EGLD-USDT,65252.11559,1177346.419,48.76618226,B,5,2,MultiversX,USDT-USD
EGLD,Binance,EGLDUSDT,271211.9052,11875041.97,48.79330927,B,5,2,MultiversX,USDT-USD
EGLD,Mexc,EGLD_USDT,376293.4565,276441.7792,48.74594483,B,5,2,MultiversX,USDT-USD
EGLD,CoinbasePro,EGLD-USD,52835.82668,917429.1077,48.88945848,B,5,2,MultiversX,
EGLD,Gate,EGLD_USDT,50000,100000,0,B,5,2,MultiversX,USDT-USD
FLOW,Kraken,FLOWUSD,51916.27241,275346.5158,0.7242278161,B,5,2,Flow - Dapper Labs,
FLOW,Binance,FLOWUSDT,293656.6338,9552308.898,0.7291395058,B,5,2,Flow - Dapper Labs,USDT-USD
FLOW,Mexc,FLOW_USDT,483739.2177,113468.7798,0.7323395177,B,5,2,Flow - Dapper Labs,USDT-USD
FLOW,Okx,FLOW-USDT,80766.53137,9510373.237,0.7285897993,B,5,2,Flow - Dapper Labs,USDT-USD
FLOW,Gate,FLOW_USDT,50000,100000,0,B,5,2,Flow - Dapper Labs,USDT-USD
GMT,CoinbasePro,GMT-USD,67428.76141,2248881.711,0.2560028014,B,5,2,STEPN,
GMT,Binance,GMTUSDT,462665.2276,38705519.52,0.2555371175,B,5,2,STEPN,USDT-USD
GMT,Kucoin,GMT-USDT,72869.96385,2005043.366,0.2557195795,B,5,2,STEPN,USDT-USD
GMT,Okx,GMT-USDT,152103.8921,8914015.232,0.2554599347,B,5,2,STEPN,USDT-USD
GMT,Gate,GMT_USDT,50000,100000,0,B,5,2,STEPN,USDT-USD
MEME,Bybit,MEMEUSDT,74659.94612,1660599.611,0.02253908946,B,5,2,Memecoin Price,USDT-USD
MEME,Binance,MEMEUSDT,489840.1554,31554049.74,0.02249870307,B,5,2,Memecoin Price,USDT-USD
MEME,Kucoin,MEME-USDT,50201.45759,1498743.96,0.02243463802,B,5,2,Memecoin Price,USDT-USD
MEME,Mexc,MEME_USDT,184005.5762,478785.4964,0.02260242467,B,5,2,Memecoin Price,USDT-USD
MEME,Gate,MEME_USDT,50000,100000,0,B,5,2,Memecoin Price,USDT-USD
MINA,Mexc,MINA_USDT,110130.5009,610463.4036,1.00715717,B,5,2,Mina,USDT-USD
MINA,CoinbasePro,MINA-USD,59277.03658,6118487.412,1.008738919,B,5,2,Mina,
MINA,Kraken,MINAUSD,104251.6176,1744827.397,1.002235423,B,5,2,Mina,
MINA,Binance,MINAUSDT,163902.8209,27632789.9,1.009175349,B,5,2,Mina,USDT-USD
MINA,Okx,MINA-USDT,58811.29263,5177907.38,1.013323303,B,5,2,Mina,USDT-USD
PEOPLE,Okx,PEOPLE-USDT,318441.9026,37806408.11,0.02743487292,B,5,2,ConstitutionDAO,USDT-USD
PEOPLE,Kucoin,PEOPLE-USDT,64922.56302,3574827.52,0.0273835447,B,5,2,ConstitutionDAO,USDT-USD
PEOPLE,Mexc,PEOPLE_USDT,168543.6372,757272.2515,0.02744498423,B,5,2,ConstitutionDAO,USDT-USD
PEOPLE,Binance,PEOPLEUSDT,192342.5961,85366302.35,0.02746617133,B,5,2,ConstitutionDAO,USDT-USD
PEOPLE,Gate,PEOPLE_USDT,50000,100000,0,B,5,2,ConstitutionDAO,USDT-USD
WAVES,Okx,WAVES-USDT,91892.84196,2741667.219,2.144997825,B,5,2,Waves,USDT-USD
WAVES,Binance,WAVESUSDT,272620.4813,9543737.677,2.143624016,B,5,2,Waves,USDT-USD
WAVES,Mexc,WAVES_USDT,558956.9951,168193.854,2.142261269,B,5,2,Waves,USDT-USD
WAVES,Kucoin,WAVES-USDT,55367.18425,769644.5638,2.142747289,B,5,2,Waves,USDT-USD
WAVES,Kraken,WAVESUSD,45555.16136,112134.6183,2.154872324,B,5,2,Waves,
1INCH,Binance,1INCHUSDT,223047.9107,10123584.48,0.3759697336,C,4,2,1INCH,USDT-USD
1INCH,CoinbasePro,1INCH-USD,63433.64579,1220856.095,0.3761909036,C,4,2,1INCH,
1INCH,Mexc,1INCH_USDT,220805.8565,397303.2595,0.3751712747,C,4,2,1INCH,USDT-USD
1INCH,Okx,1INCH-USDT,87382.44268,4403164.462,0.375964926,C,4,2,1INCH,USDT-USD
ACE,Binance,ACEUSDT,219186.3365,36291711.39,9.125489437,C,2,2,Fusionist,USDT-USD
ACE,Okx,ACE-USDT,120509.3158,8941538.795,9.092071496,C,2,2,Fusionist,USDT-USD
ACH,CoinbasePro,ACH-USD,97110.58491,894158.4549,0.01675701504,C,3,2,Alchemy Pay,
ACH,Binance,ACHUSDT,84700.65638,4414398.216,0.01675085779,C,3,2,Alchemy Pay,USDT-USD
ACH,Mexc,ACH_USDT,192469.0915,100559.3076,0.01679041985,C,3,2,Alchemy Pay,USDT-USD
AEUR,Binance,AEURUSDT,1270915.824,759036.3652,1.085248864,C,1,2,Anchored Coins AEUR,USDT-USD
API3,Mexc,API3_USDT,152284.022,205441.5,2.043375234,C,2,2,API3,USDT-USD
API3,Binance,API3USDT,90101.84241,17128907.56,2.048019395,C,2,2,API3,USDT-USD
AR,Okx,AR-USDT,49845.96145,2809779.829,8.610082522,C,2,2,Arweave,USDT-USD
AR,Binance,ARUSDT,118756.107,5634710.58,8.603353236,C,2,2,Arweave,USDT-USD
ARKM,Binance,ARKMUSDT,101600.3693,9290971.501,0.5035873534,C,2,2,Arkham,USDT-USD
ARKM,Mexc,ARKM_USDT,104313.7334,237646.8392,0.502258142,C,2,2,Arkham,USDT-USD
ARPA,Binance,ARPAUSDT,141483.7342,6962539.152,0.05938416152,C,1,2,ArpaCoin,USDT-USD
ASTR,Mexc,ASTR_USDT,337777.2363,556571.4433,0.1714246019,C,3,2,ASTR,USDT-USD
ASTR,Binance,ASTRUSDT,272250.3728,29115614.2,0.1710438223,C,3,2,ASTR,USDT-USD
ASTR,Okx,ASTR-USDT,61040.31153,7741218.973,0.1712013965,C,3,2,ASTR,USDT-USD
AUCTION,Mexc,AUCTION_USDT,205068.2365,269845.2565,24.64750337,C,3,2,Auction,USDT-USD
AUCTION,Binance,AUCTIONUSDT,141766.5502,24443787.65,24.52525957,C,3,2,Auction,USDT-USD
AUCTION,Okx,AUCTION-USDT,64014.51076,7264691.478,24.43296353,C,3,2,Auction,USDT-USD
AXS,Mexc,AXS_USDT,262075.6017,132406.1769,7.065952702,C,3,2,Axie Infinity,USDT-USD
AXS,Binance,AXSUSDT,231000.3653,12333785.24,7.054601867,C,3,2,Axie Infinity,USDT-USD
AXS,CoinbasePro,AXS-USD,46520.7417,953800.4786,7.063964044,C,3,2,Axie Infinity,
BAKE,Binance,BAKEUSDT,182011.4866,35921179.76,0.3094882759,C,2,2,Bakery Token,USDT-USD
BAKE,Mexc,BAKE_USDT,185326.3247,583699.372,0.3068157366,C,2,2,Bakery Token,USDT-USD
BAND,Binance,BANDUSDT,55086.31129,6612180.017,1.592617506,C,1,2,Band Protocol,USDT-USD
BEAM,Binance,BEAMUSDT,152991.9166,15969226.65,0.01691214062,C,1,2,BEAM (Merit Circle),USDT-USD
BLZ,Binance,BLZUSDT,108417.3522,5588057.361,0.2904520078,C,2,2,Bluzelle,USDT-USD
BLZ,CoinbasePro,BLZ-USD,58365.73324,369664.6277,0.2910902264,C,2,2,Bluzelle,
BOND,Binance,BONDUSDT,101881.7077,6611834.75,3.051545382,C,1,2,BarnBridge,USDT-USD
BSW,Binance,BSWUSDT,46034.40658,4599238.929,0.08886586012,C,1,2,Biswap (BSW),USDT-USD
C98,Mexc,C98_USDT,285083.0197,153443.734,0.2185707406,C,2,2,Coin98,USDT-USD
C98,Binance,C98USDT,189878.1329,5558051.461,0.2185832922,C,2,2,Coin98,USDT-USD
CAKE,Mexc,CAKE_USDT,405312.078,551396.0436,2.447890968,C,2,2,PancakeSwap,USDT-USD
CAKE,Binance,CAKEUSDT,195778.7099,23654981.25,2.454039405,C,2,2,PancakeSwap,USDT-USD
CELO,Mexc,CELO_USDT,125444.7762,302663.9345,0.6476452305,C,3,2,Celo,USDT-USD
CELO,Okx,CELO-USDT,74867.9216,2248910.392,0.6477003752,C,3,2,Celo,USDT-USD
CELO,Binance,CELOUSDT,188957.1416,10478656.48,0.6474077901,C,3,2,Celo,USDT-USD
CHR,Binance,CHRUSDT,98985.18915,8983410.231,0.2454323105,C,1,2,Chromia,USDT-USD
CTSI,Binance,CTSIUSDT,61529.46969,13400594.76,0.211724629,C,1,2,Cartesi,USDT-USD
CYBER,Binance,CYBERUSDT,157494.8313,21582311.99,6.891553463,C,2,2,CyberConnect,USDT-USD
CYBER,Mexc,CYBER_USDT,245967.0815,775034.3955,6.894934361,C,2,2,CyberConnect,USDT-USD
DATA,Binance,DATAUSDT,56436.38905,6577080.731,0.04655652469,C,1,2,Streamr DATAcoin,USDT-USD
DEGO,Binance,DEGOUSDT,49442.4569,6918692.999,2.058938225,C,2,2,Dego Finance,USDT-USD
DEGO,Mexc,DEGO_USDT,47063.22126,145028.8291,2.061702998,C,2,2,Dego Finance,USDT-USD
DIA,Binance,DIAUSDT,46415.86926,5008591.814,0.398446883,C,1,2,DIAToken,USDT-USD
DUSK,Binance,DUSKUSDT,89726.44858,5994345.592,0.24835762,C,1,2,Dusk Network,USDT-USD
EUR,Binance,EURUSDT,914754.1506,25453392.79,1.086238407,C,3,2,Euro,USDT-USD
EUR,Bitstamp,EUR/USD,161923.2853,2925912.624,1.085974486,C,3,2,Euro,
EUR,Kraken,EURUSD,973749.5483,17562785.59,1.087181078,C,3,2,Euro,
FDUSD,Binance,FDUSDUSDT,20819829.91,791868072.3,0.9982990251,C,1,2,First Digital USD,USDT-USD
FRONT,Binance,FRONTUSDT,116592.5536,8033362.547,0.4244166096,C,1,2,Frontier,USDT-USD
FTT,Binance,FTTUSDT,85361.25321,18918457.67,2.637355962,C,2,2,FTX Token,USDT-USD
FTT,Mexc,FTT_USDT,61679.15314,885931.1891,2.625461927,C,2,2,FTX Token,USDT-USD
FXS,Binance,FXSUSDT,76687.07914,7919284.862,9.870999715,C,1,2,Frax Share,USDT-USD
GAL,Binance,GALUSDT,123198.1518,6183386.884,1.713442116,C,1,2,Project Galaxy,USDT-USD
GAS,Okx,GAS-USDT,71550.26438,3589890.498,5.559745992,C,2,2,Gas,USDT-USD
GAS,Binance,GASUSDT,143459.5949,16249734.4,5.551653689,C,2,2,Gas,USDT-USD
GLMR,Binance,GLMRUSDT,66465.37977,5440648.9,0.351519818,C,2,2,Moonbeam Network Glimmer Token,USDT-USD
GLMR,Mexc,GLMR_USDT,132937.7799,226967.7255,0.3519219251,C,2,2,Moonbeam Network Glimmer Token,USDT-USD
GMX,Binance,GMXUSDT,86050.25266,8488792.893,41.68565019,C,1,2,GMX,USDT-USD
GTC,Binance,GTCUSDT,63833.57202,5559771.674,1.109504239,C,1,2,Gitcoin,USDT-USD
HFT,Mexc,HFT_USDT,92867.50229,155840.9593,0.3163831693,C,3,2,Hashflow,USDT-USD
HFT,CoinbasePro,HFT-USD,67639.33185,1082720.501,0.3166013692,C,3,2,Hashflow,
HFT,Binance,HFTUSDT,86389.41028,4335472.459,0.3155912724,C,3,2,Hashflow,USDT-USD
HIFI,Binance,HIFIUSDT,65279.10529,4308106.952,0.5695358478,C,1,2,Hifi Finance,USDT-USD
HIGH,Binance,HIGHUSDT,94832.54951,5568886.461,1.416275081,C,1,2,Highstreet,USDT-USD
HOOK,Binance,HOOKUSDT,125566.4187,10904796.41,0.8514358619,C,1,2,Hooked Protocol,USDT-USD
HOT,Binance,HOTUSDT,88284.00246,4898150.064,0.00182001891,C,1,2,Holo,USDT-USD
ID,Binance,IDUSDT,105739.9887,10529785.09,0.2642775002,C,2,2,Space ID,USDT-USD
ID,Mexc,ID_USDT,99019.7159,293195.7436,0.2653625693,C,2,2,Space ID,USDT-USD
ILV,Binance,ILVUSDT,65967.97711,4756421.779,72.43485363,C,2,2,Illuvium,USDT-USD
ILV,Mexc,ILV_USDT,101351.5141,124582.7065,72.49241072,C,2,2,Illuvium,USDT-USD
IMX,Binance,IMXUSDT,159306.9212,9773348.424,1.833882485,C,4,2,Immutable X,USDT-USD
IMX,Mexc,IMX_USDT,125843.6309,288710.9571,1.831721582,C,4,2,Immutable X,USDT-USD
IMX,CoinbasePro,IMX-USD,63576.38536,3545209.657,1.832415885,C,4,2,Immutable X,
IMX,Okx,IMX-USDT,63231.7586,4815890.341,1.835477545,C,4,2,Immutable X,USDT-USD
IOTA,Binance,IOTAUSDT,156813.2627,9448427.026,0.2404979188,C,2,2,IOTA,USDT-USD
IOTA,Okx,IOTA-USDT,81364.86526,1422701.965,0.240249504,C,2,2,IOTA,USDT-USD
IOTX,Mexc,IOTX_USDT,63717.81113,114944.2482,0.04098756361,C,2,2,IoTeX,USDT-USD
IOTX,Binance,IOTXUSDT,118425.8892,5645105.663,0.04116999109,C,2,2,IoTeX,USDT-USD
JASMY,CoinbasePro,JASMY-USD,106938.7996,2456750.498,0.004883328831,C,4,2,Jasmy,
JASMY,Kucoin,JASMY-USDT,46532.2408,878234.3701,0.004897641967,C,4,2,Jasmy,USDT-USD
JASMY,Binance,JASMYUSDT,103914.894,4638424.246,0.004895538164,C,4,2,Jasmy,USDT-USD
JASMY,Mexc,JASMY_USDT,118057.5456,426212.9186,0.004900948254,C,4,2,Jasmy,USDT-USD
JOE,Binance,JOEUSDT,95891.84261,4986487.55,0.4210333582,C,2,2,TraderJoe,USDT-USD
JOE,Mexc,JOE_USDT,106334.2549,155616.5895,0.4240505807,C,2,2,TraderJoe,USDT-USD
KDA,Binance,KDAUSDT,52068.57953,6603653.169,0.9864134387,C,1,2,Kadena,USDT-USD
KLAY,Mexc,KLAY_USDT,198792.0879,193094.4612,0.1935774129,C,2,2,Klaytn,USDT-USD
KLAY,Binance,KLAYUSDT,102537.9319,8166690.792,0.1947100267,C,2,2,Klaytn,USDT-USD
KP3R,Binance,KP3RUSDT,54560.4206,6827068.529,68.97052078,C,1,2,Keep3rV1,USDT-USD
KSM,Okx,KSM-USDT,49131.02426,2272156.7,35.8946584,C,4,2,Kusama,USDT-USD
KSM,Kraken,KSMUSD,82906.03275,662412.7086,35.91468468,C,4,2,Kusama,
KSM,Mexc,KSM_USDT,51623.03643,146361.7075,35.99359072,C,4,2,Kusama,USDT-USD
KSM,Binance,KSMUSDT,104173.4084,6749163.486,35.92864815,C,4,2,Kusama,USDT-USD
LEVER,Binance,LEVERUSDT,103584.2033,8631452.701,0.001297870719,C,2,2,leverfi,USDT-USD
LEVER,Mexc,LEVER_USDT,269243.6154,100150.2478,0.001297685532,C,2,2,leverfi,USDT-USD
LOOM,Binance,LOOMUSDT,72863.84961,6250861.053,0.08656430192,C,1,2,Loom Network,USDT-USD
LPT,Binance,LPTUSDT,124147.244,4976570.721,6.65831672,C,1,2,Livepeer,USDT-USD
LQTY,Mexc,LQTY_USDT,289158.432,110300.6315,1.195620223,C,2,2,Liquity,USDT-USD
LQTY,Binance,LQTYUSDT,127715.2767,7023298.015,1.191924708,C,2,2,Liquity,USDT-USD
LRC,CoinbasePro,LRC-USD,59174.11432,3383810.585,0.2285031455,C,3,2,Loopring,
LRC,Mexc,LRC_USDT,45956.53557,124278.9266,0.2288337603,C,3,2,Loopring,USDT-USD
LRC,Binance,LRCUSDT,146930.5688,6969566.753,0.2286497941,C,3,2,Loopring,USDT-USD
LUNA,Okx,LUNA-USDT,140979.1409,2806262.42,9.33E-05,C,4,2,Terra Luna Classic,USDT-USD
LUNA,Mexc,LUNA_USDT,285530.9676,548675.4766,9.33E-05,C,4,2,Terra Luna Classic,USDT-USD
LUNA,Binance,LUNAUSDT,327295.5899,25245311.88,9.32E-05,C,4,2,Terra Luna Classic,USDT-USD
LUNA,Kucoin,LUNA-USDT,162730.8732,2161850.295,9.34E-05,C,4,2,Terra Luna Classic,USDT-USD
LUNA2,Okx,LUNA2-USDT,116714.2838,5214721.607,0.5862913961,C,4,2,Terra Luna 2,USDT-USD
LUNA2,Binance,LUNA2USDT,283182.821,12663702.95,0.5867542898,C,4,2,Terra Luna 2,USDT-USD
LUNA2,Kucoin,LUNA2-USDT,83502.73597,2063709.03,0.586261171,C,4,2,Terra Luna 2,USDT-USD
LUNA2,Mexc,LUNA2_USDT,108379.4362,339907.5678,0.5861178482,C,4,2,Terra Luna 2,USDT-USD
MAGIC,Mexc,MAGIC_USDT,264533.7207,290531.8239,0.9620408497,C,4,2,MAGIC,USDT-USD
MAGIC,Binance,MAGICUSDT,220494.1405,15191286.46,0.9583392892,C,4,2,MAGIC,USDT-USD
MAGIC,Okx,MAGIC-USDT,105405.7972,5401719.867,0.9595420314,C,4,2,MAGIC,USDT-USD
MAGIC,Gate,MAGIC_USDT,50000,100000,0,C,4,2,MAGIC,USDT-USD
MANTA,Bybit,MANTAUSDT,53885.15969,18009025.51,3.063765317,C,2,2,Manta,USDT-USD
MANTA,Binance,MANTAUSDT,403816.6432,259161217.8,3.08167379,C,2,2,Manta,USDT-USD
MAV,Mexc,MAV_USDT,185736.3436,457436.4408,0.5373792545,C,2,2,Maverick Protocol,USDT-USD
MAV,Binance,MAVUSDT,99388.71969,22924519.05,0.536668425,C,2,2,Maverick Protocol,USDT-USD
MOVR,Binance,MOVRUSDT,140137.8354,34228440.2,22.26851193,C,1,2,Moonriver,USDT-USD
NEO,Binance,NEOUSDT,174759.4944,6735135.997,10.50592939,C,2,2,NEO,USDT-USD
NEO,Mexc,NEO_USDT,285086.2477,101306.1126,10.51571434,C,2,2,NEO,USDT-USD
NFP,Binance,NFPUSDT,136224.0611,40056163.12,0.4984980965,C,1,2,NFPrompt,USDT-USD
NMR,Mexc,NMR_USDT,56441.59171,117950.3206,20.80947578,C,1,2,Numeraire,USDT-USD
NTRN,Binance,NTRNUSDT,190762.7558,22412232.21,1.043698576,C,3,2,Neutron,USDT-USD
NTRN,Kucoin,NTRN-USDT,61322.46516,4357183.961,1.0429518,C,3,2,Neutron,USDT-USD
NTRN,Mexc,NTRN_USDT,85753.64033,420380.4134,1.049013149,C,3,2,Neutron,USDT-USD
OGN,Mexc,OGN_USDT,133395.5319,153105.7316,0.1506897838,C,2,2,Origin Protocol,USDT-USD
OGN,Binance,OGNUSDT,114751.9375,8567467.491,0.1509501147,C,2,2,Origin Protocol,USDT-USD
ONE,Mexc,ONE_USDT,103633.3233,169389.5422,0.01381296016,C,1,2,Harmony,USDT-USD
ONT,Binance,ONTUSDT,101745.7079,6573307.838,0.2378290263,C,2,2,Ontology,USDT-USD
ONT,Mexc,ONT_USDT,134099.6108,119281.0604,0.2328763351,C,2,2,Ontology,USDT-USD
OSMO,CoinbasePro,OSMO-USD,45573.4572,505627.9592,1.434332792,C,2,2,osmosis,
OSMO,Binance,OSMOUSDT,184069.0761,6248594.99,1.436154852,C,2,2,osmosis,USDT-USD
OXT,Binance,OXTUSDT,121674.5039,4092402.317,0.08759780776,C,1,2,Orchid,USDT-USD
PENDLE,Mexc,PENDLE_USDT,94363.66432,302375.5024,2.414568281,C,2,2,Pendle,USDT-USD
PENDLE,Binance,PENDLEUSDT,198805.1833,19093374.54,2.411570446,C,2,2,Pendle,USDT-USD
PERP,Mexc,PERP_USDT,70959.09524,263694.8546,1.108616603,C,2,2,Perpetual Protocol,USDT-USD
PERP,Binance,PERPUSDT,97699.23947,18395585.05,1.101367961,C,2,2,Perpetual Protocol,USDT-USD
PHB,Binance,PHBUSDT,87353.37405,5541104.607,0.8191750331,C,1,2,Phoenix Global,USDT-USD
POLYX,Binance,POLYXUSDT,77106.52126,4877840.89,0.1556027116,C,1,2,Polymex,USDT-USD
POWR,Binance,POWRUSDT,101684.5648,32858394.18,0.3110983216,C,1,2,Power Ledger,USDT-USD
PROS,Binance,PROSUSDT,47335.53338,6601983.056,0.4958016306,C,1,2,Prosper,USDT-USD
PYR,Mexc,PYR_USDT,136917.2423,282019.549,5.525717506,C,2,2,Vulcan Forged,USDT-USD
PYR,Binance,PYRUSDT,67837.28685,6095379.499,5.513382639,C,2,2,Vulcan Forged,USDT-USD
QI,Binance,QIUSDT,65705.70399,4479686.822,0.01492820908,C,1,2,Benqi,USDT-USD
QNT,Binance,QNTUSDT,150130.1919,4958738.066,105.1210689,C,3,2,Quant,USDT-USD
QNT,CoinbasePro,QNT-USD,77932.07738,2702196.734,104.8651886,C,3,2,Quant,
QNT,Mexc,QNT_USDT,319187.1936,283469.3662,105.6252627,C,3,2,Quant,USDT-USD
RAD,Binance,RADUSDT,64303.27111,13728893.14,1.863131994,C,1,2,Radicle,USDT-USD
RAY,Binance,RAYUSDT,49059.70839,10476697.73,1.086883488,C,1,2,Raydium,USDT-USD
RDNT,Okx,RDNT-USDT,99487.73444,4908849.751,0.2781249382,C,2,2,Radiant Capital,USDT-USD
RDNT,Binance,RDNTUSDT,202234.405,19676252.31,0.27834352,C,2,2,Radiant Capital,USDT-USD
RIF,Binance,RIFUSDT,102720.0668,5575326.551,0.126668978,C,1,2,RIF Token,USDT-USD
RLC,CoinbasePro,RLC-USD,45038.78592,956263.9594,2.193508506,C,2,2,iExec RLC,
RLC,Binance,RLCUSDT,113296.5214,10458930.76,2.240062189,C,2,2,iExec RLC,USDT-USD
ROSE,CoinbasePro,ROSE-USD,94865.22605,2007709.124,0.09853848605,C,4,2,Oasis Network,
ROSE,Kucoin,ROSE-USDT,60914.79989,2255011.858,0.09829991324,C,4,2,Oasis Network,USDT-USD
ROSE,Binance,ROSEUSDT,188268.4384,13037035.32,0.09827645727,C,4,2,Oasis Network,USDT-USD
ROSE,Mexc,ROSE_USDT,87574.57166,553950.1122,0.09824638256,C,4,2,Oasis Network,USDT-USD
RUNE,Kucoin,RUNE-USDT,150957.3196,4886709.369,4.034373849,C,3,2,Thorchain,USDT-USD
RUNE,Kraken,RUNEUSD,64699.56261,918799.2368,4.070013999,C,3,2,Thorchain,
RUNE,Binance,RUNEUSDT,380276.4214,62447654.52,4.036291948,C,3,2,Thorchain,USDT-USD
SANTOS,Binance,SANTOSUSDT,48414.7599,10421735.09,4.748221741,C,1,2,Santos FC Fan Token,USDT-USD
SATS,Binance,SATSUSDT,270661.8914,65862844.2,0.0003862181853,C,2,2,SATS (Ordinals),USDT-USD
SATS,Okx,SATS-USDT,186918.757,23374134.77,3.87E-07,C,2,2,SATS (Ordinals),USDT-USD
SC,Binance,SCUSDT,56737.90689,11988942.85,0.008758778298,C,2,2,Siacoin,USDT-USD
SC,Kraken,SCUSD,72897.05559,939274.4661,0.009133476567,C,2,2,Siacoin,
SKL,CoinbasePro,SKL-USD,89253.48802,7106650.138,0.07392654734,C,2,2,SKALE Network,
SKL,Binance,SKLUSDT,245593.9026,14952643.43,0.07413113803,C,2,2,SKALE Network,USDT-USD
SLEEPAI,Binance,SLEEPAIUSDT,226926.639,75074601.74,1.03330556,C,1,2,Sleepless AI,USDT-USD
SLP,Binance,SLPUSDT,75829.29241,4740257.278,0.002835530307,C,1,2,Smooth Love Potion,USDT-USD
SSV,Binance,SSVUSDT,323731.8901,22076581.02,28.20046712,C,3,2,SSV Token,USDT-USD
SSV,Okx,SSV-USDT,138780.4853,10437857.38,28.20537722,C,3,2,SSV Token,USDT-USD
SSV,Mexc,SSV_USDT,72456.44543,262132.0541,28.25282324,C,3,2,SSV Token,USDT-USD
STG,Binance,STGUSDT,108865.1255,5746995.142,0.5045724388,C,2,2,Stargate Finance,USDT-USD
STG,Mexc,STG_USDT,84129.48408,141951.2826,0.503347766,C,2,2,Stargate Finance,USDT-USD
STORJ,Okx,STORJ-USDT,107087.3563,3141734.853,0.5481481935,C,4,2,Storj,USDT-USD
STORJ,Mexc,STORJ_USDT,379448.5526,135570.0261,0.542814224,C,4,2,Storj,USDT-USD
STORJ,Binance,STORJUSDT,231654.1428,10131073.03,0.5507150911,C,4,2,Storj,USDT-USD
STORJ,CoinbasePro,STORJ-USD,51027.83869,779419.6502,0.5473696668,C,4,2,Storj,
STRAX,Binance,STRAXUSDT,52905.44524,8603073.461,0.859584148,C,1,2,STRAX Token,USDT-USD
SUPER,CoinbasePro,SUPER-USD,50756.77233,2582255.195,0.5798868417,C,2,2,SuperCoin,
SUPER,Binance,SUPERUSDT,118810.403,6113031.497,0.5750921405,C,2,2,SuperCoin,USDT-USD
SYN,Binance,SYNUSDT,47988.72934,8355559.222,0.8286535512,C,1,2,Synapse,USDT-USD
T,Binance,TUSDT,67613.62552,15650726.81,0.0266303701,C,1,2,Threshold Network Token,USDT-USD
THETA,Okx,THETA-USDT,45307.20349,1748100.687,0.9536451092,C,3,2,Theta Token,USDT-USD
THETA,Kucoin,THETA-USDT,50799.11682,953331.377,0.9531037657,C,3,2,Theta Token,USDT-USD
THETA,Binance,THETAUSDT,124500.3519,6901396.198,0.9509138016,C,3,2,Theta Token,USDT-USD
TRB,Binance,TRBUSDT,390984.8389,100946113.2,103.9610988,C,3,2,Tellor Tributes,USDT-USD
TRB,CoinbasePro,TRB-USD,88075.97643,17801109.2,104.1184355,C,3,2,Tellor Tributes,
TRB,Okx,TRB-USDT,186073.443,21824721.52,104.3779998,C,3,2,Tellor Tributes,USDT-USD
TUSD,Mexc,TUSD_USDT,3321290.381,438627.3706,0.9834745064,C,2,2,TrueUSD,USDT-USD
TUSD,Binance,TUSDUSDT,8528624.338,127150976.8,0.983448235,C,2,2,TrueUSD,USDT-USD
TWT,Mexc,TWT_USDT,53326.82705,174132.0743,1.098094178,C,2,2,Trust Wallet Token,USDT-USD
TWT,Binance,TWTUSDT,82499.98134,4322265.177,1.095769461,C,2,2,Trust Wallet Token,USDT-USD
UMA,Binance,UMAUSDT,59739.75936,40479668.6,4.951798234,C,1,2,UMA,USDT-USD
UNFI,Binance,UNFIUSDT,131780.4267,7051952.799,5.639134191,C,2,2,Unifi Protocol DAO,USDT-USD
UNFI,Mexc,UNFI_USDT,130778.7414,110299.8533,5.64795796,C,2,2,Unifi Protocol DAO,USDT-USD
USTC,Binance,USTCUSDT,104193.9018,15652520.83,0.02414702556,C,3,2,TerraClassicUSD,USDT-USD
USTC,Okx,USTC-USDT,79755.13934,3789072.942,0.02416523268,C,3,2,TerraClassicUSD,USDT-USD
USTC,Mexc,USTC_USDT,160428.8833,291642.1385,0.02413599889,C,3,2,TerraClassicUSD,USDT-USD
VANRY,Binance,VANRYUSDT,52749.63014,6196670.624,0.05698171548,C,1,2,VANAR,USDT-USD
VENUS,Binance,VENUSUSDT,142572.1277,4451222.365,11.45017461,C,1,2,VENUS,USDT-USD
VET,Kucoin,VET-USDT,47075.4841,1459523.548,0.02683736035,C,4,2,VeChain Thor Blockchain,USDT-USD
VET,Binance,VETUSDT,156275.2048,10448229.43,0.02681801761,C,4,2,VeChain Thor Blockchain,USDT-USD
VET,CoinbasePro,VET-USD,76873.43971,1778291.301,0.02682562648,C,4,2,VeChain Thor Blockchain,
VET,Mexc,VET_USDT,206314.8694,264812.6117,0.02680541699,C,4,2,VeChain Thor Blockchain,USDT-USD
WBTC,Binance,WBTCUSDT,112200.2527,1683109.194,39963.72177,C,1,2,Wrapped Bitcoin,USDT-USD
WING,Binance,WINGUSDT,62333.07274,6305353.437,8.576492466,C,2,2,Wing Finance,USDT-USD
WING,Mexc,WING_USDT,145609.7828,144300.5718,8.312628247,C,2,2,Wing Finance,USDT-USD
WOO,Kucoin,WOO-USDT,56843.55491,2278027.521,0.3371057009,C,4,2,Wootrade Network,USDT-USD
WOO,Binance,WOOUSDT,151442.7656,10671160.74,0.3366437512,C,4,2,Wootrade Network,USDT-USD
WOO,Okx,WOO-USDT,69348.19917,2025176.877,0.3367207662,C,4,2,Wootrade Network,USDT-USD
WOO,Mexc,WOO_USDT,199456.2006,304849.2574,0.3360550686,C,4,2,Wootrade Network,USDT-USD
XAI,Binance,XAIUSDT,364809.2616,121646517.1,0.7172651447,C,3,2,Xai,USDT-USD
XAI,Kucoin,XAI-USDT,80369.25096,6679818.276,0.7140484103,C,3,2,Xai,USDT-USD
XAI,Mexc,XAI_USDT,62519.5629,2089596.926,0.7163100149,C,3,2,Xai,USDT-USD
XMR,Mexc,XMR_USDT,637929.6215,5399712.779,155.4816876,C,4,2,Monero,USDT-USD
XMR,Kucoin,XMR-USDT,75861.34173,8391529.693,155.526225,C,4,2,Monero,USDT-USD
XMR,Kraken,XMRUSD,152433.9495,1066363.955,155.8084502,C,4,2,Monero,
XMR,Binance,XMRUSDT,325239.0746,14167130.57,155.4210491,C,4,2,Monero,USDT-USD
XTZ,Binance,XTZUSDT,74018.47298,6036351.412,0.9344370358,C,2,2,Tezos,USDT-USD
XTZ,Kraken,XTZUSD,115428.0625,918276.8649,0.9324110152,C,2,2,Tezos,
YFI,Binance,YFIUSDT,106489.0261,4283188.193,7008.442394,C,2,2,yearn.finance,USDT-USD
YFI,CoinbasePro,YFI-USD,69803.71322,2485716.132,7006.499518,C,2,2,yearn.finance,
YGG,Binance,YGGUSDT,255512.6937,15978592.67,0.4253489864,C,3,2,Yield Guild Games,USDT-USD
YGG,Okx,YGG-USDT,112564.4286,8795935.186,0.4242942872,C,3,2,Yield Guild Games,USDT-USD
YGG,Mexc,YGG_USDT,291214.2319,384654.8937,0.4279915233,C,3,2,Yield Guild Games,USDT-USD
ZEC,Mexc,ZEC_USDT,508650.6599,287365.0153,21.96116327,C,2,2,Zcash,USDT-USD
ZEC,Binance,ZECUSDT,107748.7569,6231023.464,22.06774527,C,2,2,Zcash,USDT-USD
ZEN,Binance,ZENUSDT,121239.4862,5983871.133,7.622205603,C,1,2,Horizen,USDT-USD
ZIL,Binance,ZILUSDT,78122.06511,5951041.305,0.01981457877,C,3,2,Zilliqa,USDT-USD
ZIL,Mexc,ZIL_USDT,164288.1689,136450.7828,0.01983149916,C,3,2,Zilliqa,USDT-USD
ZIL,Kucoin,ZIL-USDT,51622.45768,620061.2048,0.0198240821,C,3,2,Zilliqa,USDT-U
1 base_asset exchange pair min_2_depth avg_30d_vol reference_price risk_assessment num_oracles liquidity_tier asset_name adjust_by_market
2 AAVE Mexc AAVE_USDT 403707.603 299498.6587 88.46188619 A 7 2 AAVE USDT-USD
3 AAVE Huobi aaveusdt 49562.27661 34092101.66 88.52768881 A 7 2 AAVE USDT-USD
4 AAVE Kraken AAVEUSD 84969.1289 732237.4435 88.21901516 A 7 2 AAVE
5 AAVE Okx AAVE-USDT 120824.3981 5483819.403 88.48717486 A 7 2 AAVE USDT-USD
6 AAVE Kucoin AAVE-USDT 60134.45372 1454001.73 88.41847956 A 7 2 AAVE USDT-USD
7 AAVE Binance AAVEUSDT 336646.7802 17941167.87 88.40806057 A 7 2 AAVE USDT-USD
8 AAVE CoinbasePro AAVE-USD 162207.2275 7955414.095 88.41304215 A 7 2 AAVE
9 ADA Okx ADA-USDT 303911.146 12693505.79 0.4718322348 A 9 1 Cardano USDT-USD
10 ADA CoinbasePro ADA-USD 611511.2428 18323224.07 0.4703816721 A 9 1 Cardano
11 ADA Huobi adausdt 149750.1588 18688486.68 0.470293013 A 9 1 Cardano USDT-USD
12 ADA Kucoin ADA-USDT 204346.5493 11339662.31 0.470650622 A 9 1 Cardano USDT-USD
13 ADA Bitstamp ADA/USD 111141.4265 495063.9401 0.4732612949 A 9 1 Cardano
14 ADA Mexc ADA_USDT 1480561.883 34705754.08 0.4706681442 A 9 1 Cardano USDT-USD
15 ADA Bybit ADAUSDT 261755.7266 15267158.53 0.4715127504 A 9 1 Cardano USDT-USD
16 ADA Kraken ADAUSD 631495.1952 4783679.81 0.4728831552 A 9 1 Cardano
17 ADA Binance ADAUSDT 1014519.017 74913609.68 0.4709109462 A 9 1 Cardano USDT-USD
18 AGIX Okx AGIX-USDT 144402.4677 1230616.692 0.2534299858 A 6 2 SingularityNET USDT-USD
19 AGIX Bybit AGIXUSDT 72731.67454 2177116.497 0.2534800192 A 6 2 SingularityNET USDT-USD
20 AGIX Kucoin AGIX-USDT 86823.62761 4637581.791 0.2531545743 A 6 2 SingularityNET USDT-USD
21 AGIX Mexc AGIX_USDT 114261.8075 179945.4082 0.2532243225 A 6 2 SingularityNET USDT-USD
22 AGIX Binance AGIXUSDT 181499.5614 6601700.149 0.2535772917 A 6 2 SingularityNET USDT-USD
23 AGIX Gate AGIX_USDT 50000 100000 0 A 6 2 SingularityNET USDT-USD
24 ALGO Kucoin ALGO-USDT 125172.0507 2774508.432 0.1612760665 A 6 2 Algorand USDT-USD
25 ALGO Mexc ALGO_USDT 471722.5569 391031.4403 0.1615972948 A 6 2 Algorand USDT-USD
26 ALGO Okx ALGO-USDT 84724.99655 3001155.055 0.1614784231 A 6 2 Algorand USDT-USD
27 ALGO CoinbasePro ALGO-USD 137293.3037 3626194.058 0.1612613776 A 6 2 Algorand
28 ALGO Kraken ALGOUSD 94239.46899 856438.0736 0.1611316036 A 6 2 Algorand
29 ALGO Binance ALGOUSDT 240363.9844 10216526.81 0.1613137606 A 6 2 Algorand USDT-USD
30 APE Mexc APE_USDT 845830.979 329116.5427 1.31149687 A 7 2 ApeCoin USDT-USD
31 APE Kucoin APE-USDT 74830.83223 1527594.928 1.306893397 A 7 2 ApeCoin USDT-USD
32 APE CoinbasePro APE-USD 79825.96928 1765569.337 1.310147807 A 7 2 ApeCoin
33 APE Okx APE-USDT 127038.7774 4931009.134 1.310171735 A 7 2 ApeCoin USDT-USD
34 APE Binance APEUSDT 295540.0092 16809984.56 1.309457667 A 7 2 ApeCoin USDT-USD
35 APE Kraken APEUSD 47261.34196 350969.3303 1.302436726 A 7 2 ApeCoin
36 APE Gate APE_USDT 50000 100000 0 A 7 2 ApeCoin USDT-USD
37 APT Binance APTUSDT 970622.772 42662112 8.365109058 A 8 2 Aptos USDT-USD
38 APT Kraken APTUSD 95252.8507 687239.9038 8.373953519 A 8 2 Aptos
39 APT Bybit APTUSDT 421662.7604 13658424.61 8.360517459 A 8 2 Aptos USDT-USD
40 APT Kucoin APT-USDT 59781.95498 3012611.094 8.371347497 A 8 2 Aptos USDT-USD
41 APT Mexc APT_USDT 188448.7027 6995386.772 8.37360865 A 8 2 Aptos USDT-USD
42 APT CoinbasePro APT-USD 158248.5255 5176336.024 8.369192123 A 8 2 Aptos
43 APT Okx APT-USDT 596052.5515 20209030.67 8.37385096 A 8 2 Aptos USDT-USD
44 APT Gate APT_USDT 50000 100000 0 A 8 2 Aptos USDT-USD
45 ARB Kraken ARBUSD 100206.2199 4381943.143 1.705803002 A 8 1 Arbitrum
46 ARB Mexc ARB_USDT 563395.9496 70966050.57 1.700151185 A 8 1 Arbitrum USDT-USD
47 ARB CoinbasePro ARB-USD 323984.7248 25023919.67 1.706804349 A 8 1 Arbitrum
48 ARB Binance ARBUSDT 1448064.308 225490594 1.700534337 A 8 1 Arbitrum USDT-USD
49 ARB Bybit ARBUSDT 188544.697 49644508.17 1.697965318 A 8 1 Arbitrum USDT-USD
50 ARB Okx ARB-USDT 619050.2317 56911723.48 1.700105696 A 8 1 Arbitrum USDT-USD
51 ARB Kucoin ARB-USDT 244278.1403 15751598.26 1.705204466 A 8 1 Arbitrum USDT-USD
52 ARB Huobi arbusdt 111073.3497 24106121.68 1.696818375 A 8 1 Arbitrum USDT-USD
53 ATOM Kucoin ATOM-USDT 122511.6105 4164205.618 9.196821466 A 8 2 Cosmos USDT-USD
54 ATOM CoinbasePro ATOM-USD 205758.8309 4244575.601 9.188194158 A 8 2 Cosmos
55 ATOM Binance ATOMUSDT 500205.8745 32707609.21 9.19886839 A 8 2 Cosmos USDT-USD
56 ATOM Kraken ATOMUSD 228688.3729 1024035.956 9.218557996 A 8 2 Cosmos
57 ATOM Okx ATOM-USDT 147209.9881 6727992.679 9.196235185 A 8 2 Cosmos USDT-USD
58 ATOM Mexc ATOM_USDT 396797.5433 1008586.239 9.21317801 A 8 2 Cosmos USDT-USD
59 ATOM Bybit ATOMUSDT 100035.0706 5523700.635 9.191262868 A 8 2 Cosmos USDT-USD
60 ATOM Gate ATOM_USDT 50000 100000 0 A 8 2 Cosmos USDT-USD
61 AVAX Okx AVAX-USDT 459223.0249 27191336.53 30.3671387 A 9 1 Avalanche USDT-USD
62 AVAX Mexc AVAX_USDT 2630410.171 40197237.8 30.31335915 A 9 1 Avalanche USDT-USD
63 AVAX CoinbasePro AVAX-USD 710189.1641 41234008.85 30.43579342 A 9 1 Avalanche
64 AVAX Kraken AVAXUSD 455749.7351 5083869.862 30.36461631 A 9 1 Avalanche
65 AVAX Huobi avaxusdt 83674.34414 20197355.5 30.38713582 A 9 1 Avalanche USDT-USD
66 AVAX Bitstamp AVAX/USD 78931.59345 492591.779 30.51926775 A 9 1 Avalanche
67 AVAX Binance AVAXUSDT 1424442.662 110228072.3 30.31927119 A 9 1 Avalanche USDT-USD
68 AVAX Bybit AVAXUSDT 266594.6447 19032772.46 30.37667694 A 9 1 Avalanche USDT-USD
69 AVAX Kucoin AVAX-USDT 256007.3589 13423273.72 30.36129437 A 9 1 Avalanche USDT-USD
70 BCH Kraken BCHUSD 203340.9953 1163173.528 236.4383838 A 9 1 Bitcoin Cash
71 BCH Bitstamp BCH/USD 133890.8622 1113055.48 236.3834073 A 9 1 Bitcoin Cash
72 BCH Kucoin BCH-USDT 153403.2244 1766025.88 236.2130317 A 9 1 Bitcoin Cash USDT-USD
73 BCH Mexc BCH_USDT 1688109.018 340077.5421 236.974317 A 9 1 Bitcoin Cash USDT-USD
74 BCH Binance BCHUSDT 672821.7917 32395763.97 236.0220829 A 9 1 Bitcoin Cash USDT-USD
75 BCH Bybit BCHUSDT 156013.3525 7323063.446 236.304741 A 9 1 Bitcoin Cash USDT-USD
76 BCH Huobi bchusdt 65221.14333 14976246.74 236.1401006 A 9 1 Bitcoin Cash USDT-USD
77 BCH Okx BCH-USDT 351452.4549 15579827.1 236.1496084 A 9 1 Bitcoin Cash USDT-USD
78 BCH CoinbasePro BCH-USD 448678.0454 10694749.58 236.3332929 A 9 1 Bitcoin Cash
79 BLUR Kraken BLURUSD 99075.46212 1216513.285 0.6025188372 A 7 2 Blur
80 BLUR Bybit BLURUSDT 68313.916 6461469.994 0.60531087 A 7 2 Blur USDT-USD
81 BLUR Binance BLURUSDT 523824.0691 49785352.29 0.6085401119 A 7 2 Blur USDT-USD
82 BLUR Kucoin BLUR-USDT 114279.3879 3580944.358 0.6060076016 A 7 2 Blur USDT-USD
83 BLUR Okx BLUR-USDT 242440.7708 21042871.79 0.6072397492 A 7 2 Blur USDT-USD
84 BLUR CoinbasePro BLUR-USD 156092.3813 8736803.112 0.6038877368 A 7 2 Blur
85 BLUR Mexc BLUR_USDT 845700.0176 614271.1779 0.6015683969 A 7 2 Blur USDT-USD
86 BNB Okx BNB-USDT 171035.3871 10049830.17 291.7391615 A 6 2 Binance Coin USDT-USD
87 BNB Kucoin BNB-USDT 172933.5367 7563235.244 291.8671543 A 6 2 Binance Coin USDT-USD
88 BNB Mexc BNB_USDT 2668302.204 2095942.424 291.3317029 A 6 2 Binance Coin USDT-USD
89 BNB Binance BNBUSDT 2315487.589 299938471.1 292.0261567 A 6 2 Binance Coin USDT-USD
90 BNB Bybit BNBUSDT 73840.12419 11584488.51 291.812684 A 6 2 Binance Coin USDT-USD
91 BNB Gate BNB_USDT 50000 100000 0 A 6 2 Binance Coin USDT-USD
92 BONK Bybit BONKUSDT 91223.30674 10108782.84 1.09E-05 A 6 2 Bonk Token USDT-USD
93 BONK Mexc BONK_USDT 880507.727 1996432.036 1.10E-05 A 6 2 Bonk Token USDT-USD
94 BONK Binance BONKUSDT 496236.8093 63520367.26 1.09E-05 A 6 2 Bonk Token USDT-USD
95 BONK Okx BONK-USDT 84194.41757 4939704.699 1.09E-05 A 6 2 Bonk Token USDT-USD
96 BONK CoinbasePro BONK-USD 291120.8766 24041618.38 1.10E-05 A 6 2 Bonk Token
97 BONK Kucoin BONK-USDT 104413.0879 5795566.827 1.09E-05 A 6 2 Bonk Token USDT-USD
98 BTC Kucoin BTC-USDT 1385049.373 192647255.8 39920.8141 A 9 1 Bitcoin USDT-USD
99 BTC Mexc BTC_USDT 6055794.786 468890338.6 39929.87241 A 9 1 Bitcoin USDT-USD
100 BTC Bybit BTCUSDT 1934000.115 501075059.1 39905.40634 A 9 1 Bitcoin USDT-USD
101 BTC Okx BTC-USDT 3216401.515 736570802.6 39910.57726 A 9 1 Bitcoin USDT-USD
102 BTC Bitstamp BTC/USD 4904357.079 103847807.2 39898.51266 A 9 1 Bitcoin
103 BTC Huobi btcusdt 1628523.051 85957777.78 39927.11023 A 9 1 Bitcoin USDT-USD
104 BTC CoinbasePro BTC-USD 11838510.17 799998360.6 39872.42919 A 9 1 Bitcoin
105 BTC Kraken BTCUSD 11254244.98 152725974.7 39905.34906 A 9 1 Bitcoin
106 BTC Binance BTCUSDT 13081922.22 1943592587 39912.24136 A 9 1 Bitcoin USDT-USD
107 CHZ Okx CHZ-USDT 76721.70261 9853334.361 0.1037356507 A 6 2 Chiliz USDT-USD
108 CHZ Mexc CHZ_USDT 230477.9128 285408.6504 0.1038430482 A 6 2 Chiliz USDT-USD
109 CHZ CoinbasePro CHZ-USD 51276.07653 1252645.033 0.1054762023 A 6 2 Chiliz
110 CHZ Kraken CHZUSD 48524.85664 395637.5252 0.1050375877 A 6 2 Chiliz
111 CHZ Binance CHZUSDT 249888.0127 28501304.85 0.1046721926 A 6 2 Chiliz USDT-USD
112 CHZ Gate CHZ_USDT 50000 100000 0 A 6 2 Chiliz USDT-USD
113 CRV Kraken CRVUSD 60416.85503 292275.2165 0.4482389055 A 6 2 Curve DAO Token
114 CRV Kucoin CRV-USDT 50096.30378 680353.338 0.4434254994 A 6 2 Curve DAO Token USDT-USD
115 CRV Binance CRVUSDT 265385.0097 9688519.274 0.443424373 A 6 2 Curve DAO Token USDT-USD
116 CRV CoinbasePro CRV-USD 96582.28361 871025.6346 0.4446821049 A 6 2 Curve DAO Token
117 CRV Mexc CRV_USDT 202941.3475 133320.8099 0.4438313683 A 6 2 Curve DAO Token USDT-USD
118 CRV Okx CRV-USDT 109901.21 6873330.009 0.4425725114 A 6 2 Curve DAO Token USDT-USD
119 DOGE CoinbasePro DOGE-USD 705184.7562 25424875.32 0.07793120656 A 9 1 Dogecoin
120 DOGE Okx DOGE-USDT 565834.5118 33076839.3 0.07788150395 A 9 1 Dogecoin USDT-USD
121 DOGE Mexc DOGE_USDT 1091538.578 22937578.29 0.0779243829 A 9 1 Dogecoin USDT-USD
122 DOGE Kraken DOGEUSD 547998.0729 4621710.265 0.07778464129 A 9 1 Dogecoin
123 DOGE Bybit DOGEUSDT 290256.381 15914185 0.07796760983 A 9 1 Dogecoin USDT-USD
124 DOGE Bitstamp DOGE/USD 46447.64873 189541.7938 0.07799339803 A 9 1 Dogecoin
125 DOGE Binance DOGEUSDT 1252926.134 84403824.56 0.07796643769 A 9 1 Dogecoin USDT-USD
126 DOGE Huobi dogeusdt 269955.645 21525311.57 0.07794967908 A 9 1 Dogecoin USDT-USD
127 DOGE Kucoin DOGE-USDT 365702.9014 7810505.65 0.07798714967 A 9 1 Dogecoin USDT-USD
128 DOT Kraken DOTUSD 368701.8747 4429592.47 6.452188898 A 8 1 Polkadot
129 DOT Okx DOT-USDT 222355.039 10742911.87 6.458175307 A 8 1 Polkadot USDT-USD
130 DOT Huobi dotusdt 45783.29935 10974447.87 6.450317276 A 8 1 Polkadot USDT-USD
131 DOT Mexc DOT_USDT 1098245.94 1339831.03 6.446585762 A 8 1 Polkadot USDT-USD
132 DOT Bybit DOTUSDT 166496.7868 9913978.391 6.454271244 A 8 1 Polkadot USDT-USD
133 DOT CoinbasePro DOT-USD 168119.2694 9778920.932 6.452749635 A 8 1 Polkadot
134 DOT Kucoin DOT-USDT 124303.7984 5544103.268 6.453780538 A 8 1 Polkadot USDT-USD
135 DOT Binance DOTUSDT 593806.1697 48873686.06 6.451243808 A 8 1 Polkadot USDT-USD
136 ENS Mexc ENS_USDT 367658.849 670539.5241 17.98863652 A 6 2 Ethereum Name Service (ENS) USDT-USD
137 ENS Kucoin ENS-USDT 54724.81451 3676707.428 17.75880758 A 6 2 Ethereum Name Service (ENS) USDT-USD
138 ENS Binance ENSUSDT 291418.3232 62479176.65 17.81688813 A 6 2 Ethereum Name Service (ENS) USDT-USD
139 ENS CoinbasePro ENS-USD 91775.13594 7641723.902 17.79343763 A 6 2 Ethereum Name Service (ENS)
140 ENS Okx ENS-USDT 137796.003 17044833.9 17.78364476 A 6 2 Ethereum Name Service (ENS) USDT-USD
141 ENS Gate ENS_USDT 50000 100000 0 A 6 2 Ethereum Name Service (ENS) USDT-USD
142 EOS Binance EOSUSDT 372008.7468 8074383.692 0.6830128043 A 8 2 Eos USDT-USD
143 EOS Mexc EOS_USDT 1199704.281 272102.5368 0.6840073934 A 8 2 Eos USDT-USD
144 EOS Kucoin EOS-USDT 75854.21225 709014.6871 0.68384828 A 8 2 Eos USDT-USD
145 EOS CoinbasePro EOS-USD 77320.52881 1313993.017 0.6822937779 A 8 2 Eos
146 EOS Kraken EOSUSD 88673.50535 723904.186 0.6839062109 A 8 2 Eos
147 EOS Okx EOS-USDT 139325.4759 9112853.76 0.6825281331 A 8 2 Eos USDT-USD
148 EOS Bybit EOSUSDT 50578.19146 5841158.864 0.6822045569 A 8 2 Eos USDT-USD
149 EOS Gate EOS_USDT 50000 100000 0 A 8 2 Eos USDT-USD
150 ETC Kucoin ETC-USDT 113759.0808 3477554.997 22.85192736 A 8 1 Ethereum Classic USDT-USD
151 ETC Binance ETCUSDT 655668.4981 60729272.86 22.86694828 A 8 1 Ethereum Classic USDT-USD
152 ETC Bybit ETCUSDT 49561.58743 2838378.919 22.8367253 A 8 1 Ethereum Classic USDT-USD
153 ETC Kraken ETCUSD 155878.8877 734888.778 22.88123977 A 8 1 Ethereum Classic
154 ETC CoinbasePro ETC-USD 584427.6111 7597750.664 22.83725611 A 8 1 Ethereum Classic
155 ETC Huobi etcusdt 81646.91108 13533193.91 22.77483439 A 8 1 Ethereum Classic USDT-USD
156 ETC Okx ETC-USDT 338589.5466 23459446.52 22.81594291 A 8 1 Ethereum Classic USDT-USD
157 ETC Mexc ETC_USDT 1378585.921 911135.813 22.92403344 A 8 1 Ethereum Classic USDT-USD
158 ETH Bitstamp ETH/USD 1786424.201 19272496.97 2212.492226 A 9 1 Ethereum
159 ETH Okx ETH-USDT 2444418.764 388934350.5 2210.16441 A 9 1 Ethereum USDT-USD
160 ETH Huobi ethusdt 1695970.121 34272154.83 2212.288729 A 9 1 Ethereum USDT-USD
161 ETH Kucoin ETH-USDT 1037412.076 119386693.6 2211.480181 A 9 1 Ethereum USDT-USD
162 ETH Bybit ETHUSDT 1345249.473 304189767.2 2211.399676 A 9 1 Ethereum USDT-USD
163 ETH Kraken ETHUSD 5075383.05 56853252.58 2212.377288 A 9 1 Ethereum
164 ETH Mexc ETH_USDT 4484321.007 210359167.7 2214.032265 A 9 1 Ethereum USDT-USD
165 ETH CoinbasePro ETH-USD 7298871.343 296252747.3 2210.07616 A 9 1 Ethereum
166 ETH Binance ETHUSDT 10324165.63 1060630897 2211.179573 A 9 1 Ethereum USDT-USD
167 FET Mexc FET_USDT 494656.0995 559935.8786 0.5882081836 A 6 2 Fetch AI USDT-USD
168 FET Binance FETUSDT 465708.0914 22769357.29 0.5862566061 A 6 2 Fetch AI USDT-USD
169 FET Kucoin FET-USDT 96173.26242 4354855.944 0.5872583338 A 6 2 Fetch AI USDT-USD
170 FET Okx FET-USDT 80416.82548 1578553.143 0.587271404 A 6 2 Fetch AI USDT-USD
171 FET Kraken FETUSD 80688.82031 1386327.677 0.5848580771 A 6 2 Fetch AI
172 FET CoinbasePro FET-USD 241779.2529 9092328.77 0.5848723328 A 6 2 Fetch AI
173 FIL Kucoin FIL-USDT 136368.2949 7410428.74 4.93172295 A 8 1 Filecoin USDT-USD
174 FIL Kraken FILUSD 133991.2228 1832800.962 4.933693054 A 8 1 Filecoin
175 FIL CoinbasePro FIL-USD 258870.6985 11530932.48 4.934286612 A 8 1 Filecoin
176 FIL Bybit FILUSDT 86576.25386 7525363.033 4.91922609 A 8 1 Filecoin USDT-USD
177 FIL Mexc FIL_USDT 1094874.372 1819214.992 4.927851525 A 8 1 Filecoin USDT-USD
178 FIL Okx FIL-USDT 646778.4394 55504900 4.9289709 A 8 1 Filecoin USDT-USD
179 FIL Binance FILUSDT 844740.0409 75887089.73 4.930605871 A 8 1 Filecoin USDT-USD
180 FIL Huobi filusdt 68173.55527 16793194.38 4.936018668 A 8 1 Filecoin USDT-USD
181 FTM Bybit FTMUSDT 71346.61591 4128311.729 0.3352808917 A 6 2 Fantom USDT-USD
182 FTM Kraken FTMUSD 87646.51897 1176507.833 0.3346537706 A 6 2 Fantom
183 FTM Kucoin FTM-USDT 106225.8231 4400742.84 0.3358058793 A 6 2 Fantom USDT-USD
184 FTM Mexc FTM_USDT 632339.7399 1081199.831 0.3365010633 A 6 2 Fantom USDT-USD
185 FTM Binance FTMUSDT 424997.2126 25764943.66 0.3360637395 A 6 2 Fantom USDT-USD
186 FTM Okx FTM-USDT 98090.82999 4900885.095 0.3376845609 A 6 2 Fantom USDT-USD
187 GALA Okx GALA-USDT 189873.4137 6654005.649 0.02204820477 A 6 2 Gala USDT-USD
188 GALA Mexc GALA_USDT 674173.1073 662194.7213 0.02211283071 A 6 2 Gala USDT-USD
189 GALA Bybit GALAUSDT 81233.95423 2802651.478 0.02204724605 A 6 2 Gala USDT-USD
190 GALA Kraken GALAUSD 81853.15768 971887.7737 0.02213452999 A 6 2 Gala
191 GALA Binance GALAUSDT 415969.0247 23466983.63 0.02205812128 A 6 2 Gala USDT-USD
192 GALA Gate GALA_USDT 50000 100000 0 A 6 2 Gala USDT-USD
193 GRT CoinbasePro GRT-USD 212787.1065 5275612.932 0.1493811838 A 7 2 The Graph
194 GRT Okx GRT-USDT 65342.41311 2506599.164 0.1492456221 A 7 2 The Graph USDT-USD
195 GRT Mexc GRT_USDT 598125.0805 479952.4649 0.1491757716 A 7 2 The Graph USDT-USD
196 GRT Kraken GRTUSD 75871.99326 633740.4267 0.1498390276 A 7 2 The Graph
197 GRT Binance GRTUSDT 326438.7018 17403725.33 0.1491240716 A 7 2 The Graph USDT-USD
198 GRT Kucoin GRT-USDT 81544.85738 1753762.597 0.1493661616 A 7 2 The Graph USDT-USD
199 GRT Gate GRT_USDT 50000 100000 0 A 7 2 The Graph USDT-USD
200 HBAR Kucoin HBAR-USDT 114290.7661 2775278.488 0.07132025496 A 7 2 Hedera Hashgraph USDT-USD
201 HBAR Mexc HBAR_USDT 460300.1662 483877.2872 0.07108943658 A 7 2 Hedera Hashgraph USDT-USD
202 HBAR CoinbasePro HBAR-USD 214294.0589 7087561.93 0.07116005717 A 7 2 Hedera Hashgraph
203 HBAR Okx HBAR-USDT 112689.0708 4026461.082 0.07125365623 A 7 2 Hedera Hashgraph USDT-USD
204 HBAR Huobi hbarusdt 46422.78344 12502601.52 0.07144363395 A 7 2 Hedera Hashgraph USDT-USD
205 HBAR Binance HBARUSDT 342801.5964 14209768.84 0.07132722883 A 7 2 Hedera Hashgraph USDT-USD
206 HBAR Bybit HBARUSDT 45261.49627 1258321.041 0.07136344216 A 7 2 Hedera Hashgraph USDT-USD
207 ICP Binance ICPUSDT 501774.1138 77170682.6 11.52804787 A 7 2 Internet Computer USDT-USD
208 ICP Okx ICP-USDT 297422.7336 20593859.34 11.59386803 A 7 2 Internet Computer USDT-USD
209 ICP Mexc ICP_USDT 229038.0671 2659248.459 11.29959518 A 7 2 Internet Computer USDT-USD
210 ICP Bybit ICPUSDT 145658.1104 13815502.64 11.47155514 A 7 2 Internet Computer USDT-USD
211 ICP CoinbasePro ICP-USD 481694.0934 22919263.78 11.51929241 A 7 2 Internet Computer
212 ICP Kucoin ICP-USDT 243799.5596 21281791.71 11.4267898 A 7 2 Internet Computer USDT-USD
213 ICP Kraken ICPUSD 152510.8207 4230646.898 11.48180455 A 7 2 Internet Computer
214 INJ Binance INJUSDT 761854.6344 75471268.13 31.75641906 A 7 2 Injective Protocol USDT-USD
215 INJ Bybit INJUSDT 46259.03266 8671297.48 31.81868206 A 7 2 Injective Protocol USDT-USD
216 INJ Mexc INJ_USDT 195130.7785 2547540.558 31.75180875 A 7 2 Injective Protocol USDT-USD
217 INJ Kraken INJUSD 110554.9597 4615214.653 31.81822066 A 7 2 Injective Protocol
218 INJ CoinbasePro INJ-USD 263574.9589 21960083.14 31.75834432 A 7 2 Injective Protocol
219 INJ Kucoin INJ-USDT 112763.3848 13043315.83 31.73964964 A 7 2 Injective Protocol USDT-USD
220 INJ Okx INJ-USDT 156547.4276 6879780.129 31.838232 A 7 2 Injective Protocol USDT-USD
221 JTO CoinbasePro JTO-USD 209989.3821 10018464.73 1.887681028 A 6 2 Jito
222 JTO Binance JTOUSDT 350644.6827 47762160.17 1.883291251 A 6 2 Jito USDT-USD
223 JTO Bybit JTOUSDT 74864.14695 4967573.71 1.886557933 A 6 2 Jito USDT-USD
224 JTO Mexc JTO_USDT 138559.5351 998743.8255 1.88425904 A 6 2 Jito USDT-USD
225 JTO Okx JTO-USDT 96745.66258 8928569.193 1.884792183 A 6 2 Jito USDT-USD
226 JTO Kucoin JTO-USDT 87953.5565 3015273.183 1.890669659 A 6 2 Jito USDT-USD
227 KAVA CoinbasePro KAVA-USD 176534.8573 385485.2501 0.6919030037 A 6 2 Kava
228 KAVA Mexc KAVA_USDT 1176186.319 270495.2643 0.6895330959 A 6 2 Kava USDT-USD
229 KAVA Kucoin KAVA-USDT 89752.19321 596070.2703 0.6890117656 A 6 2 Kava USDT-USD
230 KAVA Binance KAVAUSDT 646090.2324 11218433.99 0.6895853325 A 6 2 Kava USDT-USD
231 KAVA Kraken KAVAUSD 85320.83296 641014.1765 0.6908946014 A 6 2 Kava
232 KAVA Gate KAVA_USDT 50000 100000 0 A 6 2 Kava USDT-USD
233 LDO Okx LDO-USDT 181894.181 10111578.42 2.88714217 A 8 2 Lido DAO USDT-USD
234 LDO Binance LDOUSDT 387738.82 41043700.87 2.883611792 A 8 2 Lido DAO USDT-USD
235 LDO CoinbasePro LDO-USD 220300.8676 11976409.69 2.884625596 A 8 2 Lido DAO
236 LDO Kraken LDOUSD 100447.1249 2150960.494 2.887488478 A 8 2 Lido DAO
237 LDO Mexc LDO_USDT 588930.053 638809.6967 2.882180527 A 8 2 Lido DAO USDT-USD
238 LDO Kucoin LDO-USDT 91009.30345 4468563.248 2.885880042 A 8 2 Lido DAO USDT-USD
239 LDO Bybit LDOUSDT 71154.49236 6463827.135 2.885385432 A 8 2 Lido DAO USDT-USD
240 LDO Gate LDO_USDT 50000 100000 0 A 8 2 Lido DAO USDT-USD
241 LINK Kraken LINKUSD 552242.3853 5755261.063 13.82357462 A 8 1 ChainLink
242 LINK CoinbasePro LINK-USD 680356.4439 32122820.26 13.80640803 A 8 1 ChainLink
243 LINK Mexc LINK_USDT 1218298.471 49003625.57 13.80057366 A 8 1 ChainLink USDT-USD
244 LINK Binance LINKUSDT 1057623.562 91375865.04 13.7948244 A 8 1 ChainLink USDT-USD
245 LINK Okx LINK-USDT 275176.1551 13565986.64 13.79776617 A 8 1 ChainLink USDT-USD
246 LINK Bitstamp LINK/USD 151182.7984 1359533.87 13.84044633 A 8 1 ChainLink
247 LINK Kucoin LINK-USDT 196203.2947 9579617.943 13.81059009 A 8 1 ChainLink USDT-USD
248 LINK Bybit LINKUSDT 180315.7755 14220162.33 13.85826731 A 8 1 ChainLink USDT-USD
249 LTC CoinbasePro LTC-USD 543451.3689 13785634.51 65.4631381 A 9 1 Litecoin
250 LTC Mexc LTC_USDT 1879096.824 17331806.29 65.43634611 A 9 1 Litecoin USDT-USD
251 LTC Okx LTC-USDT 507929.3471 26530065.91 65.41225491 A 9 1 Litecoin USDT-USD
252 LTC Kucoin LTC-USDT 290350.1634 6126387.388 65.4318351 A 9 1 Litecoin USDT-USD
253 LTC Bybit LTCUSDT 201299.6733 12383937.05 65.45086009 A 9 1 Litecoin USDT-USD
254 LTC Bitstamp LTC/USD 71302.43935 837193.57 65.38819428 A 9 1 Litecoin
255 LTC Huobi ltcusdt 150004.7632 4614143.66 65.4369822 A 9 1 Litecoin USDT-USD
256 LTC Kraken LTCUSD 485564.9077 2601077.121 65.43280684 A 9 1 Litecoin
257 LTC Binance LTCUSDT 975861.6282 46447198.76 65.43597402 A 9 1 Litecoin USDT-USD
258 MANA Binance MANAUSDT 161539.8083 8060438.22 0.4335988613 A 7 2 Decentraland USDT-USD
259 MANA Kucoin MANA-USDT 58087.72222 503402.4757 0.4338408816 A 7 2 Decentraland USDT-USD
260 MANA Kraken MANAUSD 84924.79935 272373.0049 0.432452467 A 7 2 Decentraland
261 MANA Mexc MANA_USDT 253761.7046 145519.6743 0.4345951497 A 7 2 Decentraland USDT-USD
262 MANA Okx MANA-USDT 68844.47795 1431443.961 0.4338122156 A 7 2 Decentraland USDT-USD
263 MANA CoinbasePro MANA-USD 69142.62162 865483.8728 0.4332575848 A 7 2 Decentraland
264 MANA Gate MANA_USDT 50000 100000 0 A 7 2 Decentraland USDT-USD
265 MASK Binance MASKUSDT 527334.4347 29606345.22 3.252034856 A 7 2 Mask Network USDT-USD
266 MASK Okx MASK-USDT 164626.3439 17425407.01 3.247435343 A 7 2 Mask Network USDT-USD
267 MASK Kucoin MASK-USDT 68471.50785 2787550.55 3.250394924 A 7 2 Mask Network USDT-USD
268 MASK Mexc MASK_USDT 551854.5319 340523.7233 3.255251096 A 7 2 Mask Network USDT-USD
269 MASK CoinbasePro MASK-USD 76371.2574 1172479.2 3.257449365 A 7 2 Mask Network
270 MASK Bybit MASKUSDT 55836.09372 3549089.841 3.251526238 A 7 2 Mask Network USDT-USD
271 MASK Gate MASK_USDT 50000 100000 0 A 7 2 Mask Network USDT-USD
272 MATIC Okx MATIC-USDT 286529.4599 19272111.96 0.7282054395 A 9 1 Matic Network USDT-USD
273 MATIC CoinbasePro MATIC-USD 392683.598 14444572.98 0.7281953324 A 9 1 Matic Network
274 MATIC Binance MATICUSDT 880166.8053 97986293.13 0.7281469424 A 9 1 Matic Network USDT-USD
275 MATIC Huobi maticusdt 109573.122 15234696.66 0.7286294763 A 9 1 Matic Network USDT-USD
276 MATIC Bybit MATICUSDT 253953.798 21099460.02 0.7281887236 A 9 1 Matic Network USDT-USD
277 MATIC Mexc MATIC_USDT 985242.4337 45954909.9 0.7282376458 A 9 1 Matic Network USDT-USD
278 MATIC Kraken MATICUSD 478478.4995 4510025.126 0.7294573007 A 9 1 Matic Network
279 MATIC Bitstamp MATIC/USD 77920.84684 344911.6889 0.733080163 A 9 1 Matic Network
280 MATIC Kucoin MATIC-USDT 356785.0871 8215026.183 0.7274795596 A 9 1 Matic Network USDT-USD
281 MKR CoinbasePro MKR-USD 189657.3728 7901151.839 2113.462825 A 6 2 Maker
282 MKR Mexc MKR_USDT 659686.2959 230714.6623 2119.293037 A 6 2 Maker USDT-USD
283 MKR Binance MKRUSDT 368523.4153 23448263.7 2114.219678 A 6 2 Maker USDT-USD
284 MKR Kraken MKRUSD 49658.74142 622993.922 2107.930364 A 6 2 Maker
285 MKR Okx MKR-USDT 81342.70903 3487712.056 2111.932327 A 6 2 Maker USDT-USD
286 MKR Kucoin MKR-USDT 45425.02507 675263.6294 2112.071675 A 6 2 Maker USDT-USD
287 NEAR Kucoin NEAR-USDT 124294.3172 5843254.667 2.674161205 A 8 1 Near USDT-USD
288 NEAR Bybit NEARUSDT 58206.62204 4630072.987 2.678918634 A 8 1 Near USDT-USD
289 NEAR CoinbasePro NEAR-USD 185291.8636 5187550.998 2.67843549 A 8 1 Near
290 NEAR Kraken NEARUSD 191549.9708 3360632.501 2.667463339 A 8 1 Near
291 NEAR Okx NEAR-USDT 311377.3773 15382244.05 2.672818299 A 8 1 Near USDT-USD
292 NEAR Binance NEARUSDT 578778.0911 61784058.07 2.676081404 A 8 1 Near USDT-USD
293 NEAR Mexc NEAR_USDT 871096.6953 1184958.966 2.678323491 A 8 1 Near USDT-USD
294 NEAR Huobi nearusdt 74787.28484 6999178.627 2.67181076 A 8 1 Near USDT-USD
295 OP Mexc OP_USDT 1987545.663 1684136.999 2.871032553 A 7 2 Optimism USDT-USD
296 OP Okx OP-USDT 456470.0968 40684606.93 2.865726402 A 7 2 Optimism USDT-USD
297 OP Bybit OPUSDT 121956.4932 12754054.86 2.863599682 A 7 2 Optimism USDT-USD
298 OP Binance OPUSDT 1189317.678 120606269.7 2.866861935 A 7 2 Optimism USDT-USD
299 OP Kucoin OP-USDT 151102.3965 7514893.178 2.86647468 A 7 2 Optimism USDT-USD
300 OP CoinbasePro OP-USD 351393.8984 22928210.76 2.864965623 A 7 2 Optimism
301 OP Gate OP_USDT 50000 100000 0 A 7 2 Optimism USDT-USD
302 ORDI Kucoin ORDI-USDT 110936.0169 7517594.63 51.5460857 A 6 2 Ordinals USDT-USD
303 ORDI Bybit ORDIUSDT 119439.2682 9142897.563 51.46062583 A 6 2 Ordinals USDT-USD
304 ORDI Binance ORDIUSDT 1816384.797 157536421.3 51.50890555 A 6 2 Ordinals USDT-USD
305 ORDI Okx ORDI-USDT 897255.021 111729885.1 51.56285708 A 6 2 Ordinals USDT-USD
306 ORDI Huobi ordiusdt 90017.00367 6939659.846 52.21823543 A 6 2 Ordinals USDT-USD
307 ORDI Gate ORDI_USDT 50000 100000 0 A 6 2 Ordinals USDT-USD
308 PEPE Binance PEPEUSDT 1854338.485 21983200.56 1.02E-06 A 6 2 Pepe USDT-USD
309 PEPE Kraken PEPEUSD 66383.09612 339921.3126 1.02E-06 A 6 2 Pepe
310 PEPE Bybit PEPEUSDT 70662.28564 5776041.599 1.02E-06 A 6 2 Pepe USDT-USD
311 PEPE Kucoin PEPE-USDT 117845.5631 6320839.499 1.02E-06 A 6 2 Pepe USDT-USD
312 PEPE Mexc PEPE_USDT 576088.0345 1051367.142 1.02E-06 A 6 2 Pepe USDT-USD
313 PEPE Okx PEPE-USDT 253199.6634 10378463.48 1.02E-06 A 6 2 Pepe USDT-USD
314 RNDR Kucoin RNDR-USDT 93245.66824 3389990.196 3.78277704 A 6 2 Render Token USDT-USD
315 RNDR Binance RNDRUSDT 456778.1853 34499985.8 3.781059636 A 6 2 Render Token USDT-USD
316 RNDR CoinbasePro RNDR-USD 180418.0343 11691967.24 3.767943401 A 6 2 Render Token
317 RNDR Kraken RNDRUSD 62255.2913 1176061.236 3.788017753 A 6 2 Render Token
318 RNDR Mexc RNDR_USDT 627963.3038 617023.2409 3.770998381 A 6 2 Render Token USDT-USD
319 RNDR Okx RNDR-USDT 122198.2874 5319549.855 3.772653723 A 6 2 Render Token USDT-USD
320 SAND Okx SAND-USDT 100469.8264 3508230.948 0.4373225476 A 7 2 SAND USDT-USD
321 SAND Kucoin SAND-USDT 64668.48254 997968.9032 0.4371193254 A 7 2 SAND USDT-USD
322 SAND Kraken SANDUSD 47650.66542 278973.929 0.4395664881 A 7 2 SAND
323 SAND CoinbasePro SAND-USD 54744.16281 731889.0885 0.437434037 A 7 2 SAND
324 SAND Binance SANDUSDT 263841.1812 14105685.55 0.4370122624 A 7 2 SAND USDT-USD
325 SAND Mexc SAND_USDT 380990.8836 209883.4311 0.437304002 A 7 2 SAND USDT-USD
326 SAND Gate SAND_USDT 50000 100000 0 A 7 2 SAND USDT-USD
327 SEI Binance SEIUSDT 960266.1108 147580247.1 0.613207501 A 7 2 Sei USDT-USD
328 SEI CoinbasePro SEI-USD 501975.7126 44992922.16 0.6149800585 A 7 2 Sei
329 SEI Huobi seiusdt 58169.10057 38375753.16 0.6146183588 A 7 2 Sei USDT-USD
330 SEI Bybit SEIUSDT 131815.1551 20617259.61 0.6146716564 A 7 2 Sei USDT-USD
331 SEI Kraken SEIUSD 60743.57825 6077393.643 0.6142689745 A 7 2 Sei
332 SEI Kucoin SEI-USDT 178642.4194 10251443.59 0.6122370319 A 7 2 Sei USDT-USD
333 SEI Mexc SEI_USDT 456994.8627 3721782.454 0.6209961106 A 7 2 Sei USDT-USD
334 SHIB Okx SHIB-USDT 186962.879 5752876.108 8.84E-06 A 8 1 Shiba Inu USDT-USD
335 SHIB Bybit SHIBUSDT 97654.78678 2621562.66 8.84E-06 A 8 1 Shiba Inu USDT-USD
336 SHIB Kucoin SHIB-USDT 214053.7893 4620710.046 8.84E-06 A 8 1 Shiba Inu USDT-USD
337 SHIB CoinbasePro SHIB-USD 472915.9234 9834603.706 8.84E-06 A 8 1 Shiba Inu
338 SHIB Binance SHIBUSDT 711743.4514 34409618.31 8.84E-06 A 8 1 Shiba Inu USDT-USD
339 SHIB Kraken SHIBUSD 104567.4626 420513.5586 8.84E-06 A 8 1 Shiba Inu
340 SHIB Mexc SHIB_USDT 1940827.945 796547.7524 8.84E-06 A 8 1 Shiba Inu USDT-USD
341 SHIB Huobi shibusdt 67117.45039 363334.4836 8.84E-06 A 8 1 Shiba Inu USDT-USD
342 SNX Mexc SNX_USDT 310714.3857 335052.6602 3.112944227 A 6 2 Synthetix Network Token USDT-USD
343 SNX Kraken SNXUSD 63489.12006 606793.6628 3.13979134 A 6 2 Synthetix Network Token
344 SNX Okx SNX-USDT 103282.8979 3298762.932 3.135011753 A 6 2 Synthetix Network Token USDT-USD
345 SNX Bybit SNXUSDT 60753.04211 1293350.734 3.125053636 A 6 2 Synthetix Network Token USDT-USD
346 SNX Binance SNXUSDT 287994.4111 12367152.42 3.133185754 A 6 2 Synthetix Network Token USDT-USD
347 SNX CoinbasePro SNX-USD 138260.8807 3807927.897 3.137731528 A 6 2 Synthetix Network Token
348 SOL Kucoin SOL-USDT 374442.0549 56433240.02 87.53739207 A 9 1 Solana USDT-USD
349 SOL CoinbasePro SOL-USD 2257090.149 145521917.4 87.38247282 A 9 1 Solana
350 SOL Okx SOL-USDT 1397468.011 135207705.4 87.4902174 A 9 1 Solana USDT-USD
351 SOL Mexc SOL_USDT 1779392.262 299329951.9 87.49495206 A 9 1 Solana USDT-USD
352 SOL Kraken SOLUSD 2251190.633 64593290.11 87.67728718 A 9 1 Solana
353 SOL Binance SOLUSDT 3741601.199 607947665.6 87.49377311 A 9 1 Solana USDT-USD
354 SOL Bitstamp SOL/USD 109890.2738 2646819.043 87.31111501 A 9 1 Solana
355 SOL Bybit SOLUSDT 831770.3877 120667847.4 87.36083166 A 9 1 Solana USDT-USD
356 SOL Huobi solusdt 275163.2969 41233952.41 87.4809317 A 9 1 Solana USDT-USD
357 STX Okx STX-USDT 180203.7241 13352549.39 1.463485107 A 7 2 Stacks USDT-USD
358 STX Kraken STXUSD 58949.55711 1353219.917 1.468122483 A 7 2 Stacks
359 STX CoinbasePro STX-USD 258400.6869 14123894.62 1.463175003 A 7 2 Stacks
360 STX Kucoin STX-USDT 152358.5064 5233980.249 1.465347379 A 7 2 Stacks USDT-USD
361 STX Binance STXUSDT 584610.0183 45329052.16 1.462632266 A 7 2 Stacks USDT-USD
362 STX Mexc STX_USDT 227354.8541 915054.5567 1.463303254 A 7 2 Stacks USDT-USD
363 STX Gate STX_USDT 50000 100000 0 A 7 2 Stacks USDT-USD
364 SUI Kucoin SUI-USDT 157119.1 12511155.03 1.224163869 A 6 2 SuiNetwork USDT-USD
365 SUI Mexc SUI_USDT 233548.7548 2056662.292 1.222993101 A 6 2 SuiNetwork USDT-USD
366 SUI Binance SUIUSDT 1262079.981 111516956.8 1.223930951 A 6 2 SuiNetwork USDT-USD
367 SUI CoinbasePro SUI-USD 164063.7043 14862283.81 1.225266393 A 6 2 SuiNetwork
368 SUI Bybit SUIUSDT 212067.1354 19630489.94 1.225408738 A 6 2 SuiNetwork USDT-USD
369 SUI Okx SUI-USDT 613217.7334 54191478.11 1.223865903 A 6 2 SuiNetwork USDT-USD
370 SUSHI Mexc SUSHI_USDT 698897.3305 162827.6862 1.069891177 A 6 2 Sushi USDT-USD
371 SUSHI Binance SUSHIUSDT 314905.5164 8301205.3 1.070356721 A 6 2 Sushi USDT-USD
372 SUSHI Okx SUSHI-USDT 140667.711 3610840.809 1.067487683 A 6 2 Sushi USDT-USD
373 SUSHI Kraken SUSHIUSD 60333.51362 206177.6733 1.075978241 A 6 2 Sushi
374 SUSHI CoinbasePro SUSHI-USD 84615.09476 3085188.166 1.072066002 A 6 2 Sushi
375 SUSHI Gate SUSHI_USDT 50000 100000 0 A 6 2 Sushi USDT-USD
376 TIA Bybit TIAUSDT 187918.6442 14660427.8 15.52650347 A 7 2 Celestia USDT-USD
377 TIA Binance TIAUSDT 841382.0946 102103230.5 15.53648038 A 7 2 Celestia USDT-USD
378 TIA CoinbasePro TIA-USD 383069.4815 25165071.27 15.51546599 A 7 2 Celestia
379 TIA Kraken TIAUSD 111097.8042 6238500.3 15.50599396 A 7 2 Celestia
380 TIA Kucoin TIA-USDT 125355.6151 11079068.85 15.55654998 A 7 2 Celestia USDT-USD
381 TIA Mexc TIA_USDT 100237.1437 2406206.399 15.72168637 A 7 2 Celestia USDT-USD
382 TIA Okx TIA-USDT 552714.9757 23266716.08 15.50535992 A 7 2 Celestia USDT-USD
383 TRX Kraken TRXUSD 256930.9396 749814.9748 0.1113946358 A 8 2 TRON
384 TRX Binance TRXUSDT 613911.798 39811843.58 0.110779356 A 8 2 TRON USDT-USD
385 TRX Huobi trxusdt 213398.1056 8135870.339 0.1107429915 A 8 2 TRON USDT-USD
386 TRX Okx TRX-USDT 162323.4689 5484388.924 0.1107910725 A 8 2 TRON USDT-USD
387 TRX Bybit TRXUSDT 137021.0481 4074633.26 0.1107581644 A 8 2 TRON USDT-USD
388 TRX Kucoin TRX-USDT 129267.4773 2807145.376 0.1109288304 A 8 2 TRON USDT-USD
389 TRX Mexc TRX_USDT 676244.1047 18412701.3 0.1107773897 A 8 2 TRON USDT-USD
390 TRX Gate TRX_USDT 50000 100000 0 A 8 2 TRON USDT-USD
391 UNI Mexc UNI_USDT 764302.9979 247466.3051 5.761766722 A 7 2 Uniswap USDT-USD
392 UNI Binance UNIUSDT 399637.0021 17327263.14 5.766455246 A 7 2 Uniswap USDT-USD
393 UNI Bybit UNIUSDT 67657.94054 2493651.981 5.759751567 A 7 2 Uniswap USDT-USD
394 UNI Kucoin UNI-USDT 62238.34996 915687.2194 5.769731774 A 7 2 Uniswap USDT-USD
395 UNI Kraken UNIUSD 110184.576 575064.438 5.744322919 A 7 2 Uniswap
396 UNI Okx UNI-USDT 188134.5271 8636195.728 5.755593059 A 7 2 Uniswap USDT-USD
397 UNI CoinbasePro UNI-USD 136046.1025 4933014.237 5.766666815 A 7 2 Uniswap
398 WLD Okx WLD-USDT 251129.2683 9586681.603 2.292928825 A 6 2 Worldcoin WLD USDT-USD
399 WLD Mexc WLD_USDT 487737.0114 273829.0676 2.273495768 A 6 2 Worldcoin WLD USDT-USD
400 WLD Bybit WLDUSDT 56863.91933 3194845.195 2.293914994 A 6 2 Worldcoin WLD USDT-USD
401 WLD Binance WLDUSDT 309841.6575 26594366.07 2.291594044 A 6 2 Worldcoin WLD USDT-USD
402 WLD Kucoin WLD-USDT 82240.3581 1301628.522 2.294060237 A 6 2 Worldcoin WLD USDT-USD
403 WLD Gate WLD_USDT 50000 100000 0 A 6 2 Worldcoin WLD USDT-USD
404 XLM Kucoin XLM-USDT 85927.31243 1417810.596 0.1117112483 A 8 1 Stellar USDT-USD
405 XLM CoinbasePro XLM-USD 225276.1032 8883356.851 0.1117142784 A 8 1 Stellar
406 XLM Okx XLM-USDT 118111.3781 1765770.66 0.1116885221 A 8 1 Stellar USDT-USD
407 XLM Kraken XLMUSD 176811.499 408089.0655 0.1115158801 A 8 1 Stellar
408 XLM Bitstamp XLM/USD 72720.87116 733454.4667 0.1113217575 A 8 1 Stellar
409 XLM Mexc XLM_USDT 1132933.24 618310.8309 0.1117266616 A 8 1 Stellar USDT-USD
410 XLM Bybit XLMUSDT 88709.74889 3151890.822 0.111753146 A 8 1 Stellar USDT-USD
411 XLM Binance XLMUSDT 345297.9107 8403369.953 0.1117183159 A 8 1 Stellar USDT-USD
412 XRP Kraken XRPUSD 814559.1334 6616229.004 0.5113032699 A 9 1 Ripple
413 XRP Binance XRPUSDT 1884848.243 189067323.1 0.5112663149 A 9 1 Ripple USDT-USD
414 XRP Okx XRP-USDT 563822.8277 34832795.43 0.5114652914 A 9 1 Ripple USDT-USD
415 XRP CoinbasePro XRP-USD 730290.9717 38862484.52 0.5115428632 A 9 1 Ripple
416 XRP Huobi xrpusdt 130799.1755 30764931.78 0.5116267728 A 9 1 Ripple USDT-USD
417 XRP Kucoin XRP-USDT 711262.8242 17611337.65 0.5113220721 A 9 1 Ripple USDT-USD
418 XRP Bybit XRPUSDT 574200.8828 60341501.96 0.511381899 A 9 1 Ripple USDT-USD
419 XRP Bitstamp XRP/USD 893779.877 8546572.012 0.5101769016 A 9 1 Ripple
420 XRP Mexc XRP_USDT 2253802.257 64063212.39 0.5113602624 A 9 1 Ripple USDT-USD
421 CFX Mexc CFX_USDT 741948.4908 377232.5696 0.1828636419 B 5 2 Conflux Token USDT-USD
422 CFX Kucoin CFX-USDT 55943.9793 3166120.044 0.1814791365 B 5 2 Conflux Token USDT-USD
423 CFX Binance CFXUSDT 425985.235 21370941.25 0.1814141679 B 5 2 Conflux Token USDT-USD
424 CFX Okx CFX-USDT 225570.4218 11740974.87 0.1814352472 B 5 2 Conflux Token USDT-USD
425 CFX Gate CFX_USDT 50000 100000 0 B 5 2 Conflux Token USDT-USD
426 COMP Kraken COMPUSD 53754.17258 243932.5958 53.11057205 B 5 2 Compound Coin
427 COMP Mexc COMP_USDT 230873.8911 180053.2444 52.64207051 B 5 2 Compound Coin USDT-USD
428 COMP Okx COMP-USDT 66721.14412 2254113.721 52.63991084 B 5 2 Compound Coin USDT-USD
429 COMP CoinbasePro COMP-USD 62085.28523 1437341.815 52.63084228 B 5 2 Compound Coin
430 COMP Binance COMPUSDT 121785.3724 8389374.272 52.68915121 B 5 2 Compound Coin USDT-USD
431 EGLD Kucoin EGLD-USDT 65252.11559 1177346.419 48.76618226 B 5 2 MultiversX USDT-USD
432 EGLD Binance EGLDUSDT 271211.9052 11875041.97 48.79330927 B 5 2 MultiversX USDT-USD
433 EGLD Mexc EGLD_USDT 376293.4565 276441.7792 48.74594483 B 5 2 MultiversX USDT-USD
434 EGLD CoinbasePro EGLD-USD 52835.82668 917429.1077 48.88945848 B 5 2 MultiversX
435 EGLD Gate EGLD_USDT 50000 100000 0 B 5 2 MultiversX USDT-USD
436 FLOW Kraken FLOWUSD 51916.27241 275346.5158 0.7242278161 B 5 2 Flow - Dapper Labs
437 FLOW Binance FLOWUSDT 293656.6338 9552308.898 0.7291395058 B 5 2 Flow - Dapper Labs USDT-USD
438 FLOW Mexc FLOW_USDT 483739.2177 113468.7798 0.7323395177 B 5 2 Flow - Dapper Labs USDT-USD
439 FLOW Okx FLOW-USDT 80766.53137 9510373.237 0.7285897993 B 5 2 Flow - Dapper Labs USDT-USD
440 FLOW Gate FLOW_USDT 50000 100000 0 B 5 2 Flow - Dapper Labs USDT-USD
441 GMT CoinbasePro GMT-USD 67428.76141 2248881.711 0.2560028014 B 5 2 STEPN
442 GMT Binance GMTUSDT 462665.2276 38705519.52 0.2555371175 B 5 2 STEPN USDT-USD
443 GMT Kucoin GMT-USDT 72869.96385 2005043.366 0.2557195795 B 5 2 STEPN USDT-USD
444 GMT Okx GMT-USDT 152103.8921 8914015.232 0.2554599347 B 5 2 STEPN USDT-USD
445 GMT Gate GMT_USDT 50000 100000 0 B 5 2 STEPN USDT-USD
446 MEME Bybit MEMEUSDT 74659.94612 1660599.611 0.02253908946 B 5 2 Memecoin Price USDT-USD
447 MEME Binance MEMEUSDT 489840.1554 31554049.74 0.02249870307 B 5 2 Memecoin Price USDT-USD
448 MEME Kucoin MEME-USDT 50201.45759 1498743.96 0.02243463802 B 5 2 Memecoin Price USDT-USD
449 MEME Mexc MEME_USDT 184005.5762 478785.4964 0.02260242467 B 5 2 Memecoin Price USDT-USD
450 MEME Gate MEME_USDT 50000 100000 0 B 5 2 Memecoin Price USDT-USD
451 MINA Mexc MINA_USDT 110130.5009 610463.4036 1.00715717 B 5 2 Mina USDT-USD
452 MINA CoinbasePro MINA-USD 59277.03658 6118487.412 1.008738919 B 5 2 Mina
453 MINA Kraken MINAUSD 104251.6176 1744827.397 1.002235423 B 5 2 Mina
454 MINA Binance MINAUSDT 163902.8209 27632789.9 1.009175349 B 5 2 Mina USDT-USD
455 MINA Okx MINA-USDT 58811.29263 5177907.38 1.013323303 B 5 2 Mina USDT-USD
456 PEOPLE Okx PEOPLE-USDT 318441.9026 37806408.11 0.02743487292 B 5 2 ConstitutionDAO USDT-USD
457 PEOPLE Kucoin PEOPLE-USDT 64922.56302 3574827.52 0.0273835447 B 5 2 ConstitutionDAO USDT-USD
458 PEOPLE Mexc PEOPLE_USDT 168543.6372 757272.2515 0.02744498423 B 5 2 ConstitutionDAO USDT-USD
459 PEOPLE Binance PEOPLEUSDT 192342.5961 85366302.35 0.02746617133 B 5 2 ConstitutionDAO USDT-USD
460 PEOPLE Gate PEOPLE_USDT 50000 100000 0 B 5 2 ConstitutionDAO USDT-USD
461 WAVES Okx WAVES-USDT 91892.84196 2741667.219 2.144997825 B 5 2 Waves USDT-USD
462 WAVES Binance WAVESUSDT 272620.4813 9543737.677 2.143624016 B 5 2 Waves USDT-USD
463 WAVES Mexc WAVES_USDT 558956.9951 168193.854 2.142261269 B 5 2 Waves USDT-USD
464 WAVES Kucoin WAVES-USDT 55367.18425 769644.5638 2.142747289 B 5 2 Waves USDT-USD
465 WAVES Kraken WAVESUSD 45555.16136 112134.6183 2.154872324 B 5 2 Waves
466 1INCH Binance 1INCHUSDT 223047.9107 10123584.48 0.3759697336 C 4 2 1INCH USDT-USD
467 1INCH CoinbasePro 1INCH-USD 63433.64579 1220856.095 0.3761909036 C 4 2 1INCH
468 1INCH Mexc 1INCH_USDT 220805.8565 397303.2595 0.3751712747 C 4 2 1INCH USDT-USD
469 1INCH Okx 1INCH-USDT 87382.44268 4403164.462 0.375964926 C 4 2 1INCH USDT-USD
470 ACE Binance ACEUSDT 219186.3365 36291711.39 9.125489437 C 2 2 Fusionist USDT-USD
471 ACE Okx ACE-USDT 120509.3158 8941538.795 9.092071496 C 2 2 Fusionist USDT-USD
472 ACH CoinbasePro ACH-USD 97110.58491 894158.4549 0.01675701504 C 3 2 Alchemy Pay
473 ACH Binance ACHUSDT 84700.65638 4414398.216 0.01675085779 C 3 2 Alchemy Pay USDT-USD
474 ACH Mexc ACH_USDT 192469.0915 100559.3076 0.01679041985 C 3 2 Alchemy Pay USDT-USD
475 AEUR Binance AEURUSDT 1270915.824 759036.3652 1.085248864 C 1 2 Anchored Coins AEUR USDT-USD
476 API3 Mexc API3_USDT 152284.022 205441.5 2.043375234 C 2 2 API3 USDT-USD
477 API3 Binance API3USDT 90101.84241 17128907.56 2.048019395 C 2 2 API3 USDT-USD
478 AR Okx AR-USDT 49845.96145 2809779.829 8.610082522 C 2 2 Arweave USDT-USD
479 AR Binance ARUSDT 118756.107 5634710.58 8.603353236 C 2 2 Arweave USDT-USD
480 ARKM Binance ARKMUSDT 101600.3693 9290971.501 0.5035873534 C 2 2 Arkham USDT-USD
481 ARKM Mexc ARKM_USDT 104313.7334 237646.8392 0.502258142 C 2 2 Arkham USDT-USD
482 ARPA Binance ARPAUSDT 141483.7342 6962539.152 0.05938416152 C 1 2 ArpaCoin USDT-USD
483 ASTR Mexc ASTR_USDT 337777.2363 556571.4433 0.1714246019 C 3 2 ASTR USDT-USD
484 ASTR Binance ASTRUSDT 272250.3728 29115614.2 0.1710438223 C 3 2 ASTR USDT-USD
485 ASTR Okx ASTR-USDT 61040.31153 7741218.973 0.1712013965 C 3 2 ASTR USDT-USD
486 AUCTION Mexc AUCTION_USDT 205068.2365 269845.2565 24.64750337 C 3 2 Auction USDT-USD
487 AUCTION Binance AUCTIONUSDT 141766.5502 24443787.65 24.52525957 C 3 2 Auction USDT-USD
488 AUCTION Okx AUCTION-USDT 64014.51076 7264691.478 24.43296353 C 3 2 Auction USDT-USD
489 AXS Mexc AXS_USDT 262075.6017 132406.1769 7.065952702 C 3 2 Axie Infinity USDT-USD
490 AXS Binance AXSUSDT 231000.3653 12333785.24 7.054601867 C 3 2 Axie Infinity USDT-USD
491 AXS CoinbasePro AXS-USD 46520.7417 953800.4786 7.063964044 C 3 2 Axie Infinity
492 BAKE Binance BAKEUSDT 182011.4866 35921179.76 0.3094882759 C 2 2 Bakery Token USDT-USD
493 BAKE Mexc BAKE_USDT 185326.3247 583699.372 0.3068157366 C 2 2 Bakery Token USDT-USD
494 BAND Binance BANDUSDT 55086.31129 6612180.017 1.592617506 C 1 2 Band Protocol USDT-USD
495 BEAM Binance BEAMUSDT 152991.9166 15969226.65 0.01691214062 C 1 2 BEAM (Merit Circle) USDT-USD
496 BLZ Binance BLZUSDT 108417.3522 5588057.361 0.2904520078 C 2 2 Bluzelle USDT-USD
497 BLZ CoinbasePro BLZ-USD 58365.73324 369664.6277 0.2910902264 C 2 2 Bluzelle
498 BOND Binance BONDUSDT 101881.7077 6611834.75 3.051545382 C 1 2 BarnBridge USDT-USD
499 BSW Binance BSWUSDT 46034.40658 4599238.929 0.08886586012 C 1 2 Biswap (BSW) USDT-USD
500 C98 Mexc C98_USDT 285083.0197 153443.734 0.2185707406 C 2 2 Coin98 USDT-USD
501 C98 Binance C98USDT 189878.1329 5558051.461 0.2185832922 C 2 2 Coin98 USDT-USD
502 CAKE Mexc CAKE_USDT 405312.078 551396.0436 2.447890968 C 2 2 PancakeSwap USDT-USD
503 CAKE Binance CAKEUSDT 195778.7099 23654981.25 2.454039405 C 2 2 PancakeSwap USDT-USD
504 CELO Mexc CELO_USDT 125444.7762 302663.9345 0.6476452305 C 3 2 Celo USDT-USD
505 CELO Okx CELO-USDT 74867.9216 2248910.392 0.6477003752 C 3 2 Celo USDT-USD
506 CELO Binance CELOUSDT 188957.1416 10478656.48 0.6474077901 C 3 2 Celo USDT-USD
507 CHR Binance CHRUSDT 98985.18915 8983410.231 0.2454323105 C 1 2 Chromia USDT-USD
508 CTSI Binance CTSIUSDT 61529.46969 13400594.76 0.211724629 C 1 2 Cartesi USDT-USD
509 CYBER Binance CYBERUSDT 157494.8313 21582311.99 6.891553463 C 2 2 CyberConnect USDT-USD
510 CYBER Mexc CYBER_USDT 245967.0815 775034.3955 6.894934361 C 2 2 CyberConnect USDT-USD
511 DATA Binance DATAUSDT 56436.38905 6577080.731 0.04655652469 C 1 2 Streamr DATAcoin USDT-USD
512 DEGO Binance DEGOUSDT 49442.4569 6918692.999 2.058938225 C 2 2 Dego Finance USDT-USD
513 DEGO Mexc DEGO_USDT 47063.22126 145028.8291 2.061702998 C 2 2 Dego Finance USDT-USD
514 DIA Binance DIAUSDT 46415.86926 5008591.814 0.398446883 C 1 2 DIAToken USDT-USD
515 DUSK Binance DUSKUSDT 89726.44858 5994345.592 0.24835762 C 1 2 Dusk Network USDT-USD
516 EUR Binance EURUSDT 914754.1506 25453392.79 1.086238407 C 3 2 Euro USDT-USD
517 EUR Bitstamp EUR/USD 161923.2853 2925912.624 1.085974486 C 3 2 Euro
518 EUR Kraken EURUSD 973749.5483 17562785.59 1.087181078 C 3 2 Euro
519 FDUSD Binance FDUSDUSDT 20819829.91 791868072.3 0.9982990251 C 1 2 First Digital USD USDT-USD
520 FRONT Binance FRONTUSDT 116592.5536 8033362.547 0.4244166096 C 1 2 Frontier USDT-USD
521 FTT Binance FTTUSDT 85361.25321 18918457.67 2.637355962 C 2 2 FTX Token USDT-USD
522 FTT Mexc FTT_USDT 61679.15314 885931.1891 2.625461927 C 2 2 FTX Token USDT-USD
523 FXS Binance FXSUSDT 76687.07914 7919284.862 9.870999715 C 1 2 Frax Share USDT-USD
524 GAL Binance GALUSDT 123198.1518 6183386.884 1.713442116 C 1 2 Project Galaxy USDT-USD
525 GAS Okx GAS-USDT 71550.26438 3589890.498 5.559745992 C 2 2 Gas USDT-USD
526 GAS Binance GASUSDT 143459.5949 16249734.4 5.551653689 C 2 2 Gas USDT-USD
527 GLMR Binance GLMRUSDT 66465.37977 5440648.9 0.351519818 C 2 2 Moonbeam Network Glimmer Token USDT-USD
528 GLMR Mexc GLMR_USDT 132937.7799 226967.7255 0.3519219251 C 2 2 Moonbeam Network Glimmer Token USDT-USD
529 GMX Binance GMXUSDT 86050.25266 8488792.893 41.68565019 C 1 2 GMX USDT-USD
530 GTC Binance GTCUSDT 63833.57202 5559771.674 1.109504239 C 1 2 Gitcoin USDT-USD
531 HFT Mexc HFT_USDT 92867.50229 155840.9593 0.3163831693 C 3 2 Hashflow USDT-USD
532 HFT CoinbasePro HFT-USD 67639.33185 1082720.501 0.3166013692 C 3 2 Hashflow
533 HFT Binance HFTUSDT 86389.41028 4335472.459 0.3155912724 C 3 2 Hashflow USDT-USD
534 HIFI Binance HIFIUSDT 65279.10529 4308106.952 0.5695358478 C 1 2 Hifi Finance USDT-USD
535 HIGH Binance HIGHUSDT 94832.54951 5568886.461 1.416275081 C 1 2 Highstreet USDT-USD
536 HOOK Binance HOOKUSDT 125566.4187 10904796.41 0.8514358619 C 1 2 Hooked Protocol USDT-USD
537 HOT Binance HOTUSDT 88284.00246 4898150.064 0.00182001891 C 1 2 Holo USDT-USD
538 ID Binance IDUSDT 105739.9887 10529785.09 0.2642775002 C 2 2 Space ID USDT-USD
539 ID Mexc ID_USDT 99019.7159 293195.7436 0.2653625693 C 2 2 Space ID USDT-USD
540 ILV Binance ILVUSDT 65967.97711 4756421.779 72.43485363 C 2 2 Illuvium USDT-USD
541 ILV Mexc ILV_USDT 101351.5141 124582.7065 72.49241072 C 2 2 Illuvium USDT-USD
542 IMX Binance IMXUSDT 159306.9212 9773348.424 1.833882485 C 4 2 Immutable X USDT-USD
543 IMX Mexc IMX_USDT 125843.6309 288710.9571 1.831721582 C 4 2 Immutable X USDT-USD
544 IMX CoinbasePro IMX-USD 63576.38536 3545209.657 1.832415885 C 4 2 Immutable X
545 IMX Okx IMX-USDT 63231.7586 4815890.341 1.835477545 C 4 2 Immutable X USDT-USD
546 IOTA Binance IOTAUSDT 156813.2627 9448427.026 0.2404979188 C 2 2 IOTA USDT-USD
547 IOTA Okx IOTA-USDT 81364.86526 1422701.965 0.240249504 C 2 2 IOTA USDT-USD
548 IOTX Mexc IOTX_USDT 63717.81113 114944.2482 0.04098756361 C 2 2 IoTeX USDT-USD
549 IOTX Binance IOTXUSDT 118425.8892 5645105.663 0.04116999109 C 2 2 IoTeX USDT-USD
550 JASMY CoinbasePro JASMY-USD 106938.7996 2456750.498 0.004883328831 C 4 2 Jasmy
551 JASMY Kucoin JASMY-USDT 46532.2408 878234.3701 0.004897641967 C 4 2 Jasmy USDT-USD
552 JASMY Binance JASMYUSDT 103914.894 4638424.246 0.004895538164 C 4 2 Jasmy USDT-USD
553 JASMY Mexc JASMY_USDT 118057.5456 426212.9186 0.004900948254 C 4 2 Jasmy USDT-USD
554 JOE Binance JOEUSDT 95891.84261 4986487.55 0.4210333582 C 2 2 TraderJoe USDT-USD
555 JOE Mexc JOE_USDT 106334.2549 155616.5895 0.4240505807 C 2 2 TraderJoe USDT-USD
556 KDA Binance KDAUSDT 52068.57953 6603653.169 0.9864134387 C 1 2 Kadena USDT-USD
557 KLAY Mexc KLAY_USDT 198792.0879 193094.4612 0.1935774129 C 2 2 Klaytn USDT-USD
558 KLAY Binance KLAYUSDT 102537.9319 8166690.792 0.1947100267 C 2 2 Klaytn USDT-USD
559 KP3R Binance KP3RUSDT 54560.4206 6827068.529 68.97052078 C 1 2 Keep3rV1 USDT-USD
560 KSM Okx KSM-USDT 49131.02426 2272156.7 35.8946584 C 4 2 Kusama USDT-USD
561 KSM Kraken KSMUSD 82906.03275 662412.7086 35.91468468 C 4 2 Kusama
562 KSM Mexc KSM_USDT 51623.03643 146361.7075 35.99359072 C 4 2 Kusama USDT-USD
563 KSM Binance KSMUSDT 104173.4084 6749163.486 35.92864815 C 4 2 Kusama USDT-USD
564 LEVER Binance LEVERUSDT 103584.2033 8631452.701 0.001297870719 C 2 2 leverfi USDT-USD
565 LEVER Mexc LEVER_USDT 269243.6154 100150.2478 0.001297685532 C 2 2 leverfi USDT-USD
566 LOOM Binance LOOMUSDT 72863.84961 6250861.053 0.08656430192 C 1 2 Loom Network USDT-USD
567 LPT Binance LPTUSDT 124147.244 4976570.721 6.65831672 C 1 2 Livepeer USDT-USD
568 LQTY Mexc LQTY_USDT 289158.432 110300.6315 1.195620223 C 2 2 Liquity USDT-USD
569 LQTY Binance LQTYUSDT 127715.2767 7023298.015 1.191924708 C 2 2 Liquity USDT-USD
570 LRC CoinbasePro LRC-USD 59174.11432 3383810.585 0.2285031455 C 3 2 Loopring
571 LRC Mexc LRC_USDT 45956.53557 124278.9266 0.2288337603 C 3 2 Loopring USDT-USD
572 LRC Binance LRCUSDT 146930.5688 6969566.753 0.2286497941 C 3 2 Loopring USDT-USD
573 LUNA Okx LUNA-USDT 140979.1409 2806262.42 9.33E-05 C 4 2 Terra Luna Classic USDT-USD
574 LUNA Mexc LUNA_USDT 285530.9676 548675.4766 9.33E-05 C 4 2 Terra Luna Classic USDT-USD
575 LUNA Binance LUNAUSDT 327295.5899 25245311.88 9.32E-05 C 4 2 Terra Luna Classic USDT-USD
576 LUNA Kucoin LUNA-USDT 162730.8732 2161850.295 9.34E-05 C 4 2 Terra Luna Classic USDT-USD
577 LUNA2 Okx LUNA2-USDT 116714.2838 5214721.607 0.5862913961 C 4 2 Terra Luna 2 USDT-USD
578 LUNA2 Binance LUNA2USDT 283182.821 12663702.95 0.5867542898 C 4 2 Terra Luna 2 USDT-USD
579 LUNA2 Kucoin LUNA2-USDT 83502.73597 2063709.03 0.586261171 C 4 2 Terra Luna 2 USDT-USD
580 LUNA2 Mexc LUNA2_USDT 108379.4362 339907.5678 0.5861178482 C 4 2 Terra Luna 2 USDT-USD
581 MAGIC Mexc MAGIC_USDT 264533.7207 290531.8239 0.9620408497 C 4 2 MAGIC USDT-USD
582 MAGIC Binance MAGICUSDT 220494.1405 15191286.46 0.9583392892 C 4 2 MAGIC USDT-USD
583 MAGIC Okx MAGIC-USDT 105405.7972 5401719.867 0.9595420314 C 4 2 MAGIC USDT-USD
584 MAGIC Gate MAGIC_USDT 50000 100000 0 C 4 2 MAGIC USDT-USD
585 MANTA Bybit MANTAUSDT 53885.15969 18009025.51 3.063765317 C 2 2 Manta USDT-USD
586 MANTA Binance MANTAUSDT 403816.6432 259161217.8 3.08167379 C 2 2 Manta USDT-USD
587 MAV Mexc MAV_USDT 185736.3436 457436.4408 0.5373792545 C 2 2 Maverick Protocol USDT-USD
588 MAV Binance MAVUSDT 99388.71969 22924519.05 0.536668425 C 2 2 Maverick Protocol USDT-USD
589 MOVR Binance MOVRUSDT 140137.8354 34228440.2 22.26851193 C 1 2 Moonriver USDT-USD
590 NEO Binance NEOUSDT 174759.4944 6735135.997 10.50592939 C 2 2 NEO USDT-USD
591 NEO Mexc NEO_USDT 285086.2477 101306.1126 10.51571434 C 2 2 NEO USDT-USD
592 NFP Binance NFPUSDT 136224.0611 40056163.12 0.4984980965 C 1 2 NFPrompt USDT-USD
593 NMR Mexc NMR_USDT 56441.59171 117950.3206 20.80947578 C 1 2 Numeraire USDT-USD
594 NTRN Binance NTRNUSDT 190762.7558 22412232.21 1.043698576 C 3 2 Neutron USDT-USD
595 NTRN Kucoin NTRN-USDT 61322.46516 4357183.961 1.0429518 C 3 2 Neutron USDT-USD
596 NTRN Mexc NTRN_USDT 85753.64033 420380.4134 1.049013149 C 3 2 Neutron USDT-USD
597 OGN Mexc OGN_USDT 133395.5319 153105.7316 0.1506897838 C 2 2 Origin Protocol USDT-USD
598 OGN Binance OGNUSDT 114751.9375 8567467.491 0.1509501147 C 2 2 Origin Protocol USDT-USD
599 ONE Mexc ONE_USDT 103633.3233 169389.5422 0.01381296016 C 1 2 Harmony USDT-USD
600 ONT Binance ONTUSDT 101745.7079 6573307.838 0.2378290263 C 2 2 Ontology USDT-USD
601 ONT Mexc ONT_USDT 134099.6108 119281.0604 0.2328763351 C 2 2 Ontology USDT-USD
602 OSMO CoinbasePro OSMO-USD 45573.4572 505627.9592 1.434332792 C 2 2 osmosis
603 OSMO Binance OSMOUSDT 184069.0761 6248594.99 1.436154852 C 2 2 osmosis USDT-USD
604 OXT Binance OXTUSDT 121674.5039 4092402.317 0.08759780776 C 1 2 Orchid USDT-USD
605 PENDLE Mexc PENDLE_USDT 94363.66432 302375.5024 2.414568281 C 2 2 Pendle USDT-USD
606 PENDLE Binance PENDLEUSDT 198805.1833 19093374.54 2.411570446 C 2 2 Pendle USDT-USD
607 PERP Mexc PERP_USDT 70959.09524 263694.8546 1.108616603 C 2 2 Perpetual Protocol USDT-USD
608 PERP Binance PERPUSDT 97699.23947 18395585.05 1.101367961 C 2 2 Perpetual Protocol USDT-USD
609 PHB Binance PHBUSDT 87353.37405 5541104.607 0.8191750331 C 1 2 Phoenix Global USDT-USD
610 POLYX Binance POLYXUSDT 77106.52126 4877840.89 0.1556027116 C 1 2 Polymex USDT-USD
611 POWR Binance POWRUSDT 101684.5648 32858394.18 0.3110983216 C 1 2 Power Ledger USDT-USD
612 PROS Binance PROSUSDT 47335.53338 6601983.056 0.4958016306 C 1 2 Prosper USDT-USD
613 PYR Mexc PYR_USDT 136917.2423 282019.549 5.525717506 C 2 2 Vulcan Forged USDT-USD
614 PYR Binance PYRUSDT 67837.28685 6095379.499 5.513382639 C 2 2 Vulcan Forged USDT-USD
615 QI Binance QIUSDT 65705.70399 4479686.822 0.01492820908 C 1 2 Benqi USDT-USD
616 QNT Binance QNTUSDT 150130.1919 4958738.066 105.1210689 C 3 2 Quant USDT-USD
617 QNT CoinbasePro QNT-USD 77932.07738 2702196.734 104.8651886 C 3 2 Quant
618 QNT Mexc QNT_USDT 319187.1936 283469.3662 105.6252627 C 3 2 Quant USDT-USD
619 RAD Binance RADUSDT 64303.27111 13728893.14 1.863131994 C 1 2 Radicle USDT-USD
620 RAY Binance RAYUSDT 49059.70839 10476697.73 1.086883488 C 1 2 Raydium USDT-USD
621 RDNT Okx RDNT-USDT 99487.73444 4908849.751 0.2781249382 C 2 2 Radiant Capital USDT-USD
622 RDNT Binance RDNTUSDT 202234.405 19676252.31 0.27834352 C 2 2 Radiant Capital USDT-USD
623 RIF Binance RIFUSDT 102720.0668 5575326.551 0.126668978 C 1 2 RIF Token USDT-USD
624 RLC CoinbasePro RLC-USD 45038.78592 956263.9594 2.193508506 C 2 2 iExec RLC
625 RLC Binance RLCUSDT 113296.5214 10458930.76 2.240062189 C 2 2 iExec RLC USDT-USD
626 ROSE CoinbasePro ROSE-USD 94865.22605 2007709.124 0.09853848605 C 4 2 Oasis Network
627 ROSE Kucoin ROSE-USDT 60914.79989 2255011.858 0.09829991324 C 4 2 Oasis Network USDT-USD
628 ROSE Binance ROSEUSDT 188268.4384 13037035.32 0.09827645727 C 4 2 Oasis Network USDT-USD
629 ROSE Mexc ROSE_USDT 87574.57166 553950.1122 0.09824638256 C 4 2 Oasis Network USDT-USD
630 RUNE Kucoin RUNE-USDT 150957.3196 4886709.369 4.034373849 C 3 2 Thorchain USDT-USD
631 RUNE Kraken RUNEUSD 64699.56261 918799.2368 4.070013999 C 3 2 Thorchain
632 RUNE Binance RUNEUSDT 380276.4214 62447654.52 4.036291948 C 3 2 Thorchain USDT-USD
633 SANTOS Binance SANTOSUSDT 48414.7599 10421735.09 4.748221741 C 1 2 Santos FC Fan Token USDT-USD
634 SATS Binance SATSUSDT 270661.8914 65862844.2 0.0003862181853 C 2 2 SATS (Ordinals) USDT-USD
635 SATS Okx SATS-USDT 186918.757 23374134.77 3.87E-07 C 2 2 SATS (Ordinals) USDT-USD
636 SC Binance SCUSDT 56737.90689 11988942.85 0.008758778298 C 2 2 Siacoin USDT-USD
637 SC Kraken SCUSD 72897.05559 939274.4661 0.009133476567 C 2 2 Siacoin
638 SKL CoinbasePro SKL-USD 89253.48802 7106650.138 0.07392654734 C 2 2 SKALE Network
639 SKL Binance SKLUSDT 245593.9026 14952643.43 0.07413113803 C 2 2 SKALE Network USDT-USD
640 SLEEPAI Binance SLEEPAIUSDT 226926.639 75074601.74 1.03330556 C 1 2 Sleepless AI USDT-USD
641 SLP Binance SLPUSDT 75829.29241 4740257.278 0.002835530307 C 1 2 Smooth Love Potion USDT-USD
642 SSV Binance SSVUSDT 323731.8901 22076581.02 28.20046712 C 3 2 SSV Token USDT-USD
643 SSV Okx SSV-USDT 138780.4853 10437857.38 28.20537722 C 3 2 SSV Token USDT-USD
644 SSV Mexc SSV_USDT 72456.44543 262132.0541 28.25282324 C 3 2 SSV Token USDT-USD
645 STG Binance STGUSDT 108865.1255 5746995.142 0.5045724388 C 2 2 Stargate Finance USDT-USD
646 STG Mexc STG_USDT 84129.48408 141951.2826 0.503347766 C 2 2 Stargate Finance USDT-USD
647 STORJ Okx STORJ-USDT 107087.3563 3141734.853 0.5481481935 C 4 2 Storj USDT-USD
648 STORJ Mexc STORJ_USDT 379448.5526 135570.0261 0.542814224 C 4 2 Storj USDT-USD
649 STORJ Binance STORJUSDT 231654.1428 10131073.03 0.5507150911 C 4 2 Storj USDT-USD
650 STORJ CoinbasePro STORJ-USD 51027.83869 779419.6502 0.5473696668 C 4 2 Storj
651 STRAX Binance STRAXUSDT 52905.44524 8603073.461 0.859584148 C 1 2 STRAX Token USDT-USD
652 SUPER CoinbasePro SUPER-USD 50756.77233 2582255.195 0.5798868417 C 2 2 SuperCoin
653 SUPER Binance SUPERUSDT 118810.403 6113031.497 0.5750921405 C 2 2 SuperCoin USDT-USD
654 SYN Binance SYNUSDT 47988.72934 8355559.222 0.8286535512 C 1 2 Synapse USDT-USD
655 T Binance TUSDT 67613.62552 15650726.81 0.0266303701 C 1 2 Threshold Network Token USDT-USD
656 THETA Okx THETA-USDT 45307.20349 1748100.687 0.9536451092 C 3 2 Theta Token USDT-USD
657 THETA Kucoin THETA-USDT 50799.11682 953331.377 0.9531037657 C 3 2 Theta Token USDT-USD
658 THETA Binance THETAUSDT 124500.3519 6901396.198 0.9509138016 C 3 2 Theta Token USDT-USD
659 TRB Binance TRBUSDT 390984.8389 100946113.2 103.9610988 C 3 2 Tellor Tributes USDT-USD
660 TRB CoinbasePro TRB-USD 88075.97643 17801109.2 104.1184355 C 3 2 Tellor Tributes
661 TRB Okx TRB-USDT 186073.443 21824721.52 104.3779998 C 3 2 Tellor Tributes USDT-USD
662 TUSD Mexc TUSD_USDT 3321290.381 438627.3706 0.9834745064 C 2 2 TrueUSD USDT-USD
663 TUSD Binance TUSDUSDT 8528624.338 127150976.8 0.983448235 C 2 2 TrueUSD USDT-USD
664 TWT Mexc TWT_USDT 53326.82705 174132.0743 1.098094178 C 2 2 Trust Wallet Token USDT-USD
665 TWT Binance TWTUSDT 82499.98134 4322265.177 1.095769461 C 2 2 Trust Wallet Token USDT-USD
666 UMA Binance UMAUSDT 59739.75936 40479668.6 4.951798234 C 1 2 UMA USDT-USD
667 UNFI Binance UNFIUSDT 131780.4267 7051952.799 5.639134191 C 2 2 Unifi Protocol DAO USDT-USD
668 UNFI Mexc UNFI_USDT 130778.7414 110299.8533 5.64795796 C 2 2 Unifi Protocol DAO USDT-USD
669 USTC Binance USTCUSDT 104193.9018 15652520.83 0.02414702556 C 3 2 TerraClassicUSD USDT-USD
670 USTC Okx USTC-USDT 79755.13934 3789072.942 0.02416523268 C 3 2 TerraClassicUSD USDT-USD
671 USTC Mexc USTC_USDT 160428.8833 291642.1385 0.02413599889 C 3 2 TerraClassicUSD USDT-USD
672 VANRY Binance VANRYUSDT 52749.63014 6196670.624 0.05698171548 C 1 2 VANAR USDT-USD
673 VENUS Binance VENUSUSDT 142572.1277 4451222.365 11.45017461 C 1 2 VENUS USDT-USD
674 VET Kucoin VET-USDT 47075.4841 1459523.548 0.02683736035 C 4 2 VeChain Thor Blockchain USDT-USD
675 VET Binance VETUSDT 156275.2048 10448229.43 0.02681801761 C 4 2 VeChain Thor Blockchain USDT-USD
676 VET CoinbasePro VET-USD 76873.43971 1778291.301 0.02682562648 C 4 2 VeChain Thor Blockchain
677 VET Mexc VET_USDT 206314.8694 264812.6117 0.02680541699 C 4 2 VeChain Thor Blockchain USDT-USD
678 WBTC Binance WBTCUSDT 112200.2527 1683109.194 39963.72177 C 1 2 Wrapped Bitcoin USDT-USD
679 WING Binance WINGUSDT 62333.07274 6305353.437 8.576492466 C 2 2 Wing Finance USDT-USD
680 WING Mexc WING_USDT 145609.7828 144300.5718 8.312628247 C 2 2 Wing Finance USDT-USD
681 WOO Kucoin WOO-USDT 56843.55491 2278027.521 0.3371057009 C 4 2 Wootrade Network USDT-USD
682 WOO Binance WOOUSDT 151442.7656 10671160.74 0.3366437512 C 4 2 Wootrade Network USDT-USD
683 WOO Okx WOO-USDT 69348.19917 2025176.877 0.3367207662 C 4 2 Wootrade Network USDT-USD
684 WOO Mexc WOO_USDT 199456.2006 304849.2574 0.3360550686 C 4 2 Wootrade Network USDT-USD
685 XAI Binance XAIUSDT 364809.2616 121646517.1 0.7172651447 C 3 2 Xai USDT-USD
686 XAI Kucoin XAI-USDT 80369.25096 6679818.276 0.7140484103 C 3 2 Xai USDT-USD
687 XAI Mexc XAI_USDT 62519.5629 2089596.926 0.7163100149 C 3 2 Xai USDT-USD
688 XMR Mexc XMR_USDT 637929.6215 5399712.779 155.4816876 C 4 2 Monero USDT-USD
689 XMR Kucoin XMR-USDT 75861.34173 8391529.693 155.526225 C 4 2 Monero USDT-USD
690 XMR Kraken XMRUSD 152433.9495 1066363.955 155.8084502 C 4 2 Monero
691 XMR Binance XMRUSDT 325239.0746 14167130.57 155.4210491 C 4 2 Monero USDT-USD
692 XTZ Binance XTZUSDT 74018.47298 6036351.412 0.9344370358 C 2 2 Tezos USDT-USD
693 XTZ Kraken XTZUSD 115428.0625 918276.8649 0.9324110152 C 2 2 Tezos
694 YFI Binance YFIUSDT 106489.0261 4283188.193 7008.442394 C 2 2 yearn.finance USDT-USD
695 YFI CoinbasePro YFI-USD 69803.71322 2485716.132 7006.499518 C 2 2 yearn.finance
696 YGG Binance YGGUSDT 255512.6937 15978592.67 0.4253489864 C 3 2 Yield Guild Games USDT-USD
697 YGG Okx YGG-USDT 112564.4286 8795935.186 0.4242942872 C 3 2 Yield Guild Games USDT-USD
698 YGG Mexc YGG_USDT 291214.2319 384654.8937 0.4279915233 C 3 2 Yield Guild Games USDT-USD
699 ZEC Mexc ZEC_USDT 508650.6599 287365.0153 21.96116327 C 2 2 Zcash USDT-USD
700 ZEC Binance ZECUSDT 107748.7569 6231023.464 22.06774527 C 2 2 Zcash USDT-USD
701 ZEN Binance ZENUSDT 121239.4862 5983871.133 7.622205603 C 1 2 Horizen USDT-USD
702 ZIL Binance ZILUSDT 78122.06511 5951041.305 0.01981457877 C 3 2 Zilliqa USDT-USD
703 ZIL Mexc ZIL_USDT 164288.1689 136450.7828 0.01983149916 C 3 2 Zilliqa USDT-USD
704 ZIL Kucoin ZIL-USDT 51622.45768 620061.2048 0.0198240821 C 3 2 Zilliqa USDT-U
@@ -0,0 +1,68 @@
base_asset,reference_price,num_oracles,liquidity_tier,asset_name,p,atomic_resolution,min_exchanges,min_price_change_ppm,price_exponent,step_base_quantum,ticksize_exponent,subticks_per_tick,min_order_size,quantum_conversion_exponent
AAVE,88.41933533,7,2,AAVE,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
ADA,0.4713770925,9,1,Cardano,-1,-5,3,2500,-10,1000000,-3,1000000,1000000,-9
AGIX,0.2111443656,6,2,SingularityNET,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
ALGO,0.1613430877,6,2,Algorand,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
APE,1.121514886,7,2,ApeCoin,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
APT,7.323447408,8,2,Aptos,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
ARB,1.701673341,8,1,Arbitrum,0,-6,3,2500,-9,1000000,-3,1000000,1000000,-9
ATOM,8.050389759,8,2,Cosmos,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
AVAX,30.38272818,9,1,Avalanche,1,-7,3,2500,-8,1000000,-3,1000000,1000000,-9
BCH,236.328774,9,1,Bitcoin Cash,2,-8,3,2500,-7,1000000,-3,1000000,1000000,-9
BLUR,0.6050104719,7,2,Blur,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
BNB,243.1294766,6,2,Binance Coin,2,-8,3,4000,-7,1000000,-3,1000000,1000000,-9
BONK,1.09E-05,6,2,Bonk Token,-5,-1,3,4000,-14,1000000,-3,1000000,1000000,-9
BTC,39909.14585,9,1,Bitcoin,4,-10,3,2500,-5,1000000,-3,1000000,1000000,-9
CFX,0.1454384387,5,2,Conflux Token,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
CHZ,0.08712744693,6,2,Chiliz,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
COMP,52.74250938,5,2,Compound Coin,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
CRV,0.4443624604,6,2,Curve DAO Token,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
DOGE,0.07793177878,9,1,Dogecoin,-2,-4,3,2500,-11,1000000,-3,1000000,1000000,-9
DOT,6.452414058,8,1,Polkadot,0,-6,3,2500,-9,1000000,-3,1000000,1000000,-9
EGLD,39.03897897,5,2,MultiversX,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
ENS,14.85690244,6,2,Ethereum Name Service (ENS),1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
EOS,0.5977251446,8,2,Eos,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
ETC,22.84861344,8,1,Ethereum Classic,1,-7,3,2500,-8,1000000,-3,1000000,1000000,-9
ETH,2211.721168,9,1,Ethereum,3,-9,3,2500,-6,1000000,-3,1000000,1000000,-9
FET,0.5864541562,6,2,Fetch AI,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
FIL,4.930296959,8,1,Filecoin,0,-6,3,2500,-9,1000000,-3,1000000,1000000,-9
FLOW,0.5828593278,5,2,Flow - Dapper Labs,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
FTM,0.3359983176,6,2,Fantom,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
GALA,0.01840015547,6,2,Gala,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
GMT,0.2045438866,5,2,STEPN,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
GRT,0.128018834,7,2,The Graph,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
HBAR,0.07127967284,7,2,Hedera Hashgraph,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
ICP,11.47442186,7,2,Internet Computer,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
INJ,31.78305093,7,2,Injective Protocol,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
JTO,1.886208515,6,2,Jito,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
KAVA,0.5751546332,6,2,Kava,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
LDO,2.524539255,8,2,Lido DAO,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
LINK,13.81655633,8,1,ChainLink,1,-7,3,2500,-8,1000000,-3,1000000,1000000,-9
LTC,65.43204352,9,1,Litecoin,1,-7,3,2500,-8,1000000,-3,1000000,1000000,-9
MANA,0.3716510229,7,2,Decentraland,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
MASK,2.787727403,7,2,Mask Network,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
MATIC,0.7288467315,9,1,Matic Network,-1,-5,3,2500,-10,1000000,-3,1000000,1000000,-9
MEME,0.01801497104,5,2,Memecoin Price,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
MINA,1.008126033,5,2,Mina,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
MKR,2113.151651,6,2,Maker,3,-9,3,4000,-6,1000000,-3,1000000,1000000,-9
NEAR,2.674751578,8,1,Near,0,-6,3,2500,-9,1000000,-3,1000000,1000000,-9
OP,2.456951554,7,2,Optimism,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
ORDI,43.0494516,6,2,Ordinals,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
PEOPLE,0.02194591464,5,2,ConstitutionDAO,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
PEPE,1.02E-06,6,2,Pepe,-6,0,3,4000,-15,1000000,-3,1000000,1000000,-9
RNDR,3.777241656,6,2,Render Token,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
SAND,0.3751083804,7,2,SAND,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
SEI,0.6149970988,7,2,Sei,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
SHIB,8.84E-06,8,1,Shiba Inu,-6,0,3,2500,-15,1000000,-3,1000000,1000000,-9
SNX,3.130619706,6,2,Synthetix Network Token,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
SOL,87.46988589,9,1,Solana,1,-7,3,2500,-8,1000000,-3,1000000,1000000,-9
STX,1.255152213,7,2,Stacks,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
SUI,1.224271493,6,2,SuiNetwork,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
SUSHI,0.8926299706,6,2,Sushi,-1,-5,3,4000,-10,1000000,-3,1000000,1000000,-9
TIA,15.55257715,7,2,Celestia,1,-7,3,4000,-8,1000000,-3,1000000,1000000,-9
TRX,0.09702155504,8,2,TRON,-2,-4,3,4000,-11,1000000,-3,1000000,1000000,-9
UNI,5.760612586,7,2,Uniswap,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
WAVES,2.145700544,5,2,Waves,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
WLD,1.907665645,6,2,Worldcoin WLD,0,-6,3,4000,-9,1000000,-3,1000000,1000000,-9
XLM,0.1116437262,8,1,Stellar,-1,-5,3,2500,-10,1000000,-3,1000000,1000000,-9
XRP,0.5112717386,9,1,Ripple,-1,-5,3,2500,-10,1000000,-3,1000000,1000000,-9
1 base_asset reference_price num_oracles liquidity_tier asset_name p atomic_resolution min_exchanges min_price_change_ppm price_exponent step_base_quantum ticksize_exponent subticks_per_tick min_order_size quantum_conversion_exponent
2 AAVE 88.41933533 7 2 AAVE 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
3 ADA 0.4713770925 9 1 Cardano -1 -5 3 2500 -10 1000000 -3 1000000 1000000 -9
4 AGIX 0.2111443656 6 2 SingularityNET -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
5 ALGO 0.1613430877 6 2 Algorand -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
6 APE 1.121514886 7 2 ApeCoin 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
7 APT 7.323447408 8 2 Aptos 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
8 ARB 1.701673341 8 1 Arbitrum 0 -6 3 2500 -9 1000000 -3 1000000 1000000 -9
9 ATOM 8.050389759 8 2 Cosmos 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
10 AVAX 30.38272818 9 1 Avalanche 1 -7 3 2500 -8 1000000 -3 1000000 1000000 -9
11 BCH 236.328774 9 1 Bitcoin Cash 2 -8 3 2500 -7 1000000 -3 1000000 1000000 -9
12 BLUR 0.6050104719 7 2 Blur -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
13 BNB 243.1294766 6 2 Binance Coin 2 -8 3 4000 -7 1000000 -3 1000000 1000000 -9
14 BONK 1.09E-05 6 2 Bonk Token -5 -1 3 4000 -14 1000000 -3 1000000 1000000 -9
15 BTC 39909.14585 9 1 Bitcoin 4 -10 3 2500 -5 1000000 -3 1000000 1000000 -9
16 CFX 0.1454384387 5 2 Conflux Token -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
17 CHZ 0.08712744693 6 2 Chiliz -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
18 COMP 52.74250938 5 2 Compound Coin 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
19 CRV 0.4443624604 6 2 Curve DAO Token -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
20 DOGE 0.07793177878 9 1 Dogecoin -2 -4 3 2500 -11 1000000 -3 1000000 1000000 -9
21 DOT 6.452414058 8 1 Polkadot 0 -6 3 2500 -9 1000000 -3 1000000 1000000 -9
22 EGLD 39.03897897 5 2 MultiversX 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
23 ENS 14.85690244 6 2 Ethereum Name Service (ENS) 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
24 EOS 0.5977251446 8 2 Eos -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
25 ETC 22.84861344 8 1 Ethereum Classic 1 -7 3 2500 -8 1000000 -3 1000000 1000000 -9
26 ETH 2211.721168 9 1 Ethereum 3 -9 3 2500 -6 1000000 -3 1000000 1000000 -9
27 FET 0.5864541562 6 2 Fetch AI -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
28 FIL 4.930296959 8 1 Filecoin 0 -6 3 2500 -9 1000000 -3 1000000 1000000 -9
29 FLOW 0.5828593278 5 2 Flow - Dapper Labs -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
30 FTM 0.3359983176 6 2 Fantom -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
31 GALA 0.01840015547 6 2 Gala -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
32 GMT 0.2045438866 5 2 STEPN -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
33 GRT 0.128018834 7 2 The Graph -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
34 HBAR 0.07127967284 7 2 Hedera Hashgraph -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
35 ICP 11.47442186 7 2 Internet Computer 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
36 INJ 31.78305093 7 2 Injective Protocol 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
37 JTO 1.886208515 6 2 Jito 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
38 KAVA 0.5751546332 6 2 Kava -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
39 LDO 2.524539255 8 2 Lido DAO 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
40 LINK 13.81655633 8 1 ChainLink 1 -7 3 2500 -8 1000000 -3 1000000 1000000 -9
41 LTC 65.43204352 9 1 Litecoin 1 -7 3 2500 -8 1000000 -3 1000000 1000000 -9
42 MANA 0.3716510229 7 2 Decentraland -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
43 MASK 2.787727403 7 2 Mask Network 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
44 MATIC 0.7288467315 9 1 Matic Network -1 -5 3 2500 -10 1000000 -3 1000000 1000000 -9
45 MEME 0.01801497104 5 2 Memecoin Price -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
46 MINA 1.008126033 5 2 Mina 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
47 MKR 2113.151651 6 2 Maker 3 -9 3 4000 -6 1000000 -3 1000000 1000000 -9
48 NEAR 2.674751578 8 1 Near 0 -6 3 2500 -9 1000000 -3 1000000 1000000 -9
49 OP 2.456951554 7 2 Optimism 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
50 ORDI 43.0494516 6 2 Ordinals 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
51 PEOPLE 0.02194591464 5 2 ConstitutionDAO -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
52 PEPE 1.02E-06 6 2 Pepe -6 0 3 4000 -15 1000000 -3 1000000 1000000 -9
53 RNDR 3.777241656 6 2 Render Token 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
54 SAND 0.3751083804 7 2 SAND -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
55 SEI 0.6149970988 7 2 Sei -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
56 SHIB 8.84E-06 8 1 Shiba Inu -6 0 3 2500 -15 1000000 -3 1000000 1000000 -9
57 SNX 3.130619706 6 2 Synthetix Network Token 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
58 SOL 87.46988589 9 1 Solana 1 -7 3 2500 -8 1000000 -3 1000000 1000000 -9
59 STX 1.255152213 7 2 Stacks 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
60 SUI 1.224271493 6 2 SuiNetwork 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
61 SUSHI 0.8926299706 6 2 Sushi -1 -5 3 4000 -10 1000000 -3 1000000 1000000 -9
62 TIA 15.55257715 7 2 Celestia 1 -7 3 4000 -8 1000000 -3 1000000 1000000 -9
63 TRX 0.09702155504 8 2 TRON -2 -4 3 4000 -11 1000000 -3 1000000 1000000 -9
64 UNI 5.760612586 7 2 Uniswap 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
65 WAVES 2.145700544 5 2 Waves 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
66 WLD 1.907665645 6 2 Worldcoin WLD 0 -6 3 4000 -9 1000000 -3 1000000 1000000 -9
67 XLM 0.1116437262 8 1 Stellar -1 -5 3 2500 -10 1000000 -3 1000000 1000000 -9
68 XRP 0.5112717386 9 1 Ripple -1 -5 3 2500 -10 1000000 -3 1000000 1000000 -9
+472
View File
@@ -0,0 +1,472 @@
[
{
"id": "c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96",
"name": "MetaMask",
"description": "",
"homepage": "https://metamask.io/",
"chains": [
"eip155:1",
"eip155:42161",
"eip155:43114"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/us/app/metamask/id1438144202",
"android": "https://play.google.com/store/apps/details?id=io.metamask",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "metamask:",
"universal": "https://metamask.app.link"
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "MetaMask",
"colors": {
"primary": "rgb(255, 255, 255)",
"secondary": ""
}
},
"config": {
"comment": "MetaMask",
"iosMinVersion": "0",
"imageUrl": "",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"androidPackage": "io.metamask",
"connections": [
{
"type": "walletConnectV2",
"native": "metamask:",
"universal": "https://metamask.app.link"
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData",
"wallet_addEthereumChain"
]
},
"userFields": {
"analyticEvent": "METAMASK",
"imageName": "metamask.png"
}
},
{
"id": "coinbase-wallet",
"name": "Coinbase Wallet",
"description": "",
"homepage": "https://www.coinbase.com/wallet",
"chains": [
"eip155:1"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/us/app/coinbase-wallet-nfts-crypto/id1278383455",
"android": "https://play.google.com/store/apps/details?id=org.toshi",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "cbwallet:",
"universal": ""
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "Coinbase",
"colors": {
"primary": "rgb(255, 255, 255)",
"secondary": ""
}
},
"config": {
"comment": "Coinbase",
"iosMinVersion": "1.8.0",
"imageUrl": "",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"androidPackage": "org.toshi",
"connections": [
{
"type": "walletSegue",
"native": "cbwallet:",
"universal": ""
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData",
"wallet_addEthereumChain"
]
},
"userFields": {
"analyticEvent": "COINBASE_WALLET",
"imageName": "coinbase-wallet.png"
}
},
{
"id": "9d373b43ad4d2cf190fb1a774ec964a1addf406d6fd24af94ab7596e58c291b2",
"name": "imToken",
"description": "",
"homepage": "https://token.im/",
"chains": [
"eip155:1"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://itunes.apple.com/us/app/imtoken2/id1384798940",
"android": "https://play.google.com/store/apps/details?id=im.token.app",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "imtokenv2:",
"universal": ""
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "imToken",
"colors": {
"primary": "rgb(255, 255, 255)",
"secondary": ""
}
},
"config": {
"comment": "imToken",
"iosMinVersion": "0",
"imageUrl": "",
"androidPackage": "im.token.app",
"connections": [
{
"type": "walletConnectV2",
"native": "imtokenv2:",
"universal": ""
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "IMTOKEN",
"imageName": "imtoken.png"
}
},
{
"id": "4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0",
"name": "Trust Wallet",
"description": "",
"homepage": "https://trustwallet.com/",
"chains": [
"eip155:1",
"eip155:42161",
"eip155:43114"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/app/apple-store/id1288339409",
"android": "https://play.google.com/store/apps/details?id=com.wallet.crypto.trustapp",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "trust:",
"universal": ""
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "Trust",
"colors": {
"primary": "rgb(51, 117, 187)",
"secondary": ""
}
},
"config": {
"comment": "Trust Wallet",
"iosMinVersion": "0",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"imageUrl": "",
"androidPackage": "com.wallet.crypto.trustapp",
"connections": [
{
"type": "walletConnectV2",
"native": "trust:",
"universal": "https://link.trustwallet.com"
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "TRUST_WALLET",
"imageName": "trust-wallet.png"
}
},
{
"id": "Zerion",
"name": "Zerion",
"description": "",
"homepage": "https://zerion.io/",
"chains": [
"eip155:1"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/app/apple-store/id1456732565",
"android": "https://play.google.com/store/apps/details?id=io.zerion.android",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "zerion:",
"universal": ""
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "Zerion",
"colors": {
"primary": "rgb(51, 117, 187)",
"secondary": ""
}
},
"config": {
"comment": "Zerion Wallet",
"iosMinVersion": "0",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"imageUrl": "",
"androidPackage": "io.zerion.android",
"connections": [
{
"type": "walletConnectV2",
"native": "zerion:",
"universal": ""
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "ZERION",
"imageName": "zerion.png"
}
},
{
"id": "20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66",
"name": "TokenPocket",
"description": "",
"homepage": "https://tokenpocket.pro/",
"chains": [
"eip155:1"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/us/app/tokenpocket-trusted-wallet/id1436028697",
"android": "https://play.google.com/store/apps/details?id=vip.mytokenpocket",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "tpoutside:",
"universal": ""
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "TokenPocket",
"colors": {
"primary": "rgb(41, 128, 254)",
"secondary": ""
}
},
"config": {
"comment": "TokenPocket",
"iosMinVersion": "0",
"imageUrl": "",
"androidPackage": "vip.mytokenpocket",
"connections": [
{
"type": "walletConnectV2",
"native": "tpoutside:",
"universal": ""
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "TOKEN_POCKET",
"imageName": "tokenpocket.png"
}
},
{
"id": "1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369",
"name": "Rainbow",
"description": "",
"homepage": "https://rainbow.me/",
"chains": [
"eip155:1"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/us/app/rainbow-ethereum-wallet/id1457119021",
"android": "",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "rainbow:",
"universal": "https://rnbwapp.com"
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "Rainbow",
"colors": {
"primary": "rgb(0, 30, 89)",
"secondary": ""
}
},
"config": {
"comment": "Rainbow",
"iosMinVersion": "0",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"androidPackage": "me.rainbow",
"backlinked": true,
"imageUrl": "",
"connections": [
{
"type": "walletConnectV2",
"native": "rainbow:",
"universal": "https://rnbwapp.com"
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "RAINBOW_WALLET",
"imageName": "rainbow-wallet.png"
}
},
{
"id": "09102e7bbbd3f92001eda104abe23803181629f695e8f1b95af96d88ff7d5890",
"name": "1inch Wallet",
"description": "",
"homepage": "https://1inch.io/wallet/",
"chains": [
"eip155:1",
"eip155:56"
],
"versions": [
"1"
],
"app": {
"browser": "",
"ios": "https://apps.apple.com/us/app/1inch-defi-wallet/id1546049391",
"android": "",
"mac": "",
"windows": "",
"linux": ""
},
"mobile": {
"native": "oneinch:",
"universal": "https://wallet.1inch.io"
},
"desktop": {
"native": "",
"universal": ""
},
"metadata": {
"shortName": "1inch",
"colors": {
"primary": "rgb(31, 36, 46)",
"secondary": ""
}
},
"config": {
"comment": "1inch",
"iosMinVersion": "0",
"encoding": "=\"#%/<>?@\\^`{|}:&",
"androidPackage": "io.oneinch.android",
"imageUrl": "",
"connections": [
{
"type": "walletConnectV2",
"native": "oneinch:",
"universal": "https://wallet.1inch.io"
}
],
"methods": [
"eth_sendTransaction",
"personal_sign",
"eth_signTypedData"
]
},
"userFields": {
"analyticEvent": "1INCH",
"imageName": "1inch.png"
}
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+230
View File
@@ -0,0 +1,230 @@
<svg width="254" height="77" viewBox="0 0 254 77" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group 1258">
<g id="Ellipse 9" opacity="0.4" filter="url(#filter0_f_20300_14972)">
<ellipse cx="86.5425" cy="-3.91219" rx="116.542" ry="20.0878" fill="#7774FF"/>
</g>
<g id="Ellipse 10" opacity="0.3" filter="url(#filter1_f_20300_14972)">
<circle cx="74.5734" cy="4.63007" r="1.00507" fill="#9A9AFF"/>
</g>
<g id="Ellipse 12" opacity="0.3" filter="url(#filter2_f_20300_14972)">
<circle cx="82.1105" cy="7.64179" r="1.00507" fill="#9A9AFF"/>
</g>
<g id="Ellipse 22" opacity="0.3" filter="url(#filter3_f_20300_14972)">
<circle cx="116.785" cy="4.63007" r="1.00507" fill="#9A9AFF"/>
</g>
<g id="Ellipse 11" opacity="0.3" filter="url(#filter4_f_20300_14972)">
<circle cx="64.774" cy="8.90488" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 18" opacity="0.3" filter="url(#filter5_f_20300_14972)">
<circle cx="96.4322" cy="3.87363" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 20" opacity="0.3" filter="url(#filter6_f_20300_14972)">
<circle cx="76.0807" cy="14.9361" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 21" opacity="0.3" filter="url(#filter7_f_20300_14972)">
<circle cx="104.725" cy="4.87754" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 23" opacity="0.3" filter="url(#filter8_f_20300_14972)">
<circle cx="114.021" cy="7.13925" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 24" opacity="0.3" filter="url(#filter9_f_20300_14972)">
<circle cx="109.75" cy="15.4361" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 25" opacity="0.3" filter="url(#filter10_f_20300_14972)">
<circle cx="119.801" cy="12.6705" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 27" opacity="0.3" filter="url(#filter11_f_20300_14972)">
<circle cx="94.0885" cy="11.0182" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 30" opacity="0.3" filter="url(#filter12_f_20300_14972)">
<circle cx="154.475" cy="11.6666" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 29" opacity="0.3" filter="url(#filter13_f_20300_14972)">
<circle cx="146.435" cy="8.90488" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 15" opacity="0.3" filter="url(#filter14_f_20300_14972)">
<circle cx="24.0103" cy="4.44785" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 33" opacity="0.3" filter="url(#filter15_f_20300_14972)">
<circle cx="-1.05899" cy="13.6783" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 16" opacity="0.3" filter="url(#filter16_f_20300_14972)">
<circle cx="17.441" cy="16.4908" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 35" opacity="0.3" filter="url(#filter17_f_20300_14972)">
<circle cx="36.0553" cy="6.63535" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 32" opacity="0.3" filter="url(#filter18_f_20300_14972)">
<circle cx="10.8707" cy="14.2994" r="0.502536" fill="#9A9AFF"/>
</g>
<g id="Ellipse 13" opacity="0.3" filter="url(#filter19_f_20300_14972)">
<circle cx="55.7274" cy="9.65615" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 19" opacity="0.3" filter="url(#filter20_f_20300_14972)">
<circle cx="87.3886" cy="20.7108" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 26" opacity="0.3" filter="url(#filter21_f_20300_14972)">
<circle cx="123.82" cy="15.1874" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 36" opacity="0.3" filter="url(#filter22_f_20300_14972)">
<circle cx="134.876" cy="14.4335" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 28" opacity="0.3" filter="url(#filter23_f_20300_14972)">
<circle cx="129.6" cy="6.38662" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 14" opacity="0.3" filter="url(#filter24_f_20300_14972)">
<circle cx="41.6571" cy="14.9335" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 31" opacity="0.3" filter="url(#filter25_f_20300_14972)">
<circle cx="4.21767" cy="17.9491" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 34" opacity="0.3" filter="url(#filter26_f_20300_14972)">
<circle cx="12.2177" cy="6.88662" r="0.753803" fill="#9A9AFF"/>
</g>
<g id="Ellipse 17" opacity="0.3" filter="url(#filter27_f_20300_14972)">
<circle cx="50.2001" cy="3.6249" r="0.753803" fill="#9A9AFF"/>
</g>
</g>
<defs>
<filter id="filter0_f_20300_14972" x="-94" y="-88" width="361.085" height="168.176" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="32" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter1_f_20300_14972" x="72.5633" y="2.61993" width="4.01991" height="4.02186" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter2_f_20300_14972" x="80.6029" y="6.13418" width="3.01484" height="3.01679" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.251268" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter3_f_20300_14972" x="115.278" y="3.12246" width="3.01484" height="3.01679" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.251268" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter4_f_20300_14972" x="63.2664" y="7.39727" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter5_f_20300_14972" x="94.9246" y="2.36602" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter6_f_20300_14972" x="74.5731" y="13.4285" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter7_f_20300_14972" x="103.218" y="3.36993" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter8_f_20300_14972" x="112.513" y="5.63165" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter9_f_20300_14972" x="108.242" y="13.9285" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter10_f_20300_14972" x="118.294" y="11.1629" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter11_f_20300_14972" x="92.5809" y="9.51055" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter12_f_20300_14972" x="153.47" y="10.6615" width="2.00995" height="2.00898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.251268" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter13_f_20300_14972" x="144.928" y="7.39727" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter14_f_20300_14972" x="22.5027" y="2.94024" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter15_f_20300_14972" x="-2.56659" y="12.1707" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter16_f_20300_14972" x="15.9334" y="14.9832" width="3.01502" height="3.01405" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter17_f_20300_14972" x="35.0502" y="5.63028" width="2.00995" height="2.00898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.251268" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter18_f_20300_14972" x="9.86563" y="13.2943" width="2.00995" height="2.00898" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.251268" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter19_f_20300_14972" x="53.9686" y="7.89727" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter20_f_20300_14972" x="85.6297" y="18.952" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter21_f_20300_14972" x="122.061" y="13.4285" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter22_f_20300_14972" x="133.117" y="12.6746" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter23_f_20300_14972" x="127.842" y="4.62774" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter24_f_20300_14972" x="39.8982" y="13.1746" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter25_f_20300_14972" x="2.4588" y="16.1902" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter26_f_20300_14972" x="10.4588" y="5.12774" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
<filter id="filter27_f_20300_14972" x="48.4412" y="1.86602" width="3.51795" height="3.51795" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="0.502536" result="effect1_foregroundBlur_20300_14972"/>
</filter>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

+38
View File
@@ -0,0 +1,38 @@
## App Integrations
### Amplitude
Analytics service used to collect data to help the dYdX Product team make informed product decisions.
<b>To use with dydxprotocol/v4-web:</b>
1. Amplitude account with API key.
2. Add API key in Github > Secrets and Variables > Actions as `AMPLITUDE_API_KEY`
3. In your deploy scripts add `pnpm run build:inject-amplitude` after your pnpm build / vite build command.
### Bugsnag
Error handling service used to collect handled/unhandled errors within the app. The information collected is used to help debug and alert the engineering team of crashes/unhandled errors within the app to improve stability.
<b>To use with dydxprotocol/v4-web:</b>
1. Bugsnag account with API key.
2. Add API key in Github > Secrets and Variables > Actions as `BUGSNAG_API_KEY`
3. In your deploy scripts add `pnpm run build:inject-bugsnag` after your pnpm build / vite build command.
4. If you are using with the Amplitude deployment scripts, your build command may look like the following: `pnpm build && pnpm run build:inject-amplitude && pnpm run build:inject-bugsnag`
### StatusPage
Service used to inform users of any status updates to our platform. These status updates are manually set and updated by the On Call engineers.
<b>To use with dydxprotocol/v4-web:</b>
1. StatusPage account and script URI
2. Add API key in Github > Secrets and Variables > Actions as `STATUS_PAGE_SCRIPT_URI`
3. In your deploy scripts add `pnpm run build:inject-statuspage` after your pnpm build / vite build command.
4. If you are using with the Amplitude deployment scripts, your build command may look like the following: `pnpm build && pnpm run build:inject-amplitude && pnpm run build:inject-statuspage`
### Intercom
Service used for live customer support (chat/inbox) as well as home for Help Articles.
<b>To use with dydxprotocol/v4-web:</b>
1. Create Intercom account
2. In Intercom UI
Getting started > Set up Messenger > will give you your API Key on Step 2
Customize Intercom Messenger by adding logo and brand colors
3. Add API key in Github > Secrets and Variables > Actions as `INTERCOM_APP_ID`
4. In your deploy scripts add `pnpm run build:inject-intercom` after your pnpm build / vite build command.
5. If you are using with the Amplitude deployment scripts, your build command may look like the following: `pnpm build && pnpm run build:inject-amplitude && pnpm run build:inject-intercom`
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
source="dist/.well-known/apple-app-site-association"
if [ ! -f "$source" ]; then
echo "Error: $source file not found"
exit 1
fi
app_id=$IOS_APP_ID
if [ -z "$app_id" ]; then
echo "Error: IOS_APP_ID is empty"
exit 1
fi
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s/{PLACE_YOUR_APP_ID_HERE}/$app_id/g" $source
else
sed -i "s/{PLACE_YOUR_APP_ID_HERE}/$app_id/g" $source
fi
+76
View File
@@ -0,0 +1,76 @@
/* eslint-disable no-console */
import fs from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';
const INTERCOM_APP_ID = process.env.INTERCOM_APP_ID;
const currentPath = fileURLToPath(import.meta.url);
const projectRoot = path.dirname(currentPath);
const htmlFilePath = path.resolve(projectRoot, '../dist/index.html');
if (INTERCOM_APP_ID) {
try {
const html = await fs.readFile(htmlFilePath, 'utf-8');
const intercomScripts = `
<!-- Intercom -->
<script>
window.intercomSettings = {
api_base: 'https://api-iam.intercom.io',
app_id: '${INTERCOM_APP_ID}',
custom_launcher_selector: '.custom_intercom',
hide_default_launcher: true,
};
</script>
<script>
// We pre-filled your app ID in the widget URL: 'https://widget.intercom.io/widget/${INTERCOM_APP_ID}'
(function () {
var w = window;
var ic = w.Intercom;
if (typeof ic === 'function') {
ic('reattach_activator');
ic('update', w.intercomSettings);
} else {
var d = document;
var i = function () {
i.c(arguments);
};
i.q = [];
i.c = function (args) {
i.q.push(args);
};
w.Intercom = i;
var l = function () {
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://widget.intercom.io/widget/${INTERCOM_APP_ID}';
var x = d.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
};
if (document.readyState === 'complete') {
l();
} else if (w.attachEvent) {
w.attachEvent('onload', l);
} else {
w.addEventListener('load', l, false);
}
}
})();
</script>
`;
const injectedHtml = html.replace(
'<div id="root"></div>',
`<div id="root"></div>\n${intercomScripts}\n`
);
await fs.writeFile(htmlFilePath, injectedHtml, 'utf-8');
console.log('Intercom scripts successfully injected.');
} catch (err) {
console.error('Error injecting Intercom scripts:', err);
}
}
+79 -53
View File
@@ -1,32 +1,32 @@
import { Suspense } from 'react';
import { lazy, Suspense } from 'react';
import { Navigate, Route, Routes } from 'react-router-dom';
import styled, { AnyStyledComponent, css } from 'styled-components';
import { WagmiConfig } from 'wagmi';
import { QueryClient, QueryClientProvider } from 'react-query';
import { GrazProvider } from 'graz';
import { AppRoute, DEFAULT_TRADE_ROUTE } from '@/constants/routes';
import { AppRoute, DEFAULT_TRADE_ROUTE, MarketsRoute } from '@/constants/routes';
import { useBreakpoints, useInitializePage, useShouldShowFooter, useAnalytics } from '@/hooks';
import {
useBreakpoints,
useTokenConfigs,
useInitializePage,
useShouldShowFooter,
useAnalytics,
} from '@/hooks';
import { DydxProvider } from '@/hooks/useDydxClient';
import { AccountsProvider } from '@/hooks/useAccounts';
import { DialogAreaProvider, useDialogArea } from './hooks/useDialogArea';
import { LocaleProvider } from './hooks/useLocaleSeparators';
import { NotificationsProvider } from './hooks/useNotifications';
import { LocalNotificationsProvider } from './hooks/useLocalNotifications';
import { SubaccountProvider } from './hooks/useSubaccount';
import { SquidProvider } from '@/hooks/useSquid';
import { AppThemeProvider } from '@/hooks/useAppTheme';
import { DialogAreaProvider, useDialogArea } from '@/hooks/useDialogArea';
import { LocaleProvider } from '@/hooks/useLocaleSeparators';
import { NotificationsProvider } from '@/hooks/useNotifications';
import { LocalNotificationsProvider } from '@/hooks/useLocalNotifications';
import { PotentialMarketsProvider } from '@/hooks/usePotentialMarkets';
import { RestrictionProvider } from '@/hooks/useRestrictions';
import { SubaccountProvider } from '@/hooks/useSubaccount';
import { GuardedMobileRoute } from '@/components/GuardedMobileRoute';
import MarketsPage from '@/pages/markets/Markets';
import PortfolioPage from '@/pages/portfolio/Portfolio';
import { AlertsPage } from '@/pages/AlertsPage';
import ProfilePage from '@/pages/Profile';
import { SettingsPage } from '@/pages/settings/Settings';
import TradePage from '@/pages/trade/Trade';
import { RewardsPage } from '@/pages/rewards/RewardsPage';
import { HeaderDesktop } from '@/layout/Header/HeaderDesktop';
import { FooterDesktop } from '@/layout/Footer/FooterDesktop';
import { FooterMobile } from '@/layout/Footer/FooterMobile';
@@ -37,12 +37,25 @@ import { GlobalCommandDialog } from '@/views/dialogs/GlobalCommandDialog';
import { config } from '@/lib/wagmi';
import { breakpoints } from '@/styles';
import { GlobalStyle } from '@/styles/globalStyle';
import { layoutMixins } from '@/styles/layoutMixins';
import { LoadingSpace } from './components/Loading/LoadingSpinner';
import '@/styles/constants.css';
import '@/styles/fonts.css';
import '@/styles/web3modal.css';
const NewMarket = lazy(() => import('@/pages/markets/NewMarket'));
const MarketsPage = lazy(() => import('@/pages/markets/Markets'));
const PortfolioPage = lazy(() => import('@/pages/portfolio/Portfolio'));
const AlertsPage = lazy(() => import('@/pages/AlertsPage'));
const ProfilePage = lazy(() => import('@/pages/Profile'));
const SettingsPage = lazy(() => import('@/pages/settings/Settings'));
const TradePage = lazy(() => import('@/pages/trade/Trade'));
const RewardsPage = lazy(() => import('@/pages/rewards/RewardsPage'));
const TermsOfUsePage = lazy(() => import('@/pages/TermsOfUsePage'));
const PrivacyPolicyPage = lazy(() => import('@/pages/PrivacyPolicyPage'));
const queryClient = new QueryClient();
const Content = () => {
@@ -54,52 +67,63 @@ const Content = () => {
const { isTablet, isNotTablet } = useBreakpoints();
const isShowingHeader = isNotTablet;
const isShowingFooter = useShouldShowFooter();
const { chainTokenLabel } = useTokenConfigs();
return (
<Styled.Content isShowingHeader={isShowingHeader} isShowingFooter={isShowingFooter}>
{isNotTablet && <HeaderDesktop />}
<>
<GlobalStyle />
<Styled.Content isShowingHeader={isShowingHeader} isShowingFooter={isShowingFooter}>
{isNotTablet && <HeaderDesktop />}
<Styled.Main>
<Suspense fallback={null}>
<Routes>
<Route path={AppRoute.Trade}>
<Route path=":market" element={<TradePage />} />
<Route path={AppRoute.Trade} element={<TradePage />} />
</Route>
<Route path={AppRoute.Markets} element={<MarketsPage />} />
{import.meta.env.MODE !== 'production' && (
<Route path={AppRoute.Rewards} element={<RewardsPage />} />
)}
{isTablet && (
<>
<Route path={AppRoute.Alerts} element={<AlertsPage />} />
<Route path={AppRoute.Profile} element={<ProfilePage />} />
<Route path={`${AppRoute.Settings}/*`} element={<SettingsPage />} />
</>
)}
<Styled.Main>
<Suspense fallback={<LoadingSpace id="main" />}>
<Routes>
<Route path={AppRoute.Trade}>
<Route path=":market" element={<TradePage />} />
<Route path={AppRoute.Trade} element={<TradePage />} />
</Route>
<Route element={<GuardedMobileRoute />}>
<Route path={`${AppRoute.Portfolio}/*`} element={<PortfolioPage />} />
</Route>
<Route path="*" element={<Navigate to={DEFAULT_TRADE_ROUTE} replace />} />
</Routes>
</Suspense>
</Styled.Main>
<Route path={AppRoute.Markets}>
<Route path={MarketsRoute.New} element={<NewMarket />} />
<Route path={AppRoute.Markets} element={<MarketsPage />} />
</Route>
<Route path={`/${chainTokenLabel}`} element={<RewardsPage />} />
{isTablet && (
<>
<Route path={AppRoute.Alerts} element={<AlertsPage />} />
<Route path={AppRoute.Profile} element={<ProfilePage />} />
<Route path={`${AppRoute.Settings}/*`} element={<SettingsPage />} />
</>
)}
{isTablet ? <FooterMobile /> : <FooterDesktop />}
<Route element={<GuardedMobileRoute />}>
<Route path={`${AppRoute.Portfolio}/*`} element={<PortfolioPage />} />
</Route>
<Styled.NotificationsToastArea />
<Route path={AppRoute.Terms} element={<TermsOfUsePage />} />
<Route path={AppRoute.Privacy} element={<PrivacyPolicyPage />} />
<Styled.DialogArea ref={setDialogArea}>
<DialogManager />
</Styled.DialogArea>
<Route path="*" element={<Navigate to={DEFAULT_TRADE_ROUTE} replace />} />
</Routes>
</Suspense>
</Styled.Main>
<GlobalCommandDialog />
</Styled.Content>
{isTablet ? <FooterMobile /> : <FooterDesktop />}
<Styled.NotificationsToastArea />
<Styled.DialogArea ref={setDialogArea}>
<DialogManager />
</Styled.DialogArea>
<GlobalCommandDialog />
</Styled.Content>
</>
);
};
const wrapProvider = (Component: React.ComponentType<any>, props?: any) => {
// eslint-disable-next-line react/display-name
return ({ children }: { children: React.ReactNode }) => (
<Component {...props}>{children}</Component>
);
@@ -110,13 +134,15 @@ const providers = [
wrapProvider(GrazProvider),
wrapProvider(WagmiConfig, { config }),
wrapProvider(LocaleProvider),
wrapProvider(RestrictionProvider),
wrapProvider(DydxProvider),
wrapProvider(AccountsProvider),
wrapProvider(SubaccountProvider),
wrapProvider(SquidProvider),
wrapProvider(LocalNotificationsProvider),
wrapProvider(NotificationsProvider),
wrapProvider(DialogAreaProvider),
wrapProvider(PotentialMarketsProvider),
wrapProvider(AppThemeProvider),
];
const App = () => {
@@ -196,7 +222,7 @@ Styled.NotificationsToastArea = styled(NotificationsToastArea)`
Styled.DialogArea = styled.aside`
position: fixed;
height: 100vh;
height: 100%;
z-index: 1;
inset: 0;
overflow: clip;
+390
View File
@@ -0,0 +1,390 @@
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [{ "name": "", "type": "string" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "_upgradedAddress", "type": "address" }],
"name": "deprecate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "_spender", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "approve",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "deprecated",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "_evilUser", "type": "address" }],
"name": "addBlackList",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "_from", "type": "address" },
{ "name": "_to", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "transferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "upgradedAddress",
"outputs": [{ "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "name": "", "type": "address" }],
"name": "balances",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "maximumFee",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "_totalSupply",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "unpause",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "name": "_maker", "type": "address" }],
"name": "getBlackListStatus",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "name": "", "type": "address" },
{ "name": "", "type": "address" }
],
"name": "allowed",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "paused",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "name": "who", "type": "address" }],
"name": "balanceOf",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "pause",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getOwner",
"outputs": [{ "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [{ "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [{ "name": "", "type": "string" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "_to", "type": "address" },
{ "name": "_value", "type": "uint256" }
],
"name": "transfer",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "name": "newBasisPoints", "type": "uint256" },
{ "name": "newMaxFee", "type": "uint256" }
],
"name": "setParams",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "amount", "type": "uint256" }],
"name": "issue",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "amount", "type": "uint256" }],
"name": "redeem",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "name": "_owner", "type": "address" },
{ "name": "_spender", "type": "address" }
],
"name": "allowance",
"outputs": [{ "name": "remaining", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "basisPointsRate",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "name": "", "type": "address" }],
"name": "isBlackListed",
"outputs": [{ "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "_clearedUser", "type": "address" }],
"name": "removeBlackList",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MAX_UINT",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "newOwner", "type": "address" }],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "name": "_blackListedUser", "type": "address" }],
"name": "destroyBlackFunds",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "name": "_initialSupply", "type": "uint256" },
{ "name": "_name", "type": "string" },
{ "name": "_symbol", "type": "string" },
{ "name": "_decimals", "type": "uint256" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "name": "amount", "type": "uint256" }],
"name": "Issue",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "name": "amount", "type": "uint256" }],
"name": "Redeem",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "name": "newAddress", "type": "address" }],
"name": "Deprecate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "name": "feeBasisPoints", "type": "uint256" },
{ "indexed": false, "name": "maxFee", "type": "uint256" }
],
"name": "Params",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "name": "_blackListedUser", "type": "address" },
{ "indexed": false, "name": "_balance", "type": "uint256" }
],
"name": "DestroyedBlackFunds",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "name": "_user", "type": "address" }],
"name": "AddedBlackList",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "name": "_user", "type": "address" }],
"name": "RemovedBlackList",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "name": "owner", "type": "address" },
{ "indexed": true, "name": "spender", "type": "address" },
{ "indexed": false, "name": "value", "type": "uint256" }
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "name": "from", "type": "address" },
{ "indexed": true, "name": "to", "type": "address" },
{ "indexed": false, "name": "value", "type": "uint256" }
],
"name": "Transfer",
"type": "event"
},
{ "anonymous": false, "inputs": [], "name": "Pause", "type": "event" },
{ "anonymous": false, "inputs": [], "name": "Unpause", "type": "event" }
]
+26
View File
@@ -0,0 +1,26 @@
import type { Story } from '@ladle/react';
import { Accordion as AccordionComponent, AccordionProps } from '@/components/Accordion';
import { StoryWrapper } from '.ladle/components';
export const Accordion: Story<AccordionProps> = (args) => {
return (
<StoryWrapper>
<AccordionComponent {...args} />
</StoryWrapper>
);
};
Accordion.args = {
items: [
{
header: 'Question 1?',
content: 'Answer 1.',
},
{
header: 'Question 2?',
content: 'Answer 2.',
},
],
};
+129
View File
@@ -0,0 +1,129 @@
import styled, { keyframes, type AnyStyledComponent } from 'styled-components';
import { Root, Item, Header, Trigger, Content } from '@radix-ui/react-accordion';
import { layoutMixins } from '@/styles/layoutMixins';
import { breakpoints } from '@/styles';
import { PlusIcon } from '@/icons';
export type AccordionItem = {
header: React.ReactNode;
content: React.ReactNode;
};
export type AccordionProps = {
items: AccordionItem[];
className?: string;
};
export const Accordion = ({ items, className }: AccordionProps) => (
<Styled.Root className={className} type="single" collapsible>
{items.map(({ header, content }, idx) => (
<Styled.Item key={idx} value={idx.toString()}>
<Header>
<Styled.Trigger>
{header}
<Styled.Icon>
<PlusIcon />
</Styled.Icon>
</Styled.Trigger>
</Header>
<Styled.Content>{content}</Styled.Content>
</Styled.Item>
))}
</Styled.Root>
);
const Styled: Record<string, AnyStyledComponent> = {};
Styled.Root = styled(Root)`
--accordion-paddingY: 1rem;
--accordion-paddingX: 1rem;
@media ${breakpoints.notTablet} {
--accordion-paddingX: 1.5rem;
}
> *:not(:last-child) {
border-bottom: var(--border-width) solid var(--border-color);
}
`;
Styled.Item = styled(Item)``;
Styled.Icon = styled.div`
display: inline-flex;
justify-content: center;
align-items: center;
width: 2.25rem;
height: 2.25rem;
--color-border: var(--color-layer-6);
color: var(--color-text-1);
background-color: var(--color-layer-5);
border: solid var(--border-width) var(--color-border);
border-radius: 50%;
font: var(--font-small-book);
svg {
height: 1.125em;
width: 1.125em;
}
`;
Styled.Trigger = styled(Trigger)`
${layoutMixins.spacedRow}
width: 100%;
padding: var(--accordion-paddingY) var(--accordion-paddingX);
gap: 0.5rem;
color: var(--color-text-1);
text-align: start;
&:hover {
${Styled.Icon} {
color: var(--color-text-2);
filter: brightness(1.1);
}
}
svg {
color: var(--color-text-0);
transition: transform 0.3s var(--ease-out-expo);
}
&[data-state='open'] svg {
transform: rotate(45deg);
}
`;
Styled.Content = styled(Content)`
overflow: hidden;
margin: 0 var(--accordion-paddingX) var(--accordion-paddingY);
color: var(--color-text-0);
&[data-state='open'] {
animation: ${keyframes`
from {
height: 0;
}
to {
height: var(--radix-accordion-content-height);
}
`} 0.3s var(--ease-out-expo);
}
&[data-state='closed'] {
animation: ${keyframes`
from {
height: var(--radix-accordion-content-height);
}
to {
height: 0;
}
`} 0.1s var(--ease-in-expo);
}
`;
+9 -2
View File
@@ -16,6 +16,7 @@ const assetIcons = {
AVAX: '/currencies/avax.png',
BCH: '/currencies/bch.png',
BLUR: '/currencies/blur.png',
BONK: '/currencies/bonk.png',
BTC: '/currencies/btc.png',
CELO: '/currencies/celo.png',
COMP: '/currencies/comp.png',
@@ -45,6 +46,7 @@ const assetIcons = {
SOL: '/currencies/sol.png',
SUI: '/currencies/sui.png',
SUSHI: '/currencies/sushi.png',
TIA: '/currencies/tia.png',
TRX: '/currencies/trx.png',
UMA: '/currencies/uma.png',
UNI: '/currencies/uni.png',
@@ -71,8 +73,13 @@ export const AssetIcon = ({
}: {
symbol?: Nullable<string>;
className?: string;
}) =>
isAssetSymbol(symbol) ? <Styled.Img src={assetIcons[symbol]} className={className} /> : null;
}) => (
<Styled.Img
src={isAssetSymbol(symbol) ? assetIcons[symbol] : '/currencies/unavailable.png'}
className={className}
alt={symbol}
/>
);
const Styled: Record<string, AnyStyledComponent> = {};
+1 -1
View File
@@ -61,7 +61,7 @@ export const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonPr
return (
<StyledBaseButton
disabled={state[ButtonState.Disabled]}
disabled={state[ButtonState.Disabled] || state[ButtonState.Loading]}
{...{ ref, action, size, shape, state, ...otherProps }}
>
{
+13
View File
@@ -0,0 +1,13 @@
import { forwardRef } from 'react';
type CanvasProps = {
className?: string;
width: number | string;
height: number | string;
};
export const Canvas = forwardRef<HTMLCanvasElement, CanvasProps>(
({ className, width, height }, canvasRef) => (
<canvas ref={canvasRef} className={className} width={width} height={height} />
)
);
+13 -3
View File
@@ -5,7 +5,7 @@ import { Checkbox, CheckboxProps } from '@/components/Checkbox';
import { StoryWrapper } from '.ladle/components';
export const Checkboxes: Story<CheckboxProps> = (args) => {
export const CheckboxStory: Story<CheckboxProps> = (args) => {
const [isChecked, setIsChecked] = useState(false);
return (
@@ -13,10 +13,20 @@ export const Checkboxes: Story<CheckboxProps> = (args) => {
<Checkbox
{...args}
checked={isChecked}
onClick={(e: React.ChangeEvent) => setIsChecked((e.target as HTMLInputElement).checked)}
onCheckedChange={setIsChecked}
id="story-checkbox"
label="example label"
/>
</StoryWrapper>
);
};
Checkboxes.args = {};
CheckboxStory.args = {};
CheckboxStory.argTypes = {
disabled: {
options: [true, false],
control: { type: 'select' },
defaultValue: false,
}
}
+66 -67
View File
@@ -1,10 +1,15 @@
import styled, { type AnyStyledComponent } from 'styled-components';
import styled, { css, type AnyStyledComponent } from 'styled-components';
import { Root, Indicator } from '@radix-ui/react-checkbox';
import { CheckIcon } from '@radix-ui/react-icons';
import { breakpoints } from '@/styles';
import { layoutMixins } from '@/styles/layoutMixins';
type ElementProps = {
checked: boolean;
onClick: (e: React.ChangeEvent) => void;
onCheckedChange: (checked: boolean) => void;
id?: string;
label?: React.ReactNode;
disabled?: boolean;
};
type StyleProps = {
@@ -13,85 +18,79 @@ type StyleProps = {
export type CheckboxProps = ElementProps & StyleProps;
export const Checkbox: React.FC<CheckboxProps> = ({ checked, className, onClick }) => {
return (
<Styled.CheckboxWrapper className={className}>
<Styled.Checkbox
type="checkbox"
checked={checked}
onChange={onClick}
/>
<Styled.CustomCheckbox />
</Styled.CheckboxWrapper>
);
};
export const Checkbox: React.FC<CheckboxProps> = ({
checked,
className,
onCheckedChange,
id,
label,
disabled,
}) => (
<Styled.Container>
<Styled.Root
className={className}
checked={checked}
disabled={disabled}
onCheckedChange={onCheckedChange}
id={id}
>
<Styled.Indicator>
<CheckIcon />
</Styled.Indicator>
</Styled.Root>
{label && (
<Styled.Label disabled={disabled} htmlFor={id}>
{label}
</Styled.Label>
)}
</Styled.Container>
);
const Styled: Record<string, AnyStyledComponent> = {};
Styled.CustomCheckbox = styled.span`
width: 1.25em;
height: 1.25em;
Styled.Container = styled.div`
${layoutMixins.row}
gap: 1ch;
font: var(--font-small-book);
`;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
Styled.Root = styled(Root)`
--checkbox-backgroundColor: var(--color-layer-0);
--checkbox-borderColor: var(--color-border);
min-width: 1.25rem;
height: 1.25rem;
border-radius: 0.375rem;
border: var(--border-width) solid var(--checkbox-borderColor);
background-color: var(--checkbox-backgroundColor);
&::after {
position: absolute;
content: '';
top: 0.25em;
left: 0.4375em;
width: 0.3125em;
height: 0.5em;
border: solid var(--checkbox-checkColor);
border-width: 0 0.125em 0.125em 0;
border-radius: 0.0625em;
opacity: 0;
transform: rotate(0deg) scale(0);
transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;
&[data-state='checked'] {
--checkbox-backgroundColor: var(--color-accent);
}
@media ${breakpoints.tablet} {
width: 1.5em;
height: 1.5em;
&::after {
top: 0.25em;
left: 0.4375em;
width: 0.4375em;
height: 0.625em;
}
&[data-disabled] {
cursor: not-allowed;
--checkbox-backgroundColor: var(--color-layer-1);
}
`;
Styled.CheckboxWrapper = styled.div`
--checkbox-backgroundColor: var(--color-layer-1);
--checkbox-checkColor: var(--color-text-1);
Styled.Indicator = styled(Indicator)`
display: flex;
border-radius: 0.25em;
overflow: hidden;
position: relative;
cursor: pointer;
align-items: center;
justify-content: center;
> input:checked ~ ${Styled.CustomCheckbox}::after {
opacity: 1;
transform: rotate(40deg) scale(1);
}
color: var(--color-text-2);
`;
Styled.Checkbox = styled.input`
width: 1.25em;
height: 1.25em;
z-index: 1;
Styled.Label = styled.label<{ disabled?: boolean }>`
cursor: pointer;
opacity: 0;
color: var(--color-text-2);
@media ${breakpoints.tablet} {
width: 1.5em;
height: 1.5em;
}
${({ disabled }) =>
disabled &&
css`
cursor: not-allowed;
color: var(--color-text-0);
`}
`;
+5 -6
View File
@@ -1,16 +1,13 @@
import type { Story } from '@ladle/react';
import { Collapsible } from '@/components/Collapsible';
import { Collapsible, type CollapsibleProps } from '@/components/Collapsible';
import { StoryWrapper } from '.ladle/components';
import { IconName } from './Icon';
export const CollapsibleStory: Story<Parameters<typeof Collapsible>> = (args) => (
export const CollapsibleStory: Story<CollapsibleProps> = (args) => (
<StoryWrapper>
<Collapsible
label="Collapsible List of Items"
{...args}
>
<Collapsible {...args}>
<ul>
<li>Collapsible Item 1</li>
<li>Collapsible Item 2</li>
@@ -23,6 +20,8 @@ export const CollapsibleStory: Story<Parameters<typeof Collapsible>> = (args) =>
CollapsibleStory.args = {
disabled: false,
withTrigger: true,
label: 'Collapsible List of Items',
};
CollapsibleStory.argTypes = {
+25 -19
View File
@@ -14,6 +14,7 @@ type ElementProps = {
label: React.ReactNode;
triggerIcon?: IconName;
children: React.ReactNode;
withTrigger?: boolean;
};
type StyleProps = {
@@ -23,6 +24,8 @@ type StyleProps = {
fullWidth?: boolean;
};
export type CollapsibleProps = ElementProps & StyleProps;
export const Collapsible = ({
defaultOpen = false,
disabled,
@@ -35,26 +38,29 @@ export const Collapsible = ({
triggerIconSide = 'left',
fullWidth,
className,
}: ElementProps & StyleProps) => (
withTrigger = true,
}: CollapsibleProps) => (
<Styled.Root defaultOpen={defaultOpen} open={open} onOpenChange={onOpenChange}>
<Styled.Trigger className={className} disabled={disabled}>
{triggerIconSide === 'right' && (
<>
{label}
{fullWidth && <HorizontalSeparatorFiller />}
</>
)}
{withTrigger && (
<Styled.Trigger className={className} disabled={disabled}>
{triggerIconSide === 'right' && (
<>
{label}
{fullWidth && <HorizontalSeparatorFiller />}
</>
)}
<Styled.TriggerIcon>
<Icon iconName={triggerIcon} />
</Styled.TriggerIcon>
{triggerIconSide === 'left' && (
<>
{fullWidth && <HorizontalSeparatorFiller />}
{label}
</>
)}
</Styled.Trigger>
<Styled.TriggerIcon>
<Icon iconName={triggerIcon} />
</Styled.TriggerIcon>
{triggerIconSide === 'left' && (
<>
{fullWidth && <HorizontalSeparatorFiller />}
{label}
</>
)}
</Styled.Trigger>
)}
<Styled.Content $transitionDuration={transitionDuration}>{children}</Styled.Content>
</Styled.Root>
);
@@ -80,7 +86,7 @@ Styled.TriggerIcon = styled.span`
width: var(--trigger-icon-width);
display: inline-flex;
transition: transform 0.3s var(--ease-out-expo);
transition: rotate 0.3s var(--ease-out-expo);
color: var(--trigger-icon-color);
${Styled.Trigger}[data-state='open'] & {
+8 -5
View File
@@ -31,10 +31,12 @@ type ElementProps<TabItemsValue> = {
};
type StyleProps = {
fullWidthTabs?: boolean;
className?: string;
fullWidthTabs?: boolean;
};
export type CollapsibleTabsProps<TabItemsValue> = ElementProps<TabItemsValue> & StyleProps;
export const CollapsibleTabs = <TabItemsValue extends string>({
defaultValue,
items,
@@ -43,8 +45,9 @@ export const CollapsibleTabs = <TabItemsValue extends string>({
onOpenChange,
fullWidthTabs,
className,
}: ElementProps<TabItemsValue> & StyleProps) => {
}: CollapsibleTabsProps<TabItemsValue>) => {
const [value, setValue] = useState(defaultValue);
const currentItem = items.find((item) => item.value === value);
@@ -86,8 +89,8 @@ export const CollapsibleTabs = <TabItemsValue extends string>({
</Styled.Header>
<Styled.CollapsibleContent>
{items.map(({ value, content }) => (
<Styled.TabsContent key={value} value={value}>
{items.map(({ asChild, value, content }) => (
<Styled.TabsContent key={value} asChild={asChild} value={value}>
{content}
</Styled.TabsContent>
))}
@@ -219,12 +222,12 @@ Styled.Header = styled.header`
Styled.CollapsibleContent = styled(CollapsibleContent)`
${layoutMixins.stack}
${layoutMixins.perspectiveArea}
box-shadow: none;
`;
Styled.IconButton = styled(IconButton)`
--button-icon-size: 1em;
${Styled.CollapsibleRoot}[data-state='closed'] & {
rotate: -0.5turn;
}
+49 -17
View File
@@ -3,31 +3,49 @@ import styled, { AnyStyledComponent } from 'styled-components';
import { type MenuConfig } from '@/constants/menus';
import { Dialog, DialogPlacement } from '@/components/Dialog';
import { ComboboxMenu } from '@/components/ComboboxMenu';
import { Dialog, DialogPlacement, type DialogProps } from '@/components/Dialog';
import { ComboboxMenu, type ComboboxMenuProps } from '@/components/ComboboxMenu';
type ElementProps<MenuItemValue extends string | number, MenuGroupValue extends string | number> = {
isOpen?: boolean;
setIsOpen?: (open: boolean) => void;
title?: React.ReactNode;
description?: React.ReactNode;
slotTrigger?: React.ReactNode;
slotHeaderInner?: React.ReactNode;
slotFooter?: React.ReactNode;
children?: React.ReactNode;
items: MenuConfig<MenuItemValue, MenuGroupValue>;
onItemSelected?: () => void;
inputPlaceholder?: string;
slotEmpty?: React.ReactNode;
};
type StyleProps = {
placement: DialogPlacement,
className?: string;
};
export const ComboboxDialogMenu = <MenuItemValue extends string | number, MenuGroupValue extends string | number>({
type PickComboxMenuProps<
MenuItemValue extends string | number,
MenuGroupValue extends string | number
> = Pick<
ComboboxMenuProps<MenuItemValue, MenuGroupValue>,
| 'inputPlaceholder'
| 'onItemSelected'
| 'slotEmpty'
| 'withItemBorders'
| 'withSearch'
| 'withStickyLayout'
>;
type PickDialogProps = Pick<
DialogProps,
| 'description'
| 'isOpen'
| 'placement'
| 'setIsOpen'
| 'slotHeaderInner'
| 'slotTrigger'
| 'slotFooter'
| 'preventClose'
>;
export const ComboboxDialogMenu = <
MenuItemValue extends string | number,
MenuGroupValue extends string | number
>({
isOpen = false,
setIsOpen,
title,
@@ -40,11 +58,18 @@ export const ComboboxDialogMenu = <MenuItemValue extends string | number, MenuGr
onItemSelected,
inputPlaceholder,
slotEmpty,
withItemBorders,
withSearch,
withStickyLayout = true,
children,
placement = DialogPlacement.Default,
preventClose,
className,
}: ElementProps<MenuItemValue, MenuGroupValue> & StyleProps) => (
}: ElementProps<MenuItemValue, MenuGroupValue> &
PickComboxMenuProps<MenuItemValue, MenuGroupValue> &
PickDialogProps &
StyleProps) => (
// TODO: sub-menu state management
<Styled.Dialog
isOpen={isOpen}
@@ -54,8 +79,8 @@ export const ComboboxDialogMenu = <MenuItemValue extends string | number, MenuGr
slotHeaderInner={slotHeaderInner}
slotTrigger={slotTrigger}
slotFooter={slotFooter}
placement={placement}
preventClose={preventClose}
className={className}
>
<Styled.ComboboxMenu
@@ -64,7 +89,9 @@ export const ComboboxDialogMenu = <MenuItemValue extends string | number, MenuGr
title={title}
inputPlaceholder={inputPlaceholder}
slotEmpty={slotEmpty}
withStickyLayout
withItemBorders={withItemBorders}
withSearch={withSearch}
withStickyLayout={withStickyLayout}
/>
{children}
</Styled.Dialog>
@@ -75,6 +102,8 @@ const Styled: Record<string, AnyStyledComponent> = {};
Styled.Dialog = styled(Dialog)`
/* Params */
--comboboxDialogMenu-backgroundColor: var(--color-layer-2);
--comboboxDialogMenu-item-gap: 0.5rem;
--comboboxDialogMenu-item-padding: 0.5rem 1rem;
/* Overrides */
& {
@@ -93,9 +122,12 @@ Styled.Dialog = styled(Dialog)`
/* Net 0 sticky top inset (let stickyArea1 header stick to top) */
--stickyArea0-topGap: calc(-1 * var(--stickyArea0-topHeight));
overflow-x: clip;
}
`;
Styled.ComboboxMenu = styled(ComboboxMenu)`
--comboboxMenu-backgroundColor: var(--comboboxDialogMenu-backgroundColor);
--comboboxMenu-item-gap: var(--comboboxDialogMenu-item-gap);
--comboboxMenu-item-padding: var(--comboboxDialogMenu-item-padding);
`;
+69 -33
View File
@@ -2,13 +2,13 @@ import { Fragment, type ReactNode, useState } from 'react';
import styled, { type AnyStyledComponent, css } from 'styled-components';
import { Command } from 'cmdk';
import { type MenuConfig } from '@/constants/menus';
import { MenuItem, type MenuConfig } from '@/constants/menus';
import { popoverMixins } from '@/styles/popoverMixins';
import { layoutMixins } from '@/styles/layoutMixins';
import { Tag } from '@/components/Tag';
type ElementProps<MenuItemValue extends string, MenuGroupValue extends string> = {
type ElementProps<MenuItemValue extends string | number, MenuGroupValue extends string | number> = {
items: MenuConfig<MenuItemValue, MenuGroupValue>;
onItemSelected?: () => void;
@@ -20,9 +20,15 @@ type ElementProps<MenuItemValue extends string, MenuGroupValue extends string> =
type StyleProps = {
className?: string;
withItemBorders?: boolean;
withStickyLayout?: boolean;
};
export type ComboboxMenuProps<
MenuItemValue extends string | number,
MenuGroupValue extends string | number
> = ElementProps<MenuItemValue, MenuGroupValue> & StyleProps;
export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extends string>({
items,
onItemSelected,
@@ -33,17 +39,11 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
withSearch = true,
className,
withItemBorders,
withStickyLayout,
}: ElementProps<MenuItemValue, MenuGroupValue> & StyleProps) => {
}: ComboboxMenuProps<MenuItemValue, MenuGroupValue>) => {
const [highlightedCommand, setHighlightedCommand] = useState<MenuItemValue>();
const [searchValue, setSearchValue] = useState('');
// const inputRef = useRef<HTMLInputElement | null>(null);
// console.log({ commandValue: highlightedCommand });
// useEffect(() => {
// inputRef?.current?.focus();
// }, []);
return (
<Styled.Command
@@ -51,8 +51,9 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
// value={highlightedCommand}
// onValueChange={setHighlightedCommand}
filter={(value: string, search: string) => {
if (value.replace(/ /g, '').includes(search.replace(/ /g, ''))) return 1;
return 0;
value.replace(/ /g, '').toLowerCase().includes(search.replace(/ /g, '').toLowerCase())
? 1
: 0;
}}
className={className}
$withStickyLayout={withStickyLayout}
@@ -60,11 +61,14 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
{withSearch && (
<Styled.Header $withStickyLayout={withStickyLayout}>
<Styled.Input
// ref={inputRef}
/**
* Mobile Issue: Search Input will always trigger mobile keyboard drawer. There is no fix.
* https://github.com/pacocoursey/cmdk/issues/127
*/
autoFocus
type="search"
value={searchValue}
onValueChange={setSearchValue}
autoFocus
placeholder={inputPlaceholder}
/>
</Styled.Header>
@@ -75,6 +79,7 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
<Styled.Group
key={group.group}
heading={group.groupLabel}
$withItemBorders={withItemBorders}
$withStickyLayout={withStickyLayout}
>
{group.items.map((item) => (
@@ -94,22 +99,31 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
}
}}
disabled={item.disabled}
$withItemBorders={withItemBorders}
>
{item.slotBefore}
<Styled.ItemLabel>
<span>
{`${item.label}${item.subitems?.length ? '…' : ''}`}
{item.tag && (
<>
{' '}
<Tag>{item.tag}</Tag>
</>
{
<>
{item.slotBefore}
{item.slotCustomContent ?? (
<Styled.ItemLabel>
<span>
{typeof item.label === 'string'
? `${item.label}${item.subitems?.length ? '…' : ''}`
: item.label}
{item.tag && (
<>
{' '}
<Tag>{item.tag}</Tag>
</>
)}
</span>
{item.description && <span>{item.description}</span>}
</Styled.ItemLabel>
)}
</span>
{item.description && <span>{item.description}</span>}
</Styled.ItemLabel>
{item.slotAfter}
{item.subitems && '→'}
{item.slotAfter}
{item.subitems && '→'}
</>
}
</Styled.Item>
{searchValue &&
@@ -132,6 +146,7 @@ export const ComboboxMenu = <MenuItemValue extends string, MenuGroupValue extend
onItemSelected?.();
}}
disabled={subitem.disabled}
$withItemBorders={withItemBorders}
>
{subitem.slotBefore}
<Styled.ItemLabel>
@@ -164,13 +179,17 @@ const Styled: Record<string, AnyStyledComponent> = {};
Styled.Command = styled(Command)<{ $withStickyLayout?: boolean }>`
--comboboxMenu-backgroundColor: var(--color-layer-2);
--comboboxMenu-input-backgroundColor: var(--color-layer-3);
--comboboxMenu-input-height: 2.5rem;
--comboboxMenu-item-checked-backgroundColor: ;
--comboboxMenu-item-checked-textColor: ;
--comboboxMenu-item-highlighted-backgroundColor: var(--color-layer-3);
--comboboxMenu-item-highlighted-textColor: var(--color-text-1);
--comboboxMenu-item-backgroundColor: ;
--comboboxMenu-item-gap: 0.5rem;
--comboboxMenu-item-padding: 0.5em 1em;
display: grid;
align-content: start;
@@ -219,7 +238,7 @@ Styled.Input = styled(Command.Input)`
gap: 0.5rem;
`;
Styled.Group = styled(Command.Group)<{ $withStickyLayout?: boolean }>`
Styled.Group = styled(Command.Group)<{ $withItemBorders?: boolean; $withStickyLayout?: boolean }>`
color: var(--color-text-0);
> [cmdk-group-heading] {
@@ -236,12 +255,21 @@ Styled.Group = styled(Command.Group)<{ $withStickyLayout?: boolean }>`
> [cmdk-group-heading] {
${layoutMixins.stickyHeader}
z-index: 2;
}
> [cmdk-group-items] {
${layoutMixins.stickyArea3}
}
`}
${({ $withItemBorders }) =>
$withItemBorders &&
css`
> [cmdk-group-items] {
padding: var(--border-width) 0;
}
`}
`;
Styled.List = styled(Command.List)<{ $withStickyLayout?: boolean }>`
@@ -268,24 +296,30 @@ Styled.List = styled(Command.List)<{ $withStickyLayout?: boolean }>`
`}
`;
Styled.Item = styled(Command.Item)`
Styled.Item = styled(Command.Item)<{ $withItemBorders?: boolean }>`
${layoutMixins.scrollSnapItem}
${popoverMixins.item}
--item-checked-backgroundColor: var(--comboboxMenu-item-checked-backgroundColor);
--item-checked-textColor: var(--comboboxMenu-item-checked-textColor);
--item-highlighted-textColor: var(--comboboxMenu-item-highlighted-textColor);
${layoutMixins.scrollSnapItem}
--item-gap: var(--comboboxMenu-item-gap);
--item-padding: var(--comboboxMenu-item-padding);
background-color: var(--comboboxMenu-backgroundColor, inherit);
display: flex;
align-items: center;
gap: 0.5rem;
&[aria-disabled='true'] {
opacity: 0.75;
cursor: not-allowed;
}
${({ $withItemBorders }) =>
$withItemBorders &&
css`
${layoutMixins.withOuterBorder}
`}
`;
Styled.ItemLabel = styled.div`
@@ -304,6 +338,8 @@ Styled.ItemLabel = styled.div`
opacity: 0.8;
}
}
min-width: 0;
`;
Styled.Empty = styled(Command.Empty)`
-1
View File
@@ -11,6 +11,5 @@ export const DetachedScrollableSection = styled.section`
export const AttachedExpandingSection = styled.section`
${layoutMixins.contentSectionAttached}
${layoutMixins.expandingColumnWithHeader}
gap: var(--border-width);
`;
+3 -3
View File
@@ -15,10 +15,10 @@ CopyButtonStory.args = {
};
CopyButtonStory.argTypes = {
shownAsText: {
options: [true, false],
buttonType: {
options: ["text", "icon", "default"],
control: { type: 'select' },
defaultValue: false,
defaultValue: "default",
},
children: {
options: ['some text to copy'],
+41 -4
View File
@@ -9,14 +9,21 @@ import { layoutMixins } from '@/styles/layoutMixins';
import { Button, ButtonProps } from './Button';
import { Icon, IconName } from './Icon';
import { IconButton } from './IconButton';
import { WithTooltip } from './WithTooltip';
export type CopyButtonProps = {
value?: string;
shownAsText?: boolean;
buttonType?: 'text' | 'icon' | 'default';
children?: React.ReactNode;
} & ButtonProps;
export const CopyButton = ({ value, shownAsText, children, ...buttonProps }: CopyButtonProps) => {
export const CopyButton = ({
value,
buttonType = 'default',
children,
...buttonProps
}: CopyButtonProps) => {
const stringGetter = useStringGetter();
const [copied, setCopied] = useState(false);
@@ -28,11 +35,23 @@ export const CopyButton = ({ value, shownAsText, children, ...buttonProps }: Cop
setTimeout(() => setCopied(false), 500);
};
return shownAsText ? (
return buttonType === 'text' ? (
<Styled.InlineRow onClick={onCopy} copied={copied}>
{children}
<Icon iconName={IconName.Copy} />
<Styled.Icon copied={copied} iconName={copied ? IconName.Check : IconName.Copy} />
</Styled.InlineRow>
) : buttonType === 'icon' ? (
<WithTooltip
tooltipString={stringGetter({ key: copied ? STRING_KEYS.COPIED : STRING_KEYS.COPY })}
>
<Styled.IconButton
{...buttonProps}
copied={copied}
action={ButtonAction.Base}
iconName={copied ? IconName.Check : IconName.Copy}
onClick={onCopy}
/>
</WithTooltip>
) : (
<Button
{...buttonProps}
@@ -63,3 +82,21 @@ Styled.InlineRow = styled.div<{ copied: boolean }>`
}
`}
`;
Styled.Icon = styled(Icon)<{ copied: boolean }>`
${({ copied }) =>
copied &&
css`
color: var(--color-positive);
`}
`;
Styled.IconButton = styled(IconButton)<{ copied: boolean }>`
${({ copied }) =>
copied &&
css`
svg {
color: var(--color-positive);
}
`}
`;
+41 -29
View File
@@ -38,6 +38,7 @@ type ElementProps = {
slotTrigger?: React.ReactNode;
slotHeaderInner?: React.ReactNode;
slotFooter?: React.ReactNode;
withClose?: boolean;
};
type StyleProps = {
@@ -46,8 +47,11 @@ type StyleProps = {
hasHeaderBorder?: boolean;
children?: React.ReactNode;
className?: string;
withAnimation?: boolean;
};
export type DialogProps = ElementProps & StyleProps;
const DialogPortal = ({
withPortal,
container,
@@ -77,12 +81,14 @@ export const Dialog = ({
slotTrigger,
slotHeaderInner,
slotFooter,
withClose = true,
placement = DialogPlacement.Default,
portalContainer,
hasHeaderBorder = false,
withAnimation = false,
children,
className,
}: ElementProps & StyleProps) => {
}: DialogProps) => {
const closeButtonRef = useRef<HTMLButtonElement>();
const showOverlay = ![DialogPlacement.Inline, DialogPlacement.FullScreen].includes(placement);
@@ -103,6 +109,7 @@ export const Dialog = ({
e.preventDefault();
}
}}
$withAnimation={withAnimation}
>
<Styled.Header $withBorder={hasHeaderBorder}>
<Styled.HeaderTopRow>
@@ -112,7 +119,7 @@ export const Dialog = ({
{title && <Styled.Title>{title}</Styled.Title>}
{!preventClose && (
{!preventClose && withClose && (
<Styled.Close ref={closeButtonRef}>
<Icon iconName={IconName.Close} />
</Styled.Close>
@@ -166,7 +173,7 @@ Styled.Overlay = styled(Overlay)`
}
`;
Styled.Container = styled(Content)<{ placement: DialogPlacement }>`
Styled.Container = styled(Content)<{ placement: DialogPlacement; $withAnimation?: boolean }>`
/* Params */
--dialog-inset: 1rem;
--dialog-width: 30rem;
@@ -222,7 +229,7 @@ Styled.Container = styled(Content)<{ placement: DialogPlacement }>`
outline: none;
${({ placement }) =>
${({ placement, $withAnimation }) =>
({
[DialogPlacement.Default]: css`
inset: var(--dialog-inset);
@@ -258,9 +265,11 @@ Styled.Container = styled(Content)<{ placement: DialogPlacement }>`
padding-bottom: var(--dialog-radius); */
}
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
${$withAnimation &&
css`
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
from {
opacity: 0;
}
@@ -268,18 +277,19 @@ Styled.Container = styled(Content)<{ placement: DialogPlacement }>`
max-height: 0;
}
`} 0.15s var(--ease-out-expo);
}
}
&[data-state='closed'] {
animation: ${keyframes`
&[data-state='closed'] {
animation: ${keyframes`
to {
opacity: 0;
scale: 0.9;
max-height: 0;
}
`} 0.15s;
}
}
}
`}
`,
[DialogPlacement.Sidebar]: css`
--dialog-width: var(--sidebar-width);
@@ -289,50 +299,52 @@ Styled.Container = styled(Content)<{ placement: DialogPlacement }>`
margin-left: auto;
}
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
${$withAnimation &&
css`
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
from {
translate: 100% 0;
opacity: 0;
}
`} 0.15s var(--ease-out-expo);
}
}
&[data-state='closed'] {
animation: ${keyframes`
&[data-state='closed'] {
animation: ${keyframes`
to {
translate: 100% 0;
opacity: 0;
}
`} 0.15s var(--ease-out-expo);
}
}
}
`}
`,
[DialogPlacement.Inline]: css`
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
${$withAnimation &&
css`
@media (prefers-reduced-motion: no-preference) {
&[data-state='open'] {
animation: ${keyframes`
from {
scale: 0.99;
opacity: 0;
/* filter: blur(2px); */
/* backdrop-filter: none; */
}
`} 0.15s var(--ease-out-expo);
}
}
&[data-state='closed'] {
animation: ${keyframes`
&[data-state='closed'] {
animation: ${keyframes`
to {
scale: 0.99;
opacity: 0;
/* filter: blur(2px); */
/* backdrop-filter: none; */
}
`} 0.15s var(--ease-out-expo);
}
}
}
`}
`,
[DialogPlacement.FullScreen]: css`
--dialog-width: 100vw;
+1 -1
View File
@@ -14,7 +14,7 @@ export const DiffArrowStory: Story<DiffArrowProps> = (args) => (
DiffArrowStory.argTypes = {
direction: {
options: ['left', 'right'],
options: ['left', 'right', 'up', 'down'],
control: { type: 'select' },
defaultValue: 'right',
},
+7 -1
View File
@@ -10,7 +10,7 @@ type ElementProps = {
type StyleProps = {
className?: string;
direction?: 'right' | 'left';
direction?: 'right' | 'left' | 'up' | 'down';
};
export type DiffArrowProps = ElementProps & StyleProps;
@@ -57,5 +57,11 @@ Styled.DiffArrowContainer = styled.span<DiffArrowProps>`
left: css`
transform: scaleX(-1);
`,
up: css`
transform: rotate(-90deg);
`,
down: css`
transform: rotate(90deg);
`
}[direction || 'right'])}
`;
+3 -1
View File
@@ -33,9 +33,11 @@ export const DropdownHeaderMenu = <MenuItemValue extends string>({
return (
<Root>
<Styled.Trigger className={className}>
<Styled.Trigger className={className} asChild>
<div>
{children}
<Styled.DropdownIconButton iconName={IconName.Caret} isToggle />
</div>
</Styled.Trigger>
<Portal>
<Styled.Content
+4 -1
View File
@@ -9,6 +9,7 @@ import {
RadioItem,
Portal,
} from '@radix-ui/react-dropdown-menu';
import { CheckIcon } from '@radix-ui/react-icons';
import { type MenuItem } from '@/constants/menus';
@@ -90,7 +91,9 @@ export const DropdownSelectMenu = <MenuItemValue extends string>({
{slotAfter}
<Styled.ItemIndicator>{/* <CheckIcon /> */}</Styled.ItemIndicator>
<Styled.ItemIndicator>
<CheckIcon />
</Styled.ItemIndicator>
</Styled.RadioItem>
))}
</RadioGroup>
+3 -3
View File
@@ -32,7 +32,7 @@ export const FormInput = forwardRef<HTMLInputElement, FormInputProps>(
isValidationAttached={validationConfig?.attached}
>
<Styled.InputContainer hasSlotRight={!!slotRight}>
<Styled.WithLabel label={label} inputID={id}>
<Styled.WithLabel label={label} inputID={id} disabled={otherProps?.disabled}>
<Input ref={ref} id={id} {...otherProps} />
</Styled.WithLabel>
{slotRight}
@@ -85,11 +85,11 @@ Styled.InputContainer = styled.div<{ hasSlotRight?: boolean }>`
`}
`;
Styled.WithLabel = styled(WithLabel)`
Styled.WithLabel = styled(WithLabel)<{ disabled?: boolean }>`
${formMixins.inputLabel}
label {
cursor: text;
${({ disabled }) => !disabled && 'cursor: text;'}
padding: var(--form-input-paddingY) var(--form-input-paddingX) 0;
}
`;
+2 -29
View File
@@ -1,43 +1,16 @@
import styled, { AnyStyledComponent } from 'styled-components';
import { layoutMixins } from '@/styles/layoutMixins';
import { Icon, IconName } from '@/components/Icon';
export const GreenCheckCircle = ({ className }: { className?: string }) => (
<Styled.GreenCheckCircle className={className}>
<Icon iconName={IconName.Check} />
</Styled.GreenCheckCircle>
<Styled.Icon className={className} iconName={IconName.CheckCircle} />
);
const Styled: Record<string, AnyStyledComponent> = {};
Styled.GreenCheckCircle = styled.div`
${layoutMixins.stack}
Styled.Icon = styled(Icon)`
--icon-size: 1.25rem;
--icon-border-width: 3px;
width: var(--icon-size);
height: var(--icon-size);
border-radius: 50%;
align-items: center;
&:before {
content: '';
width: calc(var(--icon-size) - var(--icon-border-width) * 2);
height: calc(var(--icon-size) - var(--icon-border-width) * 2);
border: solid var(--icon-border-width) var(--color-positive);
border-radius: 50%;
opacity: 0.6;
}
svg {
width: calc(var(--icon-size) / 3);
height: calc(var(--icon-size) / 3);
color: var(--color-positive);
justify-self: center;
}
`;
+42 -5
View File
@@ -6,12 +6,16 @@ import {
AddressConnectorIcon,
ArrowIcon,
Bar3Icon,
BellIcon,
BellStrokeIcon,
BoxCloseIcon,
CalculatorIcon,
CaretIcon,
CautionCircleStrokeIcon,
CautionCircleIcon,
ChatIcon,
CheckIcon,
CheckCircleIcon,
ChevronLeftIcon,
ChevronRightIcon,
ClockIcon,
@@ -20,10 +24,10 @@ import {
CoinsIcon,
CommentIcon,
CopyIcon,
CubeIcon,
DepositIcon,
DepthChartIcon,
DiscordIcon,
EtherscanIcon,
DepthChartIcon,
ExportKeysIcon,
FeedbackIcon,
FileIcon,
@@ -33,11 +37,14 @@ import {
HelpCircleIcon,
HideIcon,
HistoryIcon,
LeaderboardIcon,
LinkOutIcon,
LockIcon,
LogoShortIcon,
MenuIcon,
MigrateIcon,
MintscanIcon,
MoonIcon,
OrderbookIcon,
OrderCanceledIcon,
OrderFilledIcon,
@@ -47,16 +54,20 @@ import {
OrderUntriggeredIcon,
OverviewIcon,
PencilIcon,
PlayIcon,
PlusIcon,
PositionsIcon,
PriceChartIcon,
PrivacyIcon,
QrIcon,
RewardStarIcon,
SearchIcon,
SendIcon,
ShareIcon,
ShowIcon,
TogglesMenuIcon,
StarIcon,
SunIcon,
TerminalIcon,
TradeIcon,
TransferIcon,
@@ -65,18 +76,23 @@ import {
WarningIcon,
WebsiteIcon,
WhitepaperIcon,
WithdrawIcon,
} from '@/icons';
export enum IconName {
AddressConnector = 'AddressConnector',
Arrow = 'Arrow',
Bar3 = 'Bar3',
Bell = 'Bell',
BellStroked = 'BellStroked',
BoxClose = 'BoxClose',
Calculator = 'Calculator',
Caret = 'Caret',
CautionCircle = 'CautionCircle',
CautionCircleStroked = 'CautionCircleStroked',
Chat = 'Chat',
Check = 'Check',
CheckCircle = 'CheckCircle',
ChevronLeft = 'ChevronLeft',
ChevronRight = 'ChevronRight',
Clock = 'Clock',
@@ -85,7 +101,7 @@ export enum IconName {
Coins = 'Coins',
Comment = 'Comment',
Copy = 'Copy',
Cube = 'Cube',
Deposit = 'Deposit',
DepthChart = 'DepthChart',
Discord = 'Discord',
Etherscan = 'Etherscan',
@@ -98,11 +114,14 @@ export enum IconName {
HelpCircle = 'HelpCircle',
Hide = 'Hide',
History = 'History',
Leaderboard = 'Leaderboard',
LinkOut = 'LinkOut',
Lock = 'Lock',
LogoShort = 'LogoShort',
Menu = 'Menu',
Migrate = 'Migrate',
Mintscan = 'Mintscan',
Moon = 'Moon',
Onboarding = 'Onboarding',
Orderbook = 'OrderbookIcon',
OrderCanceled = 'OrderCanceled',
@@ -113,15 +132,19 @@ export enum IconName {
OrderUntriggered = 'OrderUntriggered',
Overview = 'Overview',
Pencil = 'Pencil',
Play = 'Play',
Plus = 'Plus',
Positions = 'Positions',
PriceChart = 'PriceChart',
Privacy = 'Privacy',
Qr = 'Qr',
RewardStar = 'RewardStar',
Search = 'Search',
Send = 'Send',
Share = 'Share',
Show = 'Show',
Star = 'Star',
Sun = 'Sun',
Terminal = 'Terminal',
TogglesMenu = 'TogglesMenu',
Trade = 'Trade',
@@ -131,18 +154,23 @@ export enum IconName {
Warning = 'Warning',
Website = 'Website',
Whitepaper = 'Whitepaper',
Withdraw = 'Withdraw',
}
const icons = {
[IconName.AddressConnector]: AddressConnectorIcon,
[IconName.Arrow]: ArrowIcon,
[IconName.Bar3]: Bar3Icon,
[IconName.Bell]: BellIcon,
[IconName.BellStroked]: BellStrokeIcon,
[IconName.BoxClose]: BoxCloseIcon,
[IconName.Calculator]: CalculatorIcon,
[IconName.Caret]: CaretIcon,
[IconName.CautionCircle]: CautionCircleIcon,
[IconName.CautionCircleStroked]: CautionCircleStrokeIcon,
[IconName.Chat]: ChatIcon,
[IconName.Check]: CheckIcon,
[IconName.CheckCircle]: CheckCircleIcon,
[IconName.ChevronLeft]: ChevronLeftIcon,
[IconName.ChevronRight]: ChevronRightIcon,
[IconName.Clock]: ClockIcon,
@@ -151,7 +179,7 @@ const icons = {
[IconName.Coins]: CoinsIcon,
[IconName.Comment]: CommentIcon,
[IconName.Copy]: CopyIcon,
[IconName.Cube]: CubeIcon,
[IconName.Deposit]: DepositIcon,
[IconName.DepthChart]: DepthChartIcon,
[IconName.Discord]: DiscordIcon,
[IconName.Etherscan]: EtherscanIcon,
@@ -164,11 +192,14 @@ const icons = {
[IconName.HelpCircle]: HelpCircleIcon,
[IconName.Hide]: HideIcon,
[IconName.History]: HistoryIcon,
[IconName.Leaderboard]: LeaderboardIcon,
[IconName.LinkOut]: LinkOutIcon,
[IconName.Lock]: LockIcon,
[IconName.LogoShort]: LogoShortIcon,
[IconName.Menu]: MenuIcon,
[IconName.Migrate]: MigrateIcon,
[IconName.Mintscan]: MintscanIcon,
[IconName.Moon]: MoonIcon,
[IconName.Orderbook]: OrderbookIcon,
[IconName.OrderCanceled]: OrderCanceledIcon,
[IconName.OrderFilled]: OrderFilledIcon,
@@ -178,15 +209,19 @@ const icons = {
[IconName.OrderUntriggered]: OrderUntriggeredIcon,
[IconName.Overview]: OverviewIcon,
[IconName.Pencil]: PencilIcon,
[IconName.Play]: PlayIcon,
[IconName.Plus]: PlusIcon,
[IconName.Positions]: PositionsIcon,
[IconName.PriceChart]: PriceChartIcon,
[IconName.Privacy]: PrivacyIcon,
[IconName.Qr]: QrIcon,
[IconName.RewardStar]: RewardStarIcon,
[IconName.Search]: SearchIcon,
[IconName.Send]: SendIcon,
[IconName.Share]: ShareIcon,
[IconName.Show]: ShowIcon,
[IconName.Star]: StarIcon,
[IconName.Sun]: SunIcon,
[IconName.Terminal]: TerminalIcon,
[IconName.TogglesMenu]: TogglesMenuIcon,
[IconName.Trade]: TradeIcon,
@@ -196,6 +231,7 @@ const icons = {
[IconName.Warning]: WarningIcon,
[IconName.Website]: WebsiteIcon,
[IconName.Whitepaper]: WhitepaperIcon,
[IconName.Withdraw]: WithdrawIcon,
} as Record<IconName, ElementType>;
type ElementProps = {
@@ -213,7 +249,8 @@ export const Icon = styled(
iconComponent: Component = iconName && icons[iconName],
className,
...props
}: ElementProps & StyleProps) => (Component ? <Component className={className} {...props} /> : null)
}: ElementProps & StyleProps) =>
Component ? <Component className={className} {...props} /> : null
)`
width: 1em;
height: 1em;
+1
View File
@@ -67,6 +67,7 @@ const Styled: Record<string, AnyStyledComponent> = {};
const buttonMixin = css`
// Params
--button-icon-size: 1.125em;
--button-padding: 0;
// Rules
> * {
+40 -21
View File
@@ -10,7 +10,7 @@ import {
USD_DECIMALS,
} from '@/constants/numbers';
import { BIG_NUMBERS, MustBigNumber } from '@/lib/numbers';
import { BIG_NUMBERS } from '@/lib/numbers';
import { useLocaleSeparators } from '@/hooks';
export enum InputType {
@@ -29,31 +29,38 @@ type StyleProps = {
type ElementProps = {
type?: InputType;
value?: string | number | null;
allowNegative?: boolean;
decimals?: number;
disabled?: boolean;
id?: string;
max?: number;
onBlur?: () => void;
onChange?:
| Dispatch<SetStateAction<string>>
| React.ReactEventHandler<HTMLInputElement>
| ((values: NumberFormatValues, e: SourceInfo) => void);
onFocus?: () => void;
onInput?: ({
value,
floatValue,
formattedValue,
}: {
value: string;
floatValue?: number;
formattedValue: string;
}) => void;
placeholder?: string;
};
export type InputProps = ElementProps & StyleProps;
type ConditionalProps =
| {
allowNegative?: boolean;
decimals?: number;
max?: number;
onChange?: (values: NumberFormatValues, e: SourceInfo) => void;
onInput?: ({
value,
floatValue,
formattedValue,
}: {
value: string;
floatValue?: number;
formattedValue: string;
}) => void;
}
| {
allowNegative?: never;
decimals?: never;
max?: never;
onChange?: Dispatch<SetStateAction<string>> | React.ReactEventHandler<HTMLInputElement>;
onInput?: (e: SyntheticInputEvent) => void;
};
export type InputProps = ElementProps & StyleProps & ConditionalProps;
export const Input = forwardRef<HTMLInputElement, InputProps>(
(
@@ -129,6 +136,7 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
placeholder={placeholder}
value={value}
// Other
data-1p-ignore // prevent 1Password fill
{...otherProps}
/>
) : (
@@ -137,6 +145,7 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
ref={ref as React.Ref<typeof NumericFormat<unknown>>}
id={id}
// NumericFormat
valueIsNumericString
allowNegative={allowNegative}
decimalScale={decimals}
decimalSeparator={LOCALE_DECIMAL_SEPARATOR}
@@ -160,7 +169,7 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
? undefined
: Number(formattedValue.replace(',', '.'));
onInput?.({ value, floatValue, formattedValue });
onInput?.({ value, floatValue, formattedValue, ...e });
}}
// Native
disabled={disabled}
@@ -168,6 +177,7 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
value={formattedValue}
autoComplete="off"
autoCorrect="off"
data-1p-ignore // prevent 1Password fill
{...otherProps}
/>
)}
@@ -188,7 +198,6 @@ Styled.InputContainer = styled.div`
border-radius: inherit;
input {
user-select: all;
flex: 1;
width: 100%;
}
@@ -207,6 +216,16 @@ const InputStyle = css`
color: var(--color-text-0);
opacity: 1;
}
// Input autofill Styles
&:-webkit-autofill,
&:-webkit-autofill:focus {
transition: background-color 600000s 0s, color 600000s 0s;
}
&[data-autocompleted] {
background-color: var(--input-backgroundColor) !important;
}
`;
Styled.NumericFormat = styled(NumericFormat)`
+3 -3
View File
@@ -12,7 +12,7 @@ type ElementProps = {
};
children: React.ReactNode;
href?: string;
onClick?: () => void;
onClick?: (e: MouseEvent) => void;
withIcon?: boolean;
};
@@ -37,12 +37,12 @@ export const Link = forwardRef<HTMLAnchorElement, ElementProps & StyleProps>(
ref={ref}
className={className}
href={href}
onClick={() => {
onClick={(e: MouseEvent) => {
if (analyticsConfig) {
console.log(analyticsConfig);
}
onClick?.();
onClick?.(e);
}}
rel="noopener noreferrer"
target="_blank"
@@ -11,6 +11,7 @@ export const LoadingSpinner: React.FC<{
return (
<Styled.Spinner className={className}>
<Styled.LoadingSpinnerSvg
id={id}
width="38"
height="38"
viewBox="0 0 38 38"
+1 -1
View File
@@ -1,11 +1,11 @@
import styled, { type AnyStyledComponent } from 'styled-components';
import { RiskLevels } from '@/constants/abacus';
import { UsageColorFromRiskLevel } from '@/styles/colors';
import { Ring } from '@/components/Ring';
import { abacusHelper } from '@/lib/abacus';
import { UsageColorFromRiskLevel } from '@/lib/styles';
type ElementProps = {
value: number;
+15 -65
View File
@@ -1,4 +1,4 @@
import { forwardRef, Ref, useEffect, useRef, useState } from 'react';
import { forwardRef, Ref } from 'react';
import styled, { type AnyStyledComponent, css, keyframes } from 'styled-components';
import { NavLink, matchPath, useLocation } from 'react-router-dom';
@@ -21,8 +21,6 @@ import {
import { layoutMixins } from '@/styles/layoutMixins';
import { isTruthy } from '@/lib/isTruthy';
import { Tag } from './Tag';
import { Icon, IconName } from './Icon';
@@ -61,7 +59,6 @@ const NavItem = forwardRef(
<>
{slotBefore}
<span>
{/* {`${label}${subitems?.length ? ' ' : ''}`} */}
{label}
{tag && (
<>
@@ -71,7 +68,7 @@ const NavItem = forwardRef(
)}
</span>
{slotAfter}
{subitems?.length && <Styled.Icon iconName={IconName.Caret} />}
{subitems?.length && <Styled.Icon iconName={IconName.Triangle} />}
</>
);
@@ -100,8 +97,6 @@ const NavItem = forwardRef(
}
);
type TriggerRef = HTMLAnchorElement | HTMLDivElement | HTMLButtonElement | null;
export const NavigationMenu = <MenuItemValue extends string, MenuGroupValue extends string>({
onSelectItem,
onSelectGroup,
@@ -112,33 +107,6 @@ export const NavigationMenu = <MenuItemValue extends string, MenuGroupValue exte
dir = 'ltr',
className,
}: ElementProps<MenuItemValue, MenuGroupValue> & StyleProps) => {
// Disable click (close) in the first 500ms after hover (open)
// https://github.com/radix-ui/primitives/issues/1630#issuecomment-1545995075
const [clickIsDisabled, setClickIsDisabled] = useState(false);
const triggerRefs = useRef({} as { [value: string]: TriggerRef });
useEffect(() => {
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (
mutation.type === 'attributes' &&
mutation.attributeName === 'data-state' &&
(mutation.target as unknown as HTMLOrSVGElement).dataset.state === 'open' &&
mutation.target !== document.activeElement
) {
setClickIsDisabled(true);
setTimeout(() => setClickIsDisabled(false), 500);
}
}
});
for (const element of Object.values(triggerRefs.current).filter(isTruthy)) {
observer.observe(element, { attributes: true });
}
return () => observer.disconnect();
}, []);
const renderSubitems = ({
item,
depth = 0,
@@ -148,18 +116,18 @@ export const NavigationMenu = <MenuItemValue extends string, MenuGroupValue exte
}) => (
<>
<Styled.SubMenuTrigger
asChild={depth > 0}
ref={(ref: TriggerRef) => (triggerRefs.current[item.value] = ref)}
onClick={(e: MouseEvent) => {
if (clickIsDisabled) {
e.preventDefault();
}
}}
asChild
onPointerMove={(e: MouseEvent) => e.preventDefault()}
onPointerLeave={(e: MouseEvent) => e.preventDefault()}
>
<Styled.NavItem onSelect={onSelectGroup} orientation={itemOrientation} {...item} />
</Styled.SubMenuTrigger>
<Styled.Content data-placement={submenuPlacement}>
<Styled.Content
onPointerEnter={(e: MouseEvent) => e.preventDefault()}
onPointerLeave={(e: MouseEvent) => e.preventDefault()}
data-placement={submenuPlacement}
>
<Styled.Sub data-placement={submenuPlacement}>
<Styled.List
data-orientation={depth > 0 ? 'menu' : orientation === 'vertical' ? 'vertical' : 'menu'}
@@ -410,25 +378,12 @@ Styled.List = styled(List)`
`;
Styled.ListItem = styled(Item)`
/* display: contents; */
display: grid;
position: relative;
${Styled.List}[data-orientation="horizontal"] > & {
gap: var(--submenu-side-offset);
}
/* ${Styled.List}[data-orientation="menu"] > & {
grid-template-columns: 1fr 0;
align-items: start;
gap: 2rem;
} */
/* &:has([data-state="open"]) {
position: sticky;
left: 0;
right: 0;
} */
`;
Styled.SubMenuTrigger = styled(Trigger)`
@@ -436,11 +391,6 @@ Styled.SubMenuTrigger = styled(Trigger)`
outline-offset: -2px;
&[data-state='open'] {
div {
background-color: var(--navigationMenu-item-checked-backgroundColor);
color: var(--navigationMenu-item-checked-textColor);
}
svg {
rotate: 0.5turn;
}
@@ -452,11 +402,10 @@ Styled.NavItem = styled(NavItem)<{ orientation: 'horizontal' | 'vertical' }>`
subitems?.length
? css`
${popoverMixins.trigger}
--trigger-backgroundColor: transparent;
--trigger-open-backgroundColor: var(--color-layer-3);
--trigger-open-backgroundColor: var(--navigationMenu-item-checked-backgroundColor);
`
: css`
&:hover:not(.active) {
&:hover:not(:active) {
background-color: var(--navigationMenu-item-highlighted-backgroundColor);
color: var(--navigationMenu-item-highlighted-textColor);
}
@@ -470,8 +419,6 @@ Styled.NavItem = styled(NavItem)<{ orientation: 'horizontal' | 'vertical' }>`
--item-radius: var(--navigationMenu-item-radius);
--item-padding: var(--navigationMenu-item-padding);
/* ${popoverMixins.backdropOverlay} */
${layoutMixins.scrollSnapItem}
min-height: var(--navigationMenu-item-height);
@@ -525,6 +472,9 @@ Styled.NavItem = styled(NavItem)<{ orientation: 'horizontal' | 'vertical' }>`
`;
Styled.Icon = styled(Icon)`
font-size: 0.375em;
transition: rotate 0.3s var(--ease-out-expo);
${Styled.List}[data-orientation="menu"] & {
rotate: -0.25turn;
}
+201
View File
@@ -0,0 +1,201 @@
import React, { type MouseEvent } from 'react';
import styled, { css } from 'styled-components';
import { ButtonShape, ButtonSize } from '@/constants/buttons';
import {
NotificationStatus,
type Notification as NotificationDataType,
} from '@/constants/notifications';
import { useNotifications } from '@/hooks/useNotifications';
import { popoverMixins } from '@/styles/popoverMixins';
import { layoutMixins } from '@/styles/layoutMixins';
import { IconButton } from '@/components/IconButton';
import { IconName } from '@/components/Icon';
import { Output, OutputType } from '@/components/Output';
type ElementProps = {
notification: NotificationDataType;
onClick?: () => void;
slotIcon?: React.ReactNode;
slotTitle?: React.ReactNode;
slotTitleLeft?: React.ReactNode;
slotTitleRight?: React.ReactNode;
slotDescription?: React.ReactNode;
slotCustomContent?: React.ReactNode;
slotAction?: React.ReactNode;
withClose?: boolean;
};
type StyleProps = {
className?: string;
isToast?: boolean;
};
export type NotificationProps = ElementProps & StyleProps;
export const Notification = ({
className,
isToast,
notification,
onClick,
slotIcon,
slotTitle,
slotTitleLeft,
slotTitleRight,
slotDescription,
slotCustomContent,
slotAction,
withClose = !isToast,
}: NotificationProps) => {
const { markCleared, markSeen } = useNotifications();
return (
<$Container className={className} isToast={isToast} onClick={onClick}>
<$Header>
{slotTitleLeft ?? (slotIcon && <$Icon>{slotIcon}</$Icon>)}
<$Title>{slotTitle}</$Title>
{slotTitleRight}
{withClose && !isToast && (
<$ActionItems>
<$Output
type={OutputType.RelativeTime}
value={notification.timestamps[NotificationStatus.Triggered]}
/>
{notification.status < NotificationStatus.Seen ? <$UnreadIndicator /> : null}
{notification.status < NotificationStatus.Cleared ? (
<$IconButton
iconName={IconName.Close}
shape={ButtonShape.Square}
size={ButtonSize.XSmall}
onClick={(e: MouseEvent) => {
e.stopPropagation();
if (notification.status < NotificationStatus.Seen) {
markSeen(notification);
} else if (notification.status < NotificationStatus.Cleared) {
markCleared(notification);
}
}}
/>
) : null}
</$ActionItems>
)}
</$Header>
<$Description>{slotCustomContent ?? slotDescription}</$Description>
{slotAction && <$Action>{slotAction}</$Action>}
</$Container>
);
};
const $Container = styled.div<{ isToast?: boolean }>`
// Params
--toast-icon-size: 1.75em;
// Rules
${popoverMixins.popover}
overflow: visible;
padding: 1rem 1.25rem;
${({ isToast }) =>
isToast
? css`
padding: 1rem;
box-shadow: 0 0 0 var(--border-width) var(--color-border),
// border
0 0 0.5rem 0.1rem var(--color-layer-2); // shadow
`
: css`
flex: 1;
background-color: transparent;
border-radius: 0;
backdrop-filter: none;
`}
`;
const $Header = styled.header`
${layoutMixins.row}
position: relative;
`;
const $Icon = styled.div`
${layoutMixins.row}
float: left;
margin-right: 0.5rem;
line-height: 1;
> svg,
img {
width: 1.5rem;
height: 1.5rem;
}
`;
const $Title = styled.div`
flex: 1;
font: var(--font-base-medium);
color: var(--color-text-2);
overflow: hidden;
text-overflow: ellipsis;
`;
const $Description = styled.div`
margin-top: 0.5rem;
color: var(--color-text-0);
font: var(--font-small-book);
`;
const $Action = styled.div`
margin-top: 0.5rem;
font: var(--font-small-book);
`;
const $ActionItems = styled.div`
min-width: fit-content;
padding-left: 0.5rem;
height: 100%;
${layoutMixins.row};
justify-content: end;
gap: 0.5rem;
position: absolute;
right: 0;
top: 0;
background-color: var(--color-layer-2);
font: var(--font-mini-book);
display: none;
z-index: 1;
${$Container}:hover & {
display: flex;
}
`;
const $UnreadIndicator = styled.div`
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background-color: var(--color-accent);
border: 1px solid var(--color-layer-2);
`;
const $Output = styled(Output)`
color: var(--color-text-0);
`;
const $IconButton = styled(IconButton)`
--button-border: none;
--button-textColor: var(--color-text-0);
--button-hover-textColor: var(--color-text-1);
`;
+1
View File
@@ -116,6 +116,7 @@ export const Output = ({
{value?.toString() ?? null}
{tag && <Tag>{tag}</Tag>}
{slotRight}
</Styled.Text>
);
}
+62 -28
View File
@@ -4,13 +4,16 @@ import { Link } from 'react-router-dom';
import { Icon, IconName } from '@/components/Icon';
import { layoutMixins } from '@/styles/layoutMixins';
import { breakpoints } from '@/styles';
type PanelProps = {
slotHeaderContent?: string;
slotHeaderContent?: React.ReactNode;
slotHeader?: React.ReactNode;
slotRight?: React.ReactNode;
children?: React.ReactNode;
href?: string;
onHeaderClick?: () => void;
onClick?: () => void;
};
type PanelStyleProps = {
@@ -21,62 +24,94 @@ type PanelStyleProps = {
export const Panel = ({
slotHeaderContent,
slotHeader,
slotRight,
children,
href,
onHeaderClick,
onClick,
hasSeparator,
className,
}: PanelProps & PanelStyleProps) => (
<Styled.Panel>
{href ? (
<Link to={href}>
{slotHeader ? (
slotHeader
) : (
<Styled.Panel onClick={onClick} className={className}>
<Styled.Left>
{href ? (
<Link to={href}>
{slotHeader ? (
slotHeader
) : (
<Styled.Header role="button" onClick={onHeaderClick} hasSeparator={hasSeparator}>
{slotHeaderContent}
<Styled.Icon iconName={IconName.ChevronRight} />
</Styled.Header>
)}
</Link>
) : slotHeader ? (
slotHeader
) : (
slotHeaderContent && (
<Styled.Header role="button" onClick={onHeaderClick} hasSeparator={hasSeparator}>
{slotHeaderContent}
<Styled.Icon iconName={IconName.ChevronRight} />
</Styled.Header>
)}
</Link>
) : slotHeader ? (
slotHeader
) : (
slotHeaderContent && (
<Styled.Header role="button" onClick={onHeaderClick} hasSeparator={hasSeparator}>
{slotHeaderContent}
</Styled.Header>
)
)}
<Styled.Content className={className}>{children}</Styled.Content>
)
)}
<Styled.Content>{children}</Styled.Content>
</Styled.Left>
{slotRight}
</Styled.Panel>
);
const Styled: Record<string, AnyStyledComponent> = {};
Styled.Panel = styled.section`
${layoutMixins.flexColumn}
Styled.Panel = styled.section<{ onClick?: () => void }>`
--panel-paddingY: 1rem;
--panel-paddingX: 1rem;
--panel-content-paddingY: var(--panel-paddingY);
--panel-content-paddingX: var(--panel-paddingX);
@media ${breakpoints.notTablet} {
--panel-paddingX: 1.5rem;
--panel-paddingY: 1.25rem;
--panel-content-paddingY: 1rem;
}
${layoutMixins.row}
background-color: var(--color-layer-3);
border-radius: 0.875rem;
${({ onClick }) =>
onClick &&
css`
cursor: pointer;
&:hover {
button:not(:disabled) {
color: var(--button-hover-textColor);
filter: var(--button-hover-filter);
}
}
`}
`;
Styled.Left = styled.div`
${layoutMixins.flexColumn}
width: 100%;
`;
Styled.Header = styled.header<{ hasSeparator?: boolean }>`
${layoutMixins.spacedRow}
padding: 0.875rem 1rem 0.625rem;
font-size: 0.875rem;
padding: var(--panel-paddingY) var(--panel-paddingX);
${({ hasSeparator }) =>
hasSeparator &&
css`
padding-bottom: 0.625rem;
box-shadow: 0 var(--border-width) var(--border-color);
`}
`;
Styled.Icon = styled(Icon)`
color: var(--color-text-0);
font-size: 0.625rem;
`;
@@ -84,6 +119,5 @@ Styled.Content = styled.div`
${layoutMixins.scrollArea}
${layoutMixins.stickyArea0}
--stickyArea0-background: transparent;
padding: 0.5rem 1rem;
padding: var(--panel-content-paddingY) var(--panel-content-paddingX);
`;
+3 -2
View File
@@ -11,6 +11,7 @@ type ElementProps = {
};
type StyleProps = {
className?: string;
hasLogo?: boolean;
size?: number;
};
@@ -18,7 +19,7 @@ type StyleProps = {
const DARK_LOGO_MARK_URL = '/logos/logo-mark-dark.svg';
const LIGHT_LOGO_MARK_URL = '/logos/logo-mark-light.svg';
export const QrCode = ({ value, hasLogo, size = 300 }: ElementProps & StyleProps) => {
export const QrCode = ({ className, value, hasLogo, size = 300 }: ElementProps & StyleProps) => {
const ref = useRef<HTMLDivElement>(null);
const appTheme: AppTheme = useSelector(getAppTheme);
@@ -74,7 +75,7 @@ export const QrCode = ({ value, hasLogo, size = 300 }: ElementProps & StyleProps
}
}, [appTheme, hasLogo]);
return <Styled.QrCode ref={ref} />;
return <Styled.QrCode className={className} ref={ref} />;
};
const Styled: Record<string, AnyStyledComponent> = {};
+7 -1
View File
@@ -1,4 +1,4 @@
import { useState } from 'react';
import { useEffect, useRef, useState } from 'react';
import styled, { type AnyStyledComponent, css } from 'styled-components';
import { layoutMixins } from '@/styles/layoutMixins';
@@ -22,6 +22,11 @@ export const SearchInput = ({
}: SearchInputProps) => {
const [isOpen, setIsOpen] = useState(false);
const [value, setValue] = useState('');
const inputRef = useRef<HTMLInputElement | null>(null);
useEffect(() => {
if (isOpen) inputRef?.current?.focus();
}, [inputRef, isOpen]);
return (
<Styled.Search>
@@ -41,6 +46,7 @@ export const SearchInput = ({
/>
<Styled.Input
autoFocus
ref={inputRef}
value={value}
isOpen={isOpen}
type={type}
+12 -7
View File
@@ -12,6 +12,8 @@ import { WithDetailsReceipt } from '@/components/WithDetailsReceipt';
import { WithLabel } from '@/components/WithLabel';
import { layoutMixins } from '@/styles/layoutMixins';
import { formMixins } from '@/styles/formMixins';
import breakpoints from '@/styles/breakpoints';
type ElementProps = {
asChild?: boolean;
@@ -84,27 +86,30 @@ export const SearchSelectMenu = ({
const Styled: Record<string, AnyStyledComponent> = {};
Styled.SearchSelectMenu = styled.div`
${layoutMixins.column}
`;
Styled.MenuTrigger = styled.div`
height: var(--form-input-height);
${layoutMixins.spacedRow}
align-items: center;
padding: 0 1rem;
padding: var(--form-input-paddingY) var(--form-input-paddingX);
@media ${breakpoints.tablet} {
height: var(--form-input-height-mobile);
}
`;
Styled.WithLabel = styled(WithLabel)`
--label-textColor: var(--color-text-0);
gap: 0.25rem;
${formMixins.inputLabel}
label {
font: var(--font-mini-book);
}
`;
Styled.SearchSelectMenu = styled.div`
${layoutMixins.column}
`;
Styled.WithDetailsReceipt = styled(WithDetailsReceipt)`
--withReceipt-backgroundColor: var(--color-layer-2);
+15 -9
View File
@@ -1,5 +1,5 @@
import React from 'react';
import styled, { type AnyStyledComponent } from 'styled-components';
import styled, { css, type AnyStyledComponent } from 'styled-components';
import {
Root,
@@ -13,11 +13,13 @@ import {
Portal,
Icon as SelectIcon,
} from '@radix-ui/react-select';
import { CheckIcon } from '@radix-ui/react-icons';
import { popoverMixins } from '@/styles/popoverMixins';
import { formMixins } from '@/styles/formMixins';
import { WithLabel } from '@/components/WithLabel';
import { Icon, IconName } from './Icon';
export const SelectMenu = <T extends string>({
children,
@@ -44,7 +46,9 @@ export const SelectMenu = <T extends string>({
) : (
<Value />
)}
{React.Children.toArray(children).length > 1 && <Styled.DropdownIcon />}
{React.Children.toArray(children).length > 1 && (
<Styled.TriggerIcon iconName={IconName.Triangle} />
)}
</Styled.Trigger>
<Portal>
<Styled.Content className={className}>
@@ -68,7 +72,9 @@ export const SelectItem = <T extends string>({
}) => (
<Styled.Item className={className} value={value}>
<ItemText>{label}</ItemText>
<Styled.ItemIndicator>{/* <CheckIcon /> */}</Styled.ItemIndicator>
<Styled.ItemIndicator>
<CheckIcon />
</Styled.ItemIndicator>
</Styled.Item>
);
@@ -88,12 +94,6 @@ Styled.Trigger = styled(Trigger)<{ $withBlur?: boolean }>`
}
`;
Styled.DropdownIcon = styled(SelectIcon)`
font-size: 0.675em;
color: var(--color-text-1);
margin-left: auto;
`;
Styled.Content = styled(Content)`
--select-menu-content-maxWidth: ;
max-width: var(--select-menu-content-maxWidth);
@@ -116,3 +116,9 @@ Styled.WithLabel = styled(WithLabel)`
${formMixins.inputLabel}
border-radius: 0;
`;
Styled.TriggerIcon = styled(Icon)`
width: 0.625rem;
height: 0.375rem;
color: var(--color-text-0);
`;
+1 -1
View File
@@ -47,7 +47,7 @@ Styled.Root = styled(Root)`
--switch-thumb-backgroundColor: var(--color-layer-6);
--switch-active-backgroundColor: var(--color-accent);
--switch-active-thumb-backgroundColor: var(--color-white);
--switch-active-thumb-backgroundColor: ${({ theme }) => theme.switchThumbActiveBackground};
position: relative;
width: var(--switch-width);
+84 -20
View File
@@ -33,16 +33,20 @@ import {
import { useAsyncList } from 'react-stately';
import { useBreakpoints } from '@/hooks';
import { useBreakpoints, useStringGetter } from '@/hooks';
import { MediaQueryKeys } from '@/hooks/useBreakpoints';
import { Checkbox } from '@/components/Checkbox';
import { breakpoints } from '@/styles';
import { layoutMixins } from '@/styles/layoutMixins';
import { CaretIcon } from '@/icons';
import { STRING_KEYS } from '@/constants/localization';
import { MustBigNumber } from '@/lib/numbers';
import { Icon, IconName } from './Icon';
import { Tag } from './Tag';
import { Button } from './Button';
export { TableCell } from './Table/TableCell';
export { TableColumnHeader } from './Table/TableColumnHeader';
@@ -64,7 +68,7 @@ export type TableItem<TableRowData> = {
onSelect?: (key: TableRowData) => void;
};
export type ColumnDef<TableRowData extends object> = {
type ColumnDef<TableRowData extends object> = {
columnKey: string;
label: React.ReactNode;
tag?: React.ReactNode;
@@ -79,7 +83,7 @@ export type ColumnDef<TableRowData extends object> = {
width?: ColumnSize;
};
type ElementProps<TableRowData extends object | CustomRowConfig, TableRowKey extends Key> = {
export type ElementProps<TableRowData extends object | CustomRowConfig, TableRowKey extends Key> = {
label?: string;
columns: ColumnDef<TableRowData>[];
data: TableRowData[];
@@ -91,6 +95,7 @@ type ElementProps<TableRowData extends object | CustomRowConfig, TableRowKey ext
selectionBehavior?: 'replace' | 'toggle';
onRowAction?: (key: TableRowKey, row: TableRowData) => void;
slotEmpty?: React.ReactNode;
initialNumRowsToShow?: number;
// collection: TableCollection<string>;
// children: React.ReactNode;
};
@@ -120,6 +125,7 @@ export const Table = <TableRowData extends object, TableRowKey extends Key>({
selectionMode = 'single',
selectionBehavior = 'toggle',
slotEmpty,
initialNumRowsToShow,
// shouldRowRender,
// collection,
@@ -135,6 +141,8 @@ export const Table = <TableRowData extends object, TableRowKey extends Key>({
style,
}: ElementProps<TableRowData, TableRowKey> & StyleProps) => {
const [selectedKeys, setSelectedKeys] = useState(new Set<TableRowKey>());
const [numRowsToShow, setNumRowsToShow] = useState(initialNumRowsToShow);
const enableViewMore = numRowsToShow !== undefined;
const currentBreakpoints = useBreakpoints();
const shownColumns = columns.filter(
@@ -161,10 +169,7 @@ export const Table = <TableRowData extends object, TableRowKey extends Key>({
? // String
collator.compare(first as string, second as string)
: // Number
Math.sign(
(parseInt(first as string) || (first as number)) -
(parseInt(second as string) || (second as number))
)) *
MustBigNumber(first).comparedTo(MustBigNumber(second))) *
// Flip the direction if descending order is specified.
(sortDirection === 'descending' ? -1 : 1)
);
@@ -211,6 +216,12 @@ export const Table = <TableRowData extends object, TableRowKey extends Key>({
onRowAction &&
((key: TableRowKey) => onRowAction(key, data.find((row) => getRowKey(row) === key)!))
}
numColumns={shownColumns.length}
onViewMoreClick={
enableViewMore && numRowsToShow < data.length
? () => setNumRowsToShow(data.length)
: undefined
}
// shouldRowRender={shouldRowRender}
hideHeader={hideHeader}
withGradientCardRows={withGradientCardRows}
@@ -235,7 +246,7 @@ export const Table = <TableRowData extends object, TableRowKey extends Key>({
)}
</TableHeader>
<TableBody items={list.items}>
<TableBody items={enableViewMore ? list.items.slice(0, numRowsToShow) : list.items}>
{(item) => (
<Row key={getRowKey(item)}>
{(columnKey) => (
@@ -269,6 +280,8 @@ const TableRoot = <TableRowData extends object | CustomRowConfig, TableRowKey ex
onRowAction?: (key: TableRowKey) => void;
// shouldRowRender?: (prevRowData: object, currentRowData: object) => boolean;
children: CollectionChildren<TableRowData>;
numColumns: number;
onViewMoreClick?: () => void;
hideHeader?: boolean;
withGradientCardRows?: boolean;
@@ -278,7 +291,7 @@ const TableRoot = <TableRowData extends object | CustomRowConfig, TableRowKey ex
withScrollSnapColumns?: boolean;
withScrollSnapRows?: boolean;
}) => {
const { selectionMode, selectionBehavior } = props;
const { selectionMode, selectionBehavior, numColumns, onViewMoreClick } = props;
const state = useTableState<TableRowData>({
...props,
@@ -339,6 +352,7 @@ const TableRoot = <TableRowData extends object | CustomRowConfig, TableRowKey ex
<TableBodyRowGroup
withGradientCardRows={props.withGradientCardRows}
withInnerBorders={props.withInnerBorders}
withOuterBorder={props.withOuterBorder}
>
{/* {Array.from(collection.getChildren!(collection.body.key), (row) => */}
{[...collection.body.childNodes].map((row) =>
@@ -384,6 +398,9 @@ const TableRoot = <TableRowData extends object | CustomRowConfig, TableRowKey ex
</TableRow>
)
)}
{onViewMoreClick ? (
<ViewMoreRow colSpan={numColumns} onClick={onViewMoreClick} />
) : undefined}
</TableBodyRowGroup>
</Styled.Table>
);
@@ -417,6 +434,7 @@ const TableBodyRowGroup = ({
children,
withGradientCardRows,
withInnerBorders,
withOuterBorder,
}: { children: React.ReactNode } & StyleProps) => {
const { rowGroupProps } = useTableRowGroup();
@@ -425,6 +443,7 @@ const TableBodyRowGroup = ({
{...rowGroupProps}
withGradientCardRows={withGradientCardRows}
withInnerBorders={withInnerBorders}
withOuterBorder={withOuterBorder}
>
{children}
</Styled.Tbody>
@@ -491,6 +510,23 @@ const TableColumnHeader = <TableRowData extends object>({
);
};
export const ViewMoreRow = ({ colSpan, onClick }: { colSpan: number; onClick: () => void }) => {
const stringGetter = useStringGetter();
return (
<Styled.Tr key="viewmore">
<Styled.Td
colSpan={colSpan}
onMouseDown={(e: MouseEvent) => e.preventDefault()}
onPointerDown={(e: MouseEvent) => e.preventDefault()}
>
<Styled.ViewMoreButton slotRight={<CaretIcon />} onClick={onClick}>
{stringGetter({ key: STRING_KEYS.VIEW_MORE })}
</Styled.ViewMoreButton>
</Styled.Td>
</Styled.Tr>
);
};
export const TableRow = <TableRowData extends object>({
item,
children,
@@ -662,7 +698,7 @@ Styled.Empty = styled.div<{ withOuterBorder: boolean }>`
justify-items: center;
align-content: center;
padding: 2rem;
padding: 4rem;
gap: 0.75em;
color: var(--color-text-0);
@@ -831,6 +867,7 @@ Styled.SortArrow = styled.span<{ sortDirection: 'ascending' | 'descending' }>`
Styled.Thead = styled.thead<StyleProps>`
${layoutMixins.stickyHeader}
scroll-snap-align: none;
font: var(--font-mini-book);
> * {
height: var(--stickyArea-topHeight);
@@ -839,18 +876,17 @@ Styled.Thead = styled.thead<StyleProps>`
color: var(--tableHeader-textColor);
background-color: var(--tableHeader-backgroundColor);
@media ${breakpoints.notTablet} {
${({ withInnerBorders, withGradientCardRows }) =>
withInnerBorders &&
!withGradientCardRows &&
css`
${layoutMixins.withInnerHorizontalBorders}
`}
}
${({ withInnerBorders, withGradientCardRows }) =>
withInnerBorders &&
!withGradientCardRows &&
css`
${layoutMixins.withInnerHorizontalBorders}
`}
`;
Styled.Tbody = styled.tbody<StyleProps>`
${layoutMixins.stickyArea2}
font: var(--font-small-book);
// If <table> height is fixed with not enough rows to overflow, vertically center the rows
&:before,
@@ -869,6 +905,22 @@ Styled.Tbody = styled.tbody<StyleProps>`
--stickyArea2-paddingBottom: var(--border-width);
--stickyArea2-paddingLeft: var(--border-width);
--stickyArea2-paddingRight: var(--border-width);
tr:first-of-type {
box-shadow: 0 calc(var(--border-width)) 0 0 var(--border-color);
}
`}
${({ withOuterBorder }) =>
withOuterBorder &&
css`
tr:last-of-type:not(:only-of-type) {
box-shadow: 0 calc(-1 * var(--border-width)) 0 0 var(--border-color);
}
tr:first-of-type {
box-shadow: none;
}
`}
${({ withGradientCardRows }) =>
@@ -920,3 +972,15 @@ Styled.Row = styled.div`
${layoutMixins.inlineRow}
padding: var(--tableCell-padding);
`;
Styled.ViewMoreButton = styled(Button)`
--button-backgroundColor: var(--color-layer-2);
--button-textColor: var(--color-text-1);
width: 100%;
svg {
width: 0.675rem;
margin-left: 0.5ch;
}
`;
+1 -1
View File
@@ -24,7 +24,7 @@ export const MarketTableCell = ({
slotLeft={
<>
{showFavorite && <Icon iconName={IconName.Star} />}
<Styled.AssetIcon symbol={asset?.symbol} />
<Styled.AssetIcon symbol={asset?.id} />
</>
}
>
+5 -2
View File
@@ -21,6 +21,7 @@ export type TabItem<TabItemsValue> = {
content?: React.ReactNode;
subitems?: TabItem<TabItemsValue>[];
customTrigger?: ReactNode;
asChild?: boolean;
};
type ElementProps<TabItemsValue> = {
@@ -41,6 +42,8 @@ type StyleProps = {
className?: string;
};
export type TabsProps<TabItemsValue> = ElementProps<TabItemsValue> & StyleProps;
export const Tabs = <TabItemsValue extends string>({
defaultValue,
value,
@@ -107,9 +110,10 @@ export const Tabs = <TabItemsValue extends string>({
sharedContent
) : (
<Styled.Stack>
{items.map(({ value, content, forceMount }) => (
{items.map(({ asChild, value, content, forceMount }) => (
<Styled.Content
key={value}
asChild={asChild}
value={value}
forceMount={forceMount}
$hide={forceMount && currentItem?.value !== value}
@@ -242,7 +246,6 @@ Styled.Trigger = styled(Trigger)<{ $withBorders?: boolean }>`
Styled.Stack = styled.div`
${layoutMixins.stack}
${layoutMixins.perspectiveArea}
box-shadow: none;
`;
+4
View File
@@ -8,6 +8,7 @@ import { Button, type ButtonStateConfig, type ButtonProps } from '@/components/B
type ElementProps = {
timeoutInSeconds: number;
slotFinal?: ReactNode;
} & ButtonProps;
export type TimeoutButtonProps = ElementProps;
@@ -15,6 +16,7 @@ export type TimeoutButtonProps = ElementProps;
export const TimeoutButton = ({
children,
timeoutInSeconds,
slotFinal,
...otherProps
}: TimeoutButtonProps) => {
const [timeoutDeadline] = useState(Date.now() + timeoutInSeconds * 1000);
@@ -23,6 +25,8 @@ export const TimeoutButton = ({
const secondsLeft = Math.max(0, (timeoutDeadline - now) / 1000);
if (slotFinal && secondsLeft <= 0) return slotFinal;
return (
<Button
{...otherProps}
+76 -77
View File
@@ -1,24 +1,19 @@
import React, { useEffect, useRef, useState } from 'react';
import { Root, Title, Description, Action, Close } from '@radix-ui/react-toast';
import { type MouseEvent, useEffect, useRef, useState } from 'react';
import styled, { keyframes } from 'styled-components';
import { Root, Action, Close } from '@radix-ui/react-toast';
import { ButtonShape, ButtonSize } from '@/constants/buttons';
import { popoverMixins } from '@/styles/popoverMixins';
import { breakpoints } from '@/styles';
import { Notification, type NotificationProps } from '@/components/Notification';
import { IconButton } from './IconButton';
import { CloseIcon } from '@/icons';
import styled, { keyframes } from 'styled-components';
import { popoverMixins } from '@/styles/popoverMixins';
import { layoutMixins } from '@/styles/layoutMixins';
import { IconName } from './Icon';
type ElementProps = {
isOpen?: boolean;
setIsOpen?: (isOpen: boolean, isClosedFromTimeout?: boolean) => void;
slotIcon?: React.ReactNode;
slotTitle?: React.ReactNode;
slotDescription?: React.ReactNode;
slotCustomContent?: React.ReactNode;
slotAction?: React.ReactNode;
actionDescription?: string;
actionAltText?: string;
sensitivity?: 'foreground' | 'background';
@@ -26,13 +21,22 @@ type ElementProps = {
lastUpdated?: number;
};
type StyleProps = {};
type StyleProps = {
className?: string;
};
type ToastProps = NotificationProps & ElementProps & StyleProps;
export const Toast = ({
className,
isOpen = true,
notification,
onClick,
setIsOpen,
slotIcon,
slotTitle,
slotTitleLeft,
slotTitleRight,
slotDescription,
slotCustomContent,
slotAction,
@@ -41,7 +45,7 @@ export const Toast = ({
sensitivity = 'background',
duration = Infinity,
lastUpdated,
}: ElementProps & StyleProps) => {
}: ToastProps) => {
// Timeout
const timeout = useRef<number>();
const [isPaused, setIsPaused] = useState(false);
@@ -58,37 +62,45 @@ export const Toast = ({
return (
<$Root
className={className}
type={sensitivity}
duration={Infinity}
open={isOpen}
onOpenChange={setIsOpen}
onPause={() => setIsPaused(true)}
onResume={() => setIsPaused(false)}
onClick={() => {
setIsOpen?.(false, false);
onClick?.();
}}
>
<div>
<$Container>
<$Header>
{slotIcon && <$Icon>{slotIcon}</$Icon>}
<Close asChild>
<$CloseButton
iconName={IconName.Close}
shape={ButtonShape.Circle}
size={ButtonSize.XSmall}
onClick={(e: MouseEvent) => e.stopPropagation()}
/>
</Close>
<Close asChild>
<$CloseButton
iconComponent={CloseIcon}
shape={ButtonShape.Square}
size={ButtonSize.XSmall}
/>
</Close>
<$Title>{slotTitle}</$Title>
</$Header>
{!slotCustomContent && <$Description>{slotDescription}</$Description>}
{slotCustomContent}
{actionDescription && (
<$Action asChild altText={actionAltText}>
{slotAction}
</$Action>
)}
</$Container>
</div>
{slotCustomContent ?? (
<$Notification
isToast
notification={notification}
slotIcon={slotIcon}
slotTitle={slotTitle}
slotTitleLeft={slotTitleLeft}
slotTitleRight={slotTitleRight}
slotDescription={slotDescription}
slotAction={
actionDescription && (
<$Action asChild altText={actionAltText}>
{slotAction}
</$Action>
)
}
/>
)}
</$Root>
);
};
@@ -114,7 +126,7 @@ const $Root = styled(Root)`
translate: var(--x) var(--y);
will-change: translate, margin-top;
margin-bottom: var(--toasts-gap);
/* margin-bottom: var(--toasts-gap); */
&[data-swipe-direction='right'] {
&[data-state='open'] {
@@ -163,6 +175,10 @@ const $Root = styled(Root)`
cursor: n-resize;
}
&:focus:not([data-swipe='end']) & {
outline: var(--color-accent) 1px solid;
}
&[data-swipe='move'] {
transition-property: opacity;
opacity: 0.98;
@@ -171,6 +187,10 @@ const $Root = styled(Root)`
* {
cursor: inherit;
}
& > * {
opacity: 0.5;
}
}
&[data-state='closed'],
@@ -198,69 +218,48 @@ const $Root = styled(Root)`
}
`;
const $Container = styled.div`
const $Notification = styled(Notification)`
// Params
--toast-icon-size: 1.75em;
// Rules
${popoverMixins.popover}
overflow: visible;
padding: 1rem;
box-shadow: 0 0 0 var(--border-width) var(--color-border),
// border
0 0 0.5rem 0.1rem var(--color-layer-2); // shadow
${$Root}:focus:not([data-swipe='end']) & {
outline: var(--color-accent) 1px solid;
}
> * {
transition: opacity 0.2s;
}
${$Root}[data-swipe='move'] & > * {
opacity: 0.5;
}
`;
const $Header = styled.header`
display: block;
`;
const $Icon = styled.div`
${layoutMixins.row}
float: left;
width: 1em;
height: 1em;
margin-right: 0.4em;
line-height: 1;
`;
const $CloseButton = styled(IconButton)`
--button-textColor: var(--color-text-0);
--button-border: none;
--button-icon-size: 0.85em;
display: none;
float: right;
/* float: right; */
margin: -0.42rem -0.42rem -0.42rem 0.42rem;
`;
const $Title = styled(Title)`
flex: 1;
// Absolute
position: absolute;
top: 0;
right: 0;
font: var(--font-base-medium);
color: var(--color-text-2);
border: solid var(--border-width) var(--color-border);
overflow: hidden;
text-overflow: ellipsis;
`;
${$Root}:hover & {
display: block;
z-index: 2;
}
const $Description = styled(Description)`
margin-top: 0.5rem;
color: var(--color-text-0);
font: var(--font-small-book);
@media ${breakpoints.mobile} {
display: block;
z-index: 2;
}
`;
const $Action = styled(Action)`
+8 -4
View File
@@ -1,6 +1,7 @@
import styled from 'styled-components';
import { Provider, Viewport } from '@radix-ui/react-toast';
import styled from 'styled-components';
import { layoutMixins } from '@/styles/layoutMixins';
type ElementProps = {
@@ -12,7 +13,9 @@ type StyleProps = {
className?: string;
};
export const ToastArea = ({ swipeDirection, children, className }: ElementProps & StyleProps) => (
type ToastAreaProps = ElementProps & StyleProps;
export const ToastArea = ({ swipeDirection, children, className }: ToastAreaProps) => (
<$ToastArea className={className}>
<Provider swipeDirection={swipeDirection}>
{children}
@@ -24,9 +27,8 @@ export const ToastArea = ({ swipeDirection, children, className }: ElementProps
const $ToastArea = styled.aside`
// Params
--toasts-gap: 0.5rem;
// Rules
${layoutMixins.scrollArea}
z-index: 1;
pointer-events: none;
@@ -34,6 +36,7 @@ const $ToastArea = styled.aside`
> * {
display: contents;
pointer-events: none;
position: relative;
> ol {
/* display: block; */
@@ -43,6 +46,7 @@ const $ToastArea = styled.aside`
// Desired display order: latest to earliest (¯\_(ツ)_/¯)
display: flex;
flex-direction: column-reverse;
position: relative;
pointer-events: none;
+4
View File
@@ -52,15 +52,19 @@ const Styled: Record<string, AnyStyledComponent> = {};
Styled.BaseButton = styled(BaseButton)`
--button-toggle-off-backgroundColor: var(--color-layer-3);
--button-toggle-off-textColor: var(--color-text-0);
--button-toggle-off-border: solid var(--border-width) var(--border-color);
--button-toggle-on-backgroundColor: var(--color-layer-1);
--button-toggle-on-textColor: var(--color-text-2);
--button-toggle-on-border: solid var(--border-width) var(--border-color);
--button-backgroundColor: var(--button-toggle-off-backgroundColor);
--button-textColor: var(--button-toggle-off-textColor);
--button-border: var(--button-toggle-off-border);
&[data-state='on'],
&[data-state='active'] {
--button-backgroundColor: var(--button-toggle-on-backgroundColor);
--button-textColor: var(--button-toggle-on-textColor);
--button-border: var(--button-toggle-on-border);
}
`;
+15 -4
View File
@@ -7,13 +7,15 @@ import { ButtonShape, ButtonSize } from '@/constants/buttons';
import { useBreakpoints } from '@/hooks';
import { layoutMixins } from '@/styles/layoutMixins';
import { type BaseButtonProps } from '@/components/BaseButton';
import { type BaseButtonProps } from '@/components/BaseButton';
import { ToggleButton } from '@/components/ToggleButton';
type ElementProps<MenuItemValue extends string> = {
items: MenuItem<MenuItemValue>[];
value: MenuItemValue;
onValueChange: (value: MenuItemValue) => void;
onValueChange: (value: any) => void;
onInteraction?: () => void;
ensureSelected?: boolean;
};
type StyleProps = {
@@ -25,10 +27,14 @@ export const ToggleGroup = forwardRef(
{
items,
value,
ensureSelected = true,
onValueChange,
onInteraction,
className,
size,
shape = ButtonShape.Pill,
...buttonProps
}: ElementProps<MenuItemValue> & StyleProps & BaseButtonProps,
ref: Ref<HTMLDivElement>
@@ -40,12 +46,17 @@ export const ToggleGroup = forwardRef(
ref={ref}
type="single"
value={value}
onValueChange={onValueChange}
onValueChange={(newValue: MenuItemValue) => {
if ((ensureSelected && newValue) || !ensureSelected) {
onValueChange(newValue);
}
onInteraction?.();
}}
className={className}
loop
>
{items.map((item) => (
<Item key={item.value} value={item.value} aria-label={item.label} asChild>
<Item key={item.value} value={item.value} asChild>
<ToggleButton
size={size ? size : isTablet ? ButtonSize.Small : ButtonSize.XSmall}
shape={shape}
+2 -2
View File
@@ -2,9 +2,9 @@ import styled, { type AnyStyledComponent } from 'styled-components';
import { type RiskLevels } from '@/constants/abacus';
import { UsageColorFromRiskLevel } from '@/styles/colors';
import { abacusHelper } from '@/lib/abacus';
import { UsageColorFromRiskLevel } from '@/lib/styles';
type ElementProps = {
value: number;
};
+1 -1
View File
@@ -40,5 +40,5 @@ Styled.Details = styled(Details)`
padding: 0.375rem 0.75rem 0.25rem;
font-size: 0.8125em;
font-size: var(--details-item-fontSize, 0.8125em);
`;

Some files were not shown because too many files have changed in this diff Show More