diff --git a/public/configs/env.json b/public/configs/env.json index a3a3dea..b94740f 100644 --- a/public/configs/env.json +++ b/public/configs/env.json @@ -1,1319 +1,1315 @@ { - "apps": { - "ios": { - "scheme": "dydx-t-v4" + "apps": { + "ios": { + "scheme": "dydx-t-v4" + } + }, + "deployments": { + "MAINNET": { + "environments": ["dydxprotocol-mainnet"], + "default": "dydxprotocol-mainnet" + }, + "TESTFLIGHT": { + "environments": ["dydxprotocol-mainnet", "dydxprotocol-testnet"], + "default": "dydxprotocol-mainnet" + }, + "TESTNET": { + "environments": ["dydxprotocol-testnet"], + "default": "dydxprotocol-testnet" + }, + "DEV": { + "environments": [ + "dydxprotocol-dev", + "dydxprotocol-dev-2", + "dydxprotocol-dev-4", + "dydxprotocol-dev-5", + "dydxprotocol-staging", + "dydxprotocol-staging-west", + "dydxprotocol-testnet", + "dydxprotocol-testnet-dydx", + "dydxprotocol-testnet-nodefleet", + "dydxprotocol-testnet-kingnodes", + "dydxprotocol-testnet-liquify", + "dydxprotocol-testnet-polkachu", + "dydxprotocol-testnet-bware" + ], + "default": "dydxprotocol-testnet" + } + }, + "environments": { + "dydxprotocol-dev": { + "name": "v4 Dev", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4dev.dydx.exchange", + "socket": "wss://indexer.v4dev.dydx.exchange" + } + ], + "validators": ["https://validator.v4dev.dydx.exchange"], + "0xsquid": "https://testnet.api.0xsquid.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4dev.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true } - }, - "deployments": { - "MAINNET": { - "environments": [ - "dydxprotocol-mainnet" - ], - "default": "dydxprotocol-mainnet" + }, + "dydxprotocol-dev-2": { + "name": "v4 Dev 2", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } }, - "TESTFLIGHT": { - "environments": [ - "dydxprotocol-mainnet", - "dydxprotocol-testnet" - ], - "default": "dydxprotocol-mainnet" + "endpoints": { + "indexers": [ + { + "api": "http://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com", + "socket": "ws://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com" + } + ], + "validators": ["http://54.92.118.111"], + "0xsquid": "https://testnet.api.0xsquid.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, - "TESTNET": { - "environments": [ - "dydxprotocol-testnet" - ], - "default": "dydxprotocol-testnet" + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, - "DEV": { - "environments": [ - "dydxprotocol-dev", - "dydxprotocol-dev-2", - "dydxprotocol-dev-4", - "dydxprotocol-dev-5", - "dydxprotocol-staging", - "dydxprotocol-staging-west", - "dydxprotocol-testnet", - "dydxprotocol-testnet-dydx", - "dydxprotocol-testnet-nodefleet", - "dydxprotocol-testnet-kingnodes", - "dydxprotocol-testnet-liquify", - "dydxprotocol-testnet-polkachu", - "dydxprotocol-testnet-bware" - ], - "default": "dydxprotocol-testnet" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true } - }, - "environments": { - "dydxprotocol-dev": { - "name": "v4 Dev", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4dev.dydx.exchange", - "socket": "wss://indexer.v4dev.dydx.exchange" - } - ], - "validators": [ - "https://validator.v4dev.dydx.exchange" - ], - "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4dev.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } + }, + "dydxprotocol-dev-4": { + "name": "v4 Dev 4", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } }, - "dydxprotocol-dev-2": { - "name": "v4 Dev 2", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "http://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com", - "socket": "ws://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com" - } - ], - "validators": [ - "http://54.92.118.111" - ], - "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4dev4.dydx.exchange", + "socket": "wss://indexer.v4dev4.dydx.exchange" + } + ], + "validators": ["https://validator.v4dev4.dydx.exchange"], + "0xsquid": "https://testnet.api.0xsquid.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4dev4.dydx.exchange" }, - "dydxprotocol-dev-4": { - "name": "v4 Dev 4", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4dev4.dydx.exchange", - "socket": "wss://indexer.v4dev4.dydx.exchange" - } - ], - "validators": [ - "https://validator.v4dev4.dydx.exchange" - ], - "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4dev4.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, - "dydxprotocol-dev-5": { - "name": "v4 Dev 5", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "http://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com", - "socket": "ws://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com" - } - ], - "validators": [ - "http://18.223.78.50" - ], - "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" }, - "dydxprotocol-staging": { - "name": "v4 Staging", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4staging.dydx.exchange", - "socket": "wss://indexer.v4staging.dydx.exchange" - } - ], - "faucet": "https://faucet.v4staging.dydx.exchange", - "validators": [ - "https://validator.v4staging.dydx.exchange" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "help": "https://help.dydx.exchange", - "foundation": "https://www.dydx.foundation", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } }, - "dydxprotocol-staging-forced-update": { - "name": "v4 Staging Forced Update", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4staging.dydx.exchange", - "socket": "wss://indexer.v4staging.dydx.exchange" - } - ], - "faucet": "https://faucet.v4staging.dydx.exchange", - "validators": [ - "https://validator.v4staging.dydx.exchange" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://v4-teacher.vercel.app/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "apps": { - "ios": { - "minimalVersion": "1.0", - "build": 40000, - "url": "https://apps.apple.com/app/dydx/id1564787350" - } - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } - }, - "dydxprotocol-staging-west": { - "name": "v4 Staging West", - "ethereumChainId": "11155111", - "dydxChainId": "dydxprotocol-testnet", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4staging.dydx.exchange", - "socket": "wss://indexer.v4staging.dydx.exchange" - } - ], - "faucet": "https://faucet.v4staging.dydx.exchange", - "validators": [ - "https://validator-uswest1.v4staging.dydx.exchange" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "help": "https://help.dydx.exchange", - "foundation": "https://www.dydx.foundation", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": true - } - }, - "dydxprotocol-testnet": { - "name": "v4 Public Testnet", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://dydx-testnet-full-rpc.public.blastapi.io/", - "https://dydx-testnet-rpc.polkachu.com/", - "https://dydx-testnet.nodefleet.org", - "https://test-dydx.kingnodes.com", - "https://dydx-rpc.liquify.com/api=8878132/dydx" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-dydx": { - "name": "v4 Public Testnet/dYdX", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://validator.v4testnet.dydx.exchange" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-nodefleet": { - "name": "v4 Public Testnet/nodefleet", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://dydx-testnet.nodefleet.org" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-kingnodes": { - "name": "v4 Public Testnet/KingNodes", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://test-dydx.kingnodes.com" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-liquify": { - "name": "v4 Public Testnet/Liquify", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://dydx-rpc.liquify.com/api=8878132/dydx" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnMore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnMore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", - "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-polkachu": { - "name": "v4 Public Testnet/Polkahcu", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://dydx-testnet-rpc.polkachu.com/" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-testnet-bware": { - "name": "v4 Public Testnet/BWare", - "ethereumChainId": "11155111", - "dydxChainId": "dydx-testnet-4", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "dYdX-api", - "isMainNet": false, - "tokens": { - "chain": { - "name": "Dv4TNT", - "denom": "adv4tnt", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "https://indexer.v4testnet.dydx.exchange", - "socket": "wss://indexer.v4testnet.dydx.exchange" - } - ], - "validators": [ - "https://dydx-testnet-full-rpc.public.blastapi.io/" - ], - "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", - "faucet": "https://faucet.v4testnet.dydx.exchange" - }, - "links": { - "tos": "https://dydx.exchange/v4-terms", - "privacy": "https://dydx.exchange/privacy", - "statusPage": "https://status.v4testnet.dydx.exchange/", - "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "documentation": "https://docs.dydx.exchange/", - "community": "https://discord.com/invite/dydx", - "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", - "blogs": "https://www.dydx.foundation/blog", - "foundation": "https://www.dydx.foundation", - "help": "https://help.dydx.exchange/", - "reduceOnlyLearnmore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", - "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", - "governanceLearnmore": "https://help.dydx.exchange", - "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", - "stakingLearnmore": "https://help.dydx.exchange", - "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnmore": "https://help.dydx.exchange", - "walletLearnmore": "https://www.dydx.academy/video/defi-wallet" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "dYdX v4", - "description": "dYdX v4 App", - "iconUrl": "/logos/dydx-x.png" - }, - "v2": { - "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" - } - }, - "walletSegue": { - "callbackUrl": "/walletsegue" - }, - "images": "/wallets/", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX V4" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 10000000, - "delayBlocks": 900, - "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } - }, - "dydxprotocol-mainnet": { - "name": "v4", - "ethereumChainId": "1", - "dydxChainId": "[mainnet chain id]", - "chainName": "dYdX Chain", - "chainLogo": "/dydx-chain.png", - "squidIntegratorId": "[mainnet squid integrator id]", - "isMainNet": true, - "tokens": { - "comment": "Change according to mainnet release", - "chain": { - "name": "TokenName", - "denom": "tokenDenom", - "decimals": 18, - "image": "/currencies/dydx.png" - }, - "usdc": { - "name": "USDC", - "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom": "uusdc", - "decimals": 6, - "image": "/currencies/usdc.png" - } - }, - "endpoints": { - "indexers": [ - { - "api": "[REST endpoint]", - "socket": "[Websocket endpoint]" - } - ], - "validators": [ - "[Validator endpoint 1", - "[Validator endpoint n]" - ], - "0xsquid": "[0xSquid endpoint for mainnet]", - "nobleValidator": "[noble validator endpoint for mainnet]" - }, - "links": { - "tos": "[HTTP link to TOS]", - "privacy": "[HTTP link to Privacy Policy]", - "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]", - "mintscanBase": "[HTTP link to TOS mintscan base url]", - "feedback": "[HTTP link to feedback form, can be null]", - "blogs": "[HTTP link to blogs, can be null]", - "foundation": "[HTTP link to foundation, can be null]", - "reduceOnlyLearnMore": "[HTTP link to reduce-only learn more, can be null]", - "documentation": "[HTTP link to documentation, can be null]", - "community": "[HTTP link to community, can be null]", - "help": "[HTTP link to help page, can be null]", - "governanceLearnMore": "[HTTP link to governance learn more, can be null]", - "newMarketProposalLearnMore": "[HTTP link to new market proposal learn more, can be null]", - "stakingLearnMore": "[HTTP link to staking learn more, can be null]", - "keplrDashboard": "[HTTP link to keplr dashboard, can be null]", - "accountExportLearnMore": "[HTTP link to account export learn more, can be null]", - "walletLearnMore": "[HTTP link to wallet learn more, can be null]" - }, - "wallets": { - "walletconnect": { - "client": { - "name": "[Name of the app]", - "description": "[Description of the app]", - "iconUrl": "[Relative URL of the icon URL]" - }, - "v2": { - "projectId": "[Project ID]" - } - }, - "walletSegue": { - "callbackUrl": "[Relative callback URL for WalletSegue, should match apple-app-site-association]" - }, - "images": "[Relative URL for wallet images]", - "signTypedDataAction": "dYdX Chain Onboarding", - "signTypedDataDomainName": "dYdX Chain" - }, - "governance": { - "newMarketProposal": { - "initialDepositAmount": 0, - "delayBlocks": 0, - "newMarketsMethodology": "[URL to spreadsheet or document that explains methodology]" - } - }, - "featureFlags": { - "reduceOnlySupported": false - } + "featureFlags": { + "reduceOnlySupported": true } - } + }, + "dydxprotocol-dev-5": { + "name": "v4 Dev 5", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "http://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com", + "socket": "ws://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com" + } + ], + "validators": ["http://18.223.78.50"], + "0xsquid": "https://testnet.api.0xsquid.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true + } + }, + "dydxprotocol-staging": { + "name": "v4 Staging", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4staging.dydx.exchange", + "socket": "wss://indexer.v4staging.dydx.exchange" + } + ], + "faucet": "https://faucet.v4staging.dydx.exchange", + "validators": ["https://validator.v4staging.dydx.exchange"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "help": "https://help.dydx.exchange", + "foundation": "https://www.dydx.foundation", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true + } + }, + "dydxprotocol-staging-forced-update": { + "name": "v4 Staging Forced Update", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4staging.dydx.exchange", + "socket": "wss://indexer.v4staging.dydx.exchange" + } + ], + "faucet": "https://faucet.v4staging.dydx.exchange", + "validators": ["https://validator.v4staging.dydx.exchange"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "apps": { + "ios": { + "minimalVersion": "1.0", + "build": 40000, + "url": "https://apps.apple.com/app/dydx/id1564787350" + } + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true + } + }, + "dydxprotocol-staging-west": { + "name": "v4 Staging West", + "ethereumChainId": "11155111", + "dydxChainId": "dydxprotocol-testnet", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4staging.dydx.exchange", + "socket": "wss://indexer.v4staging.dydx.exchange" + } + ], + "faucet": "https://faucet.v4staging.dydx.exchange", + "validators": ["https://validator-uswest1.v4staging.dydx.exchange"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "help": "https://help.dydx.exchange", + "foundation": "https://www.dydx.foundation", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": true + } + }, + "dydxprotocol-testnet": { + "name": "v4 Public Testnet", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": [ + "https://dydx-testnet-full-rpc.public.blastapi.io/", + "https://dydx-testnet-rpc.polkachu.com/", + "https://dydx-testnet.nodefleet.org", + "https://test-dydx.kingnodes.com", + "https://dydx-rpc.liquify.com/api=8878132/dydx" + ], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-dydx": { + "name": "v4 Public Testnet/dYdX", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://validator.v4testnet.dydx.exchange"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-nodefleet": { + "name": "v4 Public Testnet/nodefleet", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://dydx-testnet.nodefleet.org"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-kingnodes": { + "name": "v4 Public Testnet/KingNodes", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://test-dydx.kingnodes.com"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-liquify": { + "name": "v4 Public Testnet/Liquify", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://dydx-rpc.liquify.com/api=8878132/dydx"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-polkachu": { + "name": "v4 Public Testnet/Polkahcu", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://dydx-testnet-rpc.polkachu.com/"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnMore": "https://help.dydx.exchange", + "stakingLearnMore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-testnet-bware": { + "name": "v4 Public Testnet/BWare", + "ethereumChainId": "11155111", + "dydxChainId": "dydx-testnet-4", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "dYdX-api", + "isMainNet": false, + "tokens": { + "chain": { + "name": "Dv4TNT", + "denom": "adv4tnt", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" + } + ], + "validators": ["https://dydx-testnet-full-rpc.public.blastapi.io/"], + "0xsquid": "https://testnet.api.squidrouter.com", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", + "faucet": "https://faucet.v4testnet.dydx.exchange" + }, + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "statusPage": "https://status.v4testnet.dydx.exchange/", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "documentation": "https://docs.dydx.exchange/", + "community": "https://discord.com/invite/dydx", + "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", + "blogs": "https://www.dydx.foundation/blog", + "foundation": "https://www.dydx.foundation", + "help": "https://help.dydx.exchange/", + "reduceOnlyLearnmore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", + "governanceLearnmore": "https://help.dydx.exchange", + "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals", + "stakingLearnmore": "https://help.dydx.exchange", + "keplrDashboard": "https://testnet.keplr.app/", + "strideZoneApp": "https://testnet.stride.zone/", + "accountExportLearnmore": "https://help.dydx.exchange", + "walletLearnmore": "https://www.dydx.academy/video/defi-wallet" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" + }, + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" + } + }, + "walletSegue": { + "callbackUrl": "/walletsegue" + }, + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX V4" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 10000000, + "delayBlocks": 900, + "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + }, + "dydxprotocol-mainnet": { + "name": "v4", + "ethereumChainId": "1", + "dydxChainId": "[mainnet chain id]", + "chainName": "dYdX Chain", + "chainLogo": "/dydx-chain.png", + "squidIntegratorId": "[mainnet squid integrator id]", + "isMainNet": true, + "tokens": { + "comment": "Change according to mainnet release", + "chain": { + "name": "TokenName", + "denom": "tokenDenom", + "decimals": 18, + "image": "/currencies/dydx.png" + }, + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "decimals": 6, + "image": "/currencies/usdc.png" + } + }, + "endpoints": { + "indexers": [ + { + "api": "[REST endpoint]", + "socket": "[Websocket endpoint]" + } + ], + "validators": ["[Validator endpoint 1", "[Validator endpoint n]"], + "0xsquid": "[0xSquid endpoint for mainnet]", + "nobleValidator": "[noble validator endpoint for mainnet]" + }, + "links": { + "tos": "[HTTP link to TOS]", + "privacy": "[HTTP link to Privacy Policy]", + "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]", + "mintscanBase": "[HTTP link to TOS mintscan base url]", + "feedback": "[HTTP link to feedback form, can be null]", + "blogs": "[HTTP link to blogs, can be null]", + "foundation": "[HTTP link to foundation, can be null]", + "reduceOnlyLearnMore": "[HTTP link to reduce-only learn more, can be null]", + "documentation": "[HTTP link to documentation, can be null]", + "community": "[HTTP link to community, can be null]", + "help": "[HTTP link to help page, can be null]", + "governanceLearnMore": "[HTTP link to governance learn more, can be null]", + "newMarketProposalLearnMore": "[HTTP link to new market proposal learn more, can be null]", + "stakingLearnMore": "[HTTP link to staking learn more, can be null]", + "keplrDashboard": "[HTTP link to keplr dashboard, can be null]", + "strideZoneApp": "[HTTP link to Stride zone app, can be null]", + "accountExportLearnMore": "[HTTP link to account export learn more, can be null]", + "walletLearnMore": "[HTTP link to wallet learn more, can be null]" + }, + "wallets": { + "walletconnect": { + "client": { + "name": "[Name of the app]", + "description": "[Description of the app]", + "iconUrl": "[Relative URL of the icon URL]" + }, + "v2": { + "projectId": "[Project ID]" + } + }, + "walletSegue": { + "callbackUrl": "[Relative callback URL for WalletSegue, should match apple-app-site-association]" + }, + "images": "[Relative URL for wallet images]", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" + }, + "governance": { + "newMarketProposal": { + "initialDepositAmount": 0, + "delayBlocks": 0, + "newMarketsMethodology": "[URL to spreadsheet or document that explains methodology]" + } + }, + "featureFlags": { + "reduceOnlySupported": false + } + } + } } diff --git a/public/third-party/keplr.png b/public/third-party/keplr.png new file mode 100644 index 0000000..3f765e2 Binary files /dev/null and b/public/third-party/keplr.png differ diff --git a/public/third-party/stride.png b/public/third-party/stride.png new file mode 100644 index 0000000..b950ab3 Binary files /dev/null and b/public/third-party/stride.png differ diff --git a/src/App.tsx b/src/App.tsx index a1c0e69..d1093e5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -52,9 +52,9 @@ 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 TokenPage = lazy(() => import('@/pages/token/Token')); const queryClient = new QueryClient(); @@ -87,7 +87,7 @@ const Content = () => { } /> } /> - } /> + } /> {isTablet && ( <> } /> @@ -207,6 +207,7 @@ Styled.Content = styled.div<{ isShowingHeader: boolean; isShowingFooter: boolean Styled.Main = styled.main` ${layoutMixins.contentSectionAttached} + box-shadow: none; grid-area: Main; diff --git a/src/components/ContentSectionHeader.tsx b/src/components/ContentSectionHeader.tsx index 4582cf5..5f1e2db 100644 --- a/src/components/ContentSectionHeader.tsx +++ b/src/components/ContentSectionHeader.tsx @@ -6,6 +6,7 @@ import { layoutMixins } from '@/styles/layoutMixins'; type ElementProps = { title: string; subtitle?: React.ReactNode; + slotLeft?: React.ReactNode; slotRight?: React.ReactNode; }; @@ -16,14 +17,16 @@ type StyleProps = { export const ContentSectionHeader = ({ title, subtitle, + slotLeft, slotRight, className, }: ElementProps & StyleProps) => ( -
+ {slotLeft} + {title &&

{title}

} {subtitle &&

{subtitle}

} -
+ {slotRight}
); @@ -40,9 +43,15 @@ Styled.ContentSectionHeader = styled.header` padding: 1rem var(--header-horizontal-padding); - > div { - ${layoutMixins.column} + @media ${breakpoints.tablet} { + flex-wrap: wrap; + --header-horizontal-padding: 1.25rem; } +`; + +Styled.Header = styled.div` + ${layoutMixins.column} + flex: 1; h3 { color: var(--color-text-2); @@ -54,9 +63,4 @@ Styled.ContentSectionHeader = styled.header` font: var(--font-small-book); margin-top: 0.25rem; } - - @media ${breakpoints.tablet} { - flex-wrap: wrap; - --header-horizontal-padding: 1.25rem; - } `; diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx index 216da7d..81427ad 100644 --- a/src/components/Icon.tsx +++ b/src/components/Icon.tsx @@ -25,6 +25,7 @@ import { CoinsIcon, CommentIcon, CopyIcon, + CurrencySignIcon, DepositIcon, DepthChartIcon, DiscordIcon, @@ -35,6 +36,7 @@ import { FundingChartIcon, GearIcon, GiftboxIcon, + GovernanceIcon, HelpCircleIcon, HideIcon, HistoryIcon, @@ -70,6 +72,7 @@ import { StarIcon, SunIcon, TerminalIcon, + TokenIcon, TradeIcon, TransferIcon, TriangleIcon, @@ -103,6 +106,7 @@ export enum IconName { Coins = 'Coins', Comment = 'Comment', Copy = 'Copy', + CurrencySign = 'CurrencySign', Deposit = 'Deposit', DepthChart = 'DepthChart', Discord = 'Discord', @@ -113,6 +117,7 @@ export enum IconName { FundingChart = 'FundingChart', Gear = 'Gear', Giftbox = 'Giftbox', + Governance = 'Governance', HelpCircle = 'HelpCircle', Hide = 'Hide', History = 'History', @@ -149,6 +154,7 @@ export enum IconName { Sun = 'Sun', Terminal = 'Terminal', TogglesMenu = 'TogglesMenu', + Token = 'Token', Trade = 'Trade', Transfer = 'Transfer', Triangle = 'Triangle', @@ -182,6 +188,7 @@ const icons = { [IconName.Coins]: CoinsIcon, [IconName.Comment]: CommentIcon, [IconName.Copy]: CopyIcon, + [IconName.CurrencySign]: CurrencySignIcon, [IconName.Deposit]: DepositIcon, [IconName.DepthChart]: DepthChartIcon, [IconName.Discord]: DiscordIcon, @@ -192,6 +199,7 @@ const icons = { [IconName.FundingChart]: FundingChartIcon, [IconName.Gear]: GearIcon, [IconName.Giftbox]: GiftboxIcon, + [IconName.Governance]: GovernanceIcon, [IconName.HelpCircle]: HelpCircleIcon, [IconName.Hide]: HideIcon, [IconName.History]: HistoryIcon, @@ -227,6 +235,7 @@ const icons = { [IconName.Sun]: SunIcon, [IconName.Terminal]: TerminalIcon, [IconName.TogglesMenu]: TogglesMenuIcon, + [IconName.Token]: TokenIcon, [IconName.Trade]: TradeIcon, [IconName.Transfer]: TransferIcon, [IconName.Triangle]: TriangleIcon, diff --git a/src/components/WithSidebar.tsx b/src/components/WithSidebar.tsx index 4e4c79a..676c634 100644 --- a/src/components/WithSidebar.tsx +++ b/src/components/WithSidebar.tsx @@ -106,8 +106,6 @@ Styled.Container = styled.div` --stickyArea1-leftGap: var(--border-width); min-height: var(--stickyArea-height); - ${layoutMixins.withOuterAndInnerBorders} - display: grid; grid-template: var(--withSidebar-gridTemplate); `; @@ -120,6 +118,7 @@ Styled.Side = styled.aside` ${layoutMixins.sticky} max-height: var(--stickyArea-height); backdrop-filter: none; + background-color: var(--color-layer-2); ${layoutMixins.stack} `; diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index bad393c..6ed34ec 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -5,6 +5,7 @@ export enum DialogTypes { DisplaySettings = 'DisplaySettings', ExchangeOffline = 'ExchangeOffline', ExternalLink = 'ExternalLink', + ExternalNavStride = 'ExternalNavStride', FillDetails = 'FillDetails', Help = 'Help', ExternalNavKeplr = 'ExternalNavKeplr', diff --git a/src/constants/routes.ts b/src/constants/routes.ts index 5c86896..491cabd 100644 --- a/src/constants/routes.ts +++ b/src/constants/routes.ts @@ -29,6 +29,12 @@ export enum HistoryRoute { Payments = 'payments', } +export enum TokenRoute { + TradingRewards = 'trading-rewards', + StakingRewards = 'staking-rewards', + Governance = 'governance', +} + export enum MobileSettingsRoute { Language = 'language', Notifications = 'notifications', diff --git a/src/hooks/useMarketsData.ts b/src/hooks/useMarketsData.ts index 020db64..b5c6011 100644 --- a/src/hooks/useMarketsData.ts +++ b/src/hooks/useMarketsData.ts @@ -33,7 +33,7 @@ export const useMarketsData = ( return Object.values(allPerpetualMarkets) .filter(isTruthy) .map((marketData) => ({ - asset: allAssets[marketData.assetId], + asset: allAssets[marketData.assetId] ?? {}, tickSizeDecimals: marketData.configs?.tickSizeDecimals, ...marketData, ...marketData.perpetual, @@ -46,9 +46,10 @@ export const useMarketsData = ( if (searchFilter) { return filtered.filter( - ({ asset }) => + ({ asset, id }) => asset?.name?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) || - asset?.id?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) + asset?.id?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) || + id?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) ); } return filtered; diff --git a/src/hooks/useURLConfigs.ts b/src/hooks/useURLConfigs.ts index 570fdff..67cfc1d 100644 --- a/src/hooks/useURLConfigs.ts +++ b/src/hooks/useURLConfigs.ts @@ -21,6 +21,7 @@ export interface LinksConfigs { newMarketProposalLearnMore: string; stakingLearnMore?: string; keplrDashboard?: string; + strideZoneApp?: string; accountExportLearnMore?: string; walletLearnMore?: string; } @@ -46,6 +47,7 @@ export const useURLConfigs = (): LinksConfigs => { newMarketProposalLearnMore: linksConfigs.newMarketProposalLearnMore || FALLBACK_URL, stakingLearnMore: linksConfigs.stakingLearnMore || FALLBACK_URL, keplrDashboard: linksConfigs.keplrDashboard || FALLBACK_URL, + strideZoneApp: linksConfigs.strideZoneApp || FALLBACK_URL, accountExportLearnMore: linksConfigs.accountExportLearnMore || FALLBACK_URL, walletLearnMore: linksConfigs.walletLearnMore || FALLBACK_URL, }; diff --git a/src/icons/chaos-labs.tsx b/src/icons/chaos-labs.tsx index 8779b79..cf42b6d 100644 --- a/src/icons/chaos-labs.tsx +++ b/src/icons/chaos-labs.tsx @@ -36,8 +36,8 @@ const ChaosLabsIcon: React.FC = () => { fill={fills[1]} /> @@ -50,8 +50,8 @@ const ChaosLabsIcon: React.FC = () => { fill={fills[1]} /> diff --git a/src/icons/currency-sign.svg b/src/icons/currency-sign.svg new file mode 100644 index 0000000..f8b4440 --- /dev/null +++ b/src/icons/currency-sign.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/icons/governance.svg b/src/icons/governance.svg new file mode 100644 index 0000000..4c17dfe --- /dev/null +++ b/src/icons/governance.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/icons/index.ts b/src/icons/index.ts index 15b17c1..836b130 100644 --- a/src/icons/index.ts +++ b/src/icons/index.ts @@ -1,4 +1,3 @@ -import ChaosLabsIcon from './chaos-labs'; export { default as AddressConnectorIcon } from './address-connector.svg'; export { default as ArrowIcon } from './arrow.svg'; export { default as Bar3Icon } from './bar3.svg'; @@ -20,6 +19,7 @@ export { default as CoinMarketCapIcon } from './logos/coinmarketcap.svg'; export { default as CoinsIcon } from './coins.svg'; export { default as CommentIcon } from './comment.svg'; export { default as CopyIcon } from './copy.svg'; +export { default as CurrencySignIcon } from './currency-sign.svg'; export { default as DepositIcon } from './deposit.svg'; export { default as DepthChartIcon } from './depth-chart.svg'; export { default as DiscordIcon } from './discord.svg'; @@ -29,6 +29,7 @@ export { default as FileIcon } from './file.svg'; export { default as FundingChartIcon } from './funding-chart.svg'; export { default as GearIcon } from './gear.svg'; export { default as GiftboxIcon } from './giftbox.svg'; +export { default as GovernanceIcon } from './governance.svg'; export { default as HelpCircleIcon } from './help-circle.svg'; export { default as HideIcon } from './hide.svg'; export { default as HistoryIcon } from './history.svg'; @@ -60,6 +61,7 @@ export { default as StarIcon } from './star.svg'; export { default as SunIcon } from './sun.svg'; export { default as TerminalIcon } from './terminal.svg'; export { default as TogglesMenuIcon } from './toggles-menu.svg'; +export { default as TokenIcon } from './token.svg'; export { default as TradeIcon } from './trade.svg'; export { default as TransferIcon } from './transfer.svg'; export { default as TriangleIcon } from './triangle.svg'; diff --git a/src/icons/token.svg b/src/icons/token.svg new file mode 100644 index 0000000..10197b1 --- /dev/null +++ b/src/icons/token.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/layout/DialogManager.tsx b/src/layout/DialogManager.tsx index 04406cc..4c5ec7e 100644 --- a/src/layout/DialogManager.tsx +++ b/src/layout/DialogManager.tsx @@ -30,6 +30,7 @@ import { OrderDetailsDialog } from '@/views/dialogs/DetailsDialog/OrderDetailsDi import { FillDetailsDialog } from '@/views/dialogs/DetailsDialog/FillDetailsDialog'; import { NewMarketMessageDetailsDialog } from '@/views/dialogs/NewMarketMessageDetailsDialog'; import { NewMarketAgreementDialog } from '@/views/dialogs/NewMarketAgreementDialog'; +import { ExternalNavStrideDialog } from '@/views/dialogs/ExternalNavStrideDialog'; export const DialogManager = () => { const dispatch = useDispatch(); @@ -59,6 +60,7 @@ export const DialogManager = () => { [DialogTypes.Help]: , [DialogTypes.ExternalNavKeplr]: , [DialogTypes.ExternalLink]: , + [DialogTypes.ExternalNavStride]: , [DialogTypes.MnemonicExport]: , [DialogTypes.MobileSignIn]: , [DialogTypes.Onboarding]: , diff --git a/src/pages/Profile.tsx b/src/pages/Profile.tsx index 1324824..0d5253c 100644 --- a/src/pages/Profile.tsx +++ b/src/pages/Profile.tsx @@ -4,9 +4,15 @@ import { useDispatch, useSelector } from 'react-redux'; import { useEnsName } from 'wagmi'; import { useNavigate } from 'react-router-dom'; -import { ButtonSize } from '@/constants/buttons'; import { TransferType } from '@/constants/abacus'; - +import { OnboardingState } from '@/constants/account'; +import { ButtonSize } from '@/constants/buttons'; +import { DialogTypes } from '@/constants/dialogs'; +import { STRING_KEYS } from '@/constants/localization'; +import { AppRoute, PortfolioRoute, HistoryRoute } from '@/constants/routes'; +import { wallets } from '@/constants/wallets'; +import { useAccounts, useStringGetter, useTokenConfigs } from '@/hooks'; +import { breakpoints } from '@/styles'; import { layoutMixins } from '@/styles/layoutMixins'; import { Details } from '@/components/Details'; @@ -16,13 +22,6 @@ import { IconButton, type IconButtonProps } from '@/components/IconButton'; import { Panel } from '@/components/Panel'; import { Toolbar } from '@/components/Toolbar'; -import { OnboardingState } from '@/constants/account'; -import { DialogTypes } from '@/constants/dialogs'; -import { STRING_KEYS } from '@/constants/localization'; -import { AppRoute, PortfolioRoute, HistoryRoute } from '@/constants/routes'; -import { wallets } from '@/constants/wallets'; -import { useAccounts, useStringGetter, useTokenConfigs } from '@/hooks'; - import { getHistoricalTradingRewardsForCurrentWeek, getOnboardingState, @@ -32,10 +31,12 @@ import { openDialog } from '@/state/dialogs'; import { isTruthy } from '@/lib/isTruthy'; import { truncateAddress } from '@/lib/wallet'; -import { DYDXBalancePanel } from './rewards/DYDXBalancePanel'; -import { MigratePanel } from './rewards/MigratePanel'; -import { GovernancePanel } from './rewards/GovernancePanel'; -import { StakingPanel } from './rewards/StakingPanel'; +import { DYDXBalancePanel } from './token/rewards/DYDXBalancePanel'; +import { MigratePanel } from './token/rewards/MigratePanel'; +import { GovernancePanel } from './token/rewards/GovernancePanel'; +import { StakingPanel } from './token/staking/StakingPanel'; +import { StrideStakingPanel } from './token/staking/StrideStakingPanel'; +import { NewMarketsPanel } from './token/rewards/NewMarketsPanel'; const ENS_CHAIN_ID = 1; // Ethereum @@ -236,7 +237,9 @@ const Profile = () => { + + ); }; @@ -249,11 +252,12 @@ Styled.MobileProfileLayout = styled.div` ${layoutMixins.contentContainerPage} display: grid; - grid-template-columns: 1fr 1fr; gap: 1rem; padding: 1.25rem 0.9rem; max-width: 100vw; + grid-template-columns: 1fr 1fr; + grid-template-areas: 'header header' 'actions actions' @@ -262,8 +266,23 @@ Styled.MobileProfileLayout = styled.div` 'balance balance' 'rewards fees' 'history history' - 'governance governance' - 'staking staking'; + 'governance newMarkets' + 'keplr stride'; + + @media ${breakpoints.mobile} { + grid-template-areas: + 'header header' + 'actions actions' + 'settings help' + 'migrate migrate' + 'balance balance' + 'rewards fees' + 'history history' + 'governance governance' + 'newMarkets newMarkets' + 'keplr keplr' + 'stride stride'; + } `; Styled.Header = styled.header` @@ -431,5 +450,13 @@ Styled.GovernancePanel = styled(GovernancePanel)` `; Styled.StakingPanel = styled(StakingPanel)` - grid-area: staking; + grid-area: keplr; +`; + +Styled.NewMarketsPanel = styled(NewMarketsPanel)` + grid-area: newMarkets; +`; + +Styled.StrideStakingPanel = styled(StrideStakingPanel)` + grid-area: stride; `; diff --git a/src/pages/portfolio/Portfolio.tsx b/src/pages/portfolio/Portfolio.tsx index f3652b0..58aaeff 100644 --- a/src/pages/portfolio/Portfolio.tsx +++ b/src/pages/portfolio/Portfolio.tsx @@ -45,7 +45,8 @@ export default () => { const { freeCollateral } = useSelector(getSubaccount, shallowEqual) || {}; const { nativeTokenBalance } = useAccountBalance(); - const { numTotalPositions, numTotalOpenOrders } = useSelector(getTradeInfoNumbers, shallowEqual) || {}; + const { numTotalPositions, numTotalOpenOrders } = + useSelector(getTradeInfoNumbers, shallowEqual) || {}; const numPositions = shortenNumberForDisplay(numTotalPositions); const numOrders = shortenNumberForDisplay(numTotalOpenOrders); @@ -119,30 +120,43 @@ export default () => { items: [ { value: PortfolioRoute.Overview, - slotBefore: , + slotBefore: ( + + + + ), label: stringGetter({ key: STRING_KEYS.OVERVIEW }), href: PortfolioRoute.Overview, }, { value: PortfolioRoute.Positions, - slotBefore: , + slotBefore: ( + + + + ), label: ( <> {stringGetter({ key: STRING_KEYS.POSITIONS })} - {numPositions > 0 && ( - {numPositions} - )} + {numPositions && + (typeof numPositions === 'string' || numPositions > 0) && ( + {numPositions} + )} ), href: PortfolioRoute.Positions, }, { value: PortfolioRoute.Orders, - slotBefore: , + slotBefore: ( + + + + ), label: ( <> {stringGetter({ key: STRING_KEYS.ORDERS })} - {numOrders > 0 && ( + {numOrders && (typeof numOrders === 'string' || numOrders > 0) && ( {numOrders} )} @@ -151,13 +165,21 @@ export default () => { }, { value: PortfolioRoute.Fees, - slotBefore: , + slotBefore: ( + + + + ), label: stringGetter({ key: STRING_KEYS.FEES }), href: PortfolioRoute.Fees, }, { value: PortfolioRoute.History, - slotBefore: , + slotBefore: ( + + + + ), label: stringGetter({ key: STRING_KEYS.HISTORY }), href: PortfolioRoute.History, }, @@ -232,16 +254,14 @@ Styled.NavigationMenu = styled(NavigationMenu)` padding-top: 0; `; -Styled.Icon = styled(Icon)` - --icon-backgroundColor: var(--color-layer-4); - - width: 1em; - height: 1em; - - margin-left: -0.25em; - - box-sizing: content-box; - background-color: var(--icon-backgroundColor); +Styled.IconContainer = styled.div` + width: 1.5rem; + height: 1.5rem; + font-size: 0.75rem; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color-layer-4); border-radius: 50%; - padding: 0.25em; + margin-left: -0.25rem; `; diff --git a/src/pages/token/Governance.tsx b/src/pages/token/Governance.tsx new file mode 100644 index 0000000..1c0fe1f --- /dev/null +++ b/src/pages/token/Governance.tsx @@ -0,0 +1,60 @@ +import styled, { AnyStyledComponent } from 'styled-components'; + +import { STRING_KEYS } from '@/constants/localization'; +import { useStringGetter } from '@/hooks'; +import { breakpoints } from '@/styles'; +import { layoutMixins } from '@/styles/layoutMixins'; + +import { DetachedSection } from '@/components/ContentSection'; +import { ContentSectionHeader } from '@/components/ContentSectionHeader'; + +import { GovernancePanel } from './rewards/GovernancePanel'; +import { NewMarketsPanel } from './rewards/NewMarketsPanel'; + +export default () => { + const stringGetter = useStringGetter(); + + return ( + + + + + + + + + + + + + ); +}; + +const Styled: Record = {}; + +Styled.HeaderSection = styled.section` + ${layoutMixins.contentSectionDetached} + + @media ${breakpoints.tablet} { + ${layoutMixins.flexColumn} + gap: 1rem; + + margin-bottom: 0.5rem; + } +`; + +Styled.ContentWrapper = styled.div` + ${layoutMixins.flexColumn} + gap: 1.5rem; + max-width: 80rem; + padding: 0 1rem; +`; + +Styled.Row = styled.div` + gap: 1rem; + display: grid; + grid-template-columns: repeat(3, 1fr); +`; diff --git a/src/pages/token/Token.tsx b/src/pages/token/Token.tsx new file mode 100644 index 0000000..38cdc88 --- /dev/null +++ b/src/pages/token/Token.tsx @@ -0,0 +1,126 @@ +import { Suspense, lazy } from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; +import styled, { AnyStyledComponent } from 'styled-components'; + +import { STRING_KEYS } from '@/constants/localization'; +import { TokenRoute } from '@/constants/routes'; +import { useBreakpoints, useStringGetter } from '@/hooks'; +import { layoutMixins } from '@/styles/layoutMixins'; + +import { Icon, IconName } from '@/components/Icon'; +import { LoadingSpace } from '@/components/Loading/LoadingSpinner'; +import { NavigationMenu } from '@/components/NavigationMenu'; +import { WithSidebar } from '@/components/WithSidebar'; + +const RewardsPage = lazy(() => import('./rewards/RewardsPage')); +const StakingPage = lazy(() => import('./staking/StakingPage')); +const GovernancePage = lazy(() => import('./Governance')); + +export default () => { + const { isTablet } = useBreakpoints(); + const stringGetter = useStringGetter(); + + const routesComponent = ( + }> + + } /> + } /> + } /> + } /> + + + ); + + return ( + + + + + ), + label: stringGetter({ key: STRING_KEYS.TRADING_REWARDS }), + href: TokenRoute.TradingRewards, + }, + { + value: TokenRoute.StakingRewards, + slotBefore: ( + + + + ), + label: 'Staking Rewards', // stringGetter({ key: STRING_KEYS.STAKING_REWARDS }), + href: TokenRoute.StakingRewards, + tag: stringGetter({ key: STRING_KEYS.NEW }), + }, + { + value: TokenRoute.Governance, + slotBefore: ( + + + + ), + label: stringGetter({ key: STRING_KEYS.GOVERNANCE }), + href: TokenRoute.Governance, + }, + ], + }, + ]} + /> + + ) + } + > + {routesComponent} + + ); +}; + +const Styled: Record = {}; + +Styled.SideBar = styled.div` + ${layoutMixins.flexColumn} + justify-content: space-between; + + height: 100%; +`; + +Styled.Footer = styled.div` + ${layoutMixins.row} + flex-wrap: wrap; + + padding: 1rem; + + gap: 0.5rem; + + > button { + flex-grow: 1; + } +`; + +Styled.NavigationMenu = styled(NavigationMenu)` + padding: 0.5rem; + padding-top: 0; +`; + +Styled.IconContainer = styled.div` + width: 1.5rem; + height: 1.5rem; + font-size: 0.75rem; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color-layer-4); + border-radius: 50%; + margin-left: -0.25rem; +`; diff --git a/src/pages/rewards/DYDXBalancePanel.tsx b/src/pages/token/rewards/DYDXBalancePanel.tsx similarity index 100% rename from src/pages/rewards/DYDXBalancePanel.tsx rename to src/pages/token/rewards/DYDXBalancePanel.tsx diff --git a/src/pages/rewards/GovernancePanel.tsx b/src/pages/token/rewards/GovernancePanel.tsx similarity index 94% rename from src/pages/rewards/GovernancePanel.tsx rename to src/pages/token/rewards/GovernancePanel.tsx index 2cfde09..6796a6a 100644 --- a/src/pages/rewards/GovernancePanel.tsx +++ b/src/pages/token/rewards/GovernancePanel.tsx @@ -14,13 +14,14 @@ import { Link } from '@/components/Link'; import { openDialog } from '@/state/dialogs'; -export const GovernancePanel = () => { +export const GovernancePanel = ({ className }: { className?: string }) => { const stringGetter = useStringGetter(); const dispatch = useDispatch(); const { governanceLearnMore } = useURLConfigs(); return ( {stringGetter({ key: STRING_KEYS.GOVERNANCE })} } @@ -72,4 +73,4 @@ Styled.Title = styled.h3` font: var(--font-medium-book); color: var(--color-text-2); margin-bottom: -1rem; -`; \ No newline at end of file +`; diff --git a/src/pages/rewards/LaunchIncentivesPanel.tsx b/src/pages/token/rewards/LaunchIncentivesPanel.tsx similarity index 96% rename from src/pages/rewards/LaunchIncentivesPanel.tsx rename to src/pages/token/rewards/LaunchIncentivesPanel.tsx index c5283a7..3cb7334 100644 --- a/src/pages/rewards/LaunchIncentivesPanel.tsx +++ b/src/pages/token/rewards/LaunchIncentivesPanel.tsx @@ -28,7 +28,7 @@ import { log } from '@/lib/telemetry'; const SEASON_NUMBER = 2; -export const LaunchIncentivesPanel = () => { +export const LaunchIncentivesPanel = ({ className }: { className?: string }) => { const { isNotTablet } = useBreakpoints(); const dispatch = useDispatch(); @@ -37,11 +37,15 @@ export const LaunchIncentivesPanel = () => { }, []); return isNotTablet ? ( - } slotRight={}> + } + slotRight={} + > ) : ( - + diff --git a/src/pages/rewards/MigratePanel.tsx b/src/pages/token/rewards/MigratePanel.tsx similarity index 100% rename from src/pages/rewards/MigratePanel.tsx rename to src/pages/token/rewards/MigratePanel.tsx diff --git a/src/pages/rewards/NewMarketsPanel.tsx b/src/pages/token/rewards/NewMarketsPanel.tsx similarity index 94% rename from src/pages/rewards/NewMarketsPanel.tsx rename to src/pages/token/rewards/NewMarketsPanel.tsx index a88d80b..26f0c2f 100644 --- a/src/pages/rewards/NewMarketsPanel.tsx +++ b/src/pages/token/rewards/NewMarketsPanel.tsx @@ -19,21 +19,22 @@ import { Tag } from '@/components/Tag'; import { MustBigNumber } from '@/lib/numbers'; import { layoutMixins } from '@/styles/layoutMixins'; -export const NewMarketsPanel = () => { +export const NewMarketsPanel = ({ className }: { className?: string }) => { const stringGetter = useStringGetter(); const navigate = useNavigate(); const { hasPotentialMarketsData } = usePotentialMarkets(); const { chainTokenDecimals, chainTokenLabel } = useTokenConfigs(); const { newMarketProposal } = useGovernanceVariables(); + const initialDepositAmountDecimals = isMainnet ? 0 : 11; const initialDepositAmountBN = MustBigNumber(newMarketProposal.initialDepositAmount).div( Number(`1e${chainTokenDecimals}`) ); - const initialDepositAmountDecimals = isMainnet ? 0 : chainTokenDecimals; if (!hasPotentialMarketsData) return null; return ( {stringGetter({ key: STRING_KEYS.ADD_A_MARKET })} diff --git a/src/pages/rewards/RewardHistoryPanel.tsx b/src/pages/token/rewards/RewardHistoryPanel.tsx similarity index 100% rename from src/pages/rewards/RewardHistoryPanel.tsx rename to src/pages/token/rewards/RewardHistoryPanel.tsx diff --git a/src/pages/rewards/RewardsHelpPanel.tsx b/src/pages/token/rewards/RewardsHelpPanel.tsx similarity index 100% rename from src/pages/rewards/RewardsHelpPanel.tsx rename to src/pages/token/rewards/RewardsHelpPanel.tsx diff --git a/src/pages/rewards/RewardsPage.tsx b/src/pages/token/rewards/RewardsPage.tsx similarity index 58% rename from src/pages/rewards/RewardsPage.tsx rename to src/pages/token/rewards/RewardsPage.tsx index c68df83..b550f36 100644 --- a/src/pages/rewards/RewardsPage.tsx +++ b/src/pages/token/rewards/RewardsPage.tsx @@ -10,6 +10,8 @@ import { breakpoints } from '@/styles'; import { layoutMixins } from '@/styles/layoutMixins'; import { BackButton } from '@/components/BackButton'; +import { DetachedSection } from '@/components/ContentSection'; +import { ContentSectionHeader } from '@/components/ContentSectionHeader'; import { testFlags } from '@/lib/testFlags'; @@ -19,9 +21,6 @@ import { MigratePanel } from './MigratePanel'; import { RewardsHelpPanel } from './RewardsHelpPanel'; import { TradingRewardsSummaryPanel } from './TradingRewardsSummaryPanel'; import { RewardHistoryPanel } from './RewardHistoryPanel'; -import { GovernancePanel } from './GovernancePanel'; -import { StakingPanel } from './StakingPanel'; -import { NewMarketsPanel } from './NewMarketsPanel'; const RewardsPage = () => { const stringGetter = useStringGetter(); @@ -29,46 +28,45 @@ const RewardsPage = () => { const navigate = useNavigate(); return ( - +
{isTablet && ( - - navigate(AppRoute.Profile)} /> - {stringGetter({ key: STRING_KEYS.TRADING_REWARDS })} - + navigate(AppRoute.Profile)} />} + /> )} - - {import.meta.env.VITE_V3_TOKEN_ADDRESS && isNotTablet && } + + + {import.meta.env.VITE_V3_TOKEN_ADDRESS && isNotTablet && } - {isTablet ? ( - - ) : ( - <> + {isTablet ? ( - - - )} + ) : ( + <> + + + + )} - {testFlags.showTradingRewards && ( - - - {isTablet && } - - - )} + {testFlags.showTradingRewards && ( + + + {isTablet && } + + + )} - {isNotTablet && ( - - - - - - - )} - - + {isNotTablet && ( + + + + )} + + +
); }; @@ -76,27 +74,6 @@ export default RewardsPage; const Styled: Record = {}; -Styled.Page = styled.div` - ${layoutMixins.contentContainerPage} - padding: 2rem; - align-items: center; - - > * { - --content-max-width: 80rem; - max-width: min(calc(100vw - 4rem), var(--content-max-width)); - } - - @media ${breakpoints.tablet} { - --stickyArea-topHeight: var(--page-header-height-mobile); - padding: 0 1rem 1rem; - - > * { - max-width: calc(100vw - 2rem); - width: 100%; - } - } -`; - Styled.MobileHeader = styled.header` ${layoutMixins.contentSectionDetachedScrollable} ${layoutMixins.stickyHeader} @@ -113,6 +90,7 @@ Styled.GridLayout = styled.div<{ showTradingRewards?: boolean; showMigratePanel? display: grid; grid-template-columns: 2fr 1fr; gap: var(--gap); + max-width: 80rem; > * { gap: var(--gap); @@ -123,24 +101,39 @@ Styled.GridLayout = styled.div<{ showTradingRewards?: boolean; showMigratePanel? ? css` grid-template-areas: 'migrate migrate' - 'incentives balance' + 'incentives incentives' + 'balance balance' 'rewards other'; ` : showTradingRewards ? css` - grid-template-areas: 'incentives balance' 'rewards other'; + grid-template-areas: + 'incentives balance' + 'rewards other'; ` : showMigratePanel ? css` - grid-template-areas: 'migrate migrate' 'incentives balance' 'other other'; + grid-template-areas: + 'migrate migrate' + 'incentives incentives' + 'balance balance' + 'other other'; ` : css` - grid-template-areas: 'incentives balance' 'other other'; + grid-template-areas: + 'incentives balance' + 'other other'; `}; + @media ${breakpoints.notTablet} { + padding: 1rem; + } + @media ${breakpoints.tablet} { --gap: 1rem; grid-template-columns: 1fr; + width: calc(100vw - 2rem); + margin: 0 auto; ${({ showTradingRewards }) => showTradingRewards @@ -187,13 +180,3 @@ Styled.OtherColumn = styled.div<{ showTradingRewards?: boolean }>` } `} `; - -Styled.RewardHistoryHeader = styled.div` - h3 { - font: var(--font-medium-book); - color: var(--color-text-2); - } - - padding: 1rem 1.5rem 0; - margin-bottom: -0.5rem; -`; diff --git a/src/pages/rewards/TradingRewardsSummaryPanel.tsx b/src/pages/token/rewards/TradingRewardsSummaryPanel.tsx similarity index 96% rename from src/pages/rewards/TradingRewardsSummaryPanel.tsx rename to src/pages/token/rewards/TradingRewardsSummaryPanel.tsx index 13871bf..c76940a 100644 --- a/src/pages/rewards/TradingRewardsSummaryPanel.tsx +++ b/src/pages/token/rewards/TradingRewardsSummaryPanel.tsx @@ -3,8 +3,8 @@ import styled, { AnyStyledComponent } from 'styled-components'; import { shallowEqual, useSelector } from 'react-redux'; import { STRING_KEYS } from '@/constants/localization'; -import { layoutMixins } from '@/styles/layoutMixins'; import { useStringGetter, useTokenConfigs } from '@/hooks'; +import { layoutMixins } from '@/styles/layoutMixins'; import { AssetIcon } from '@/components/AssetIcon'; import { Details } from '@/components/Details'; @@ -18,7 +18,10 @@ import abacusStateManager from '@/lib/abacus'; export const TradingRewardsSummaryPanel = () => { const stringGetter = useStringGetter(); const { chainTokenLabel } = useTokenConfigs(); - const currentWeekTradingReward = useSelector(getHistoricalTradingRewardsForCurrentWeek, shallowEqual); + const currentWeekTradingReward = useSelector( + getHistoricalTradingRewardsForCurrentWeek, + shallowEqual + ); useEffect(() => { abacusStateManager.refreshHistoricalTradingRewards(); diff --git a/src/pages/token/staking/StakingPage.tsx b/src/pages/token/staking/StakingPage.tsx new file mode 100644 index 0000000..ff95117 --- /dev/null +++ b/src/pages/token/staking/StakingPage.tsx @@ -0,0 +1,67 @@ +import styled, { AnyStyledComponent } from 'styled-components'; + +import { breakpoints } from '@/styles'; +import { layoutMixins } from '@/styles/layoutMixins'; + +import { DetachedSection } from '@/components/ContentSection'; +import { ContentSectionHeader } from '@/components/ContentSectionHeader'; + +import { StakingPanel } from './StakingPanel'; +import { StrideStakingPanel } from './StrideStakingPanel'; +import { DYDXBalancePanel } from '../rewards/DYDXBalancePanel'; + +export default () => { + return ( + + + + + + + + + + + + + + + + ); +}; + +const Styled: Record = {}; + +Styled.HeaderSection = styled.section` + ${layoutMixins.contentSectionDetached} + + @media ${breakpoints.tablet} { + ${layoutMixins.flexColumn} + gap: 1rem; + + margin-bottom: 0.5rem; + } +`; + +Styled.ContentWrapper = styled.div` + ${layoutMixins.flexColumn} + gap: 1.5rem; + max-width: 80rem; + padding: 0 1rem; +`; + +Styled.Row = styled.div` + gap: 1rem; + display: grid; + grid-template-columns: 2fr 1fr; +`; + +Styled.InnerRow = styled.div` + gap: 1rem; + display: grid; + grid-template-columns: 1fr 1fr; + height: fit-content; +`; diff --git a/src/pages/rewards/StakingPanel.tsx b/src/pages/token/staking/StakingPanel.tsx similarity index 67% rename from src/pages/rewards/StakingPanel.tsx rename to src/pages/token/staking/StakingPanel.tsx index 9d2a1a6..4636a9e 100644 --- a/src/pages/rewards/StakingPanel.tsx +++ b/src/pages/token/staking/StakingPanel.tsx @@ -1,7 +1,6 @@ import styled, { AnyStyledComponent } from 'styled-components'; import { useDispatch } from 'react-redux'; -import { ButtonAction, ButtonSize } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; import { DialogTypes } from '@/constants/dialogs'; @@ -14,22 +13,19 @@ import { Link } from '@/components/Link'; import { openDialog } from '@/state/dialogs'; -export const StakingPanel = () => { +export const StakingPanel = ({ className }: { className?: string }) => { const stringGetter = useStringGetter(); const dispatch = useDispatch(); const { stakingLearnMore } = useURLConfigs(); return ( - {stringGetter({ key: STRING_KEYS.STAKING })}} - slotRight={ - - - + + Stake with Keplr + + } onClick={() => dispatch(openDialog({ type: DialogTypes.ExternalNavKeplr }))} > @@ -39,12 +35,40 @@ export const StakingPanel = () => { {stringGetter({ key: STRING_KEYS.LEARN_MORE })} → - +
); }; const Styled: Record = {}; +Styled.Panel = styled(Panel)` + align-items: start; + + header { + justify-content: unset; + padding-bottom: 0; + } +`; + +Styled.Header = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; +`; + +Styled.Title = styled.h3` + font: var(--font-medium-book); + color: var(--color-text-2); +`; + +Styled.Img = styled.img` + width: 2rem; + height: 2rem; + margin-left: 0.5rem; +`; + Styled.Description = styled.div` color: var(--color-text-0); --link-color: var(--color-text-1); @@ -61,13 +85,3 @@ Styled.IconButton = styled(IconButton)` color: var(--color-text-0); --color-border: var(--color-layer-6); `; - -Styled.Arrow = styled.div` - padding-right: 1.5rem; -`; - -Styled.Title = styled.h3` - font: var(--font-medium-book); - color: var(--color-text-2); - margin-bottom: -1rem; -`; diff --git a/src/pages/token/staking/StrideStakingPanel.tsx b/src/pages/token/staking/StrideStakingPanel.tsx new file mode 100644 index 0000000..4eecd8e --- /dev/null +++ b/src/pages/token/staking/StrideStakingPanel.tsx @@ -0,0 +1,94 @@ +import styled, { AnyStyledComponent } from 'styled-components'; +import { useDispatch } from 'react-redux'; + +import { STRING_KEYS } from '@/constants/localization'; +import { DialogTypes } from '@/constants/dialogs'; +import { useStringGetter, useTokenConfigs, useURLConfigs } from '@/hooks'; + +import { IconButton } from '@/components/IconButton'; +import { Link } from '@/components/Link'; +import { Panel } from '@/components/Panel'; +import { Tag } from '@/components/Tag'; + +import { openDialog } from '@/state/dialogs'; + +export const StrideStakingPanel = ({ className }: { className?: string }) => { + const stringGetter = useStringGetter(); + const dispatch = useDispatch(); + const { stakingLearnMore } = useURLConfigs(); + const { chainTokenLabel } = useTokenConfigs(); + + return ( + + + Liquid Stake with Stride + {stringGetter({ key: STRING_KEYS.NEW })} + + + + } + onClick={() => dispatch(openDialog({ type: DialogTypes.ExternalNavStride }))} + > + + {`Stake your ${chainTokenLabel} tokens for st${chainTokenLabel} which you can deploy around the ecosystem.`} + e.stopPropagation()}> + {stringGetter({ key: STRING_KEYS.LEARN_MORE })} → + + + + ); +}; + +const Styled: Record = {}; + +Styled.Panel = styled(Panel)` + align-items: start; + + header { + justify-content: unset; + padding-bottom: 0; + } +`; + +Styled.Header = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; +`; + +Styled.Title = styled.h3` + font: var(--font-medium-book); + color: var(--color-text-2); + + display: flex; + align-items: center; + gap: 0.5ch; +`; + +Styled.Img = styled.img` + width: 2rem; + height: 2rem; + margin-left: 0.5rem; +`; + +Styled.Description = styled.div` + color: var(--color-text-0); + --link-color: var(--color-text-1); + + a { + display: inline; + ::before { + content: ' '; + } + } +`; + +Styled.IconButton = styled(IconButton)` + color: var(--color-text-0); + --color-border: var(--color-layer-6); +`; diff --git a/src/views/dialogs/ExternalLinkDialog.tsx b/src/views/dialogs/ExternalLinkDialog.tsx index ae2bdb8..e7d8648 100644 --- a/src/views/dialogs/ExternalLinkDialog.tsx +++ b/src/views/dialogs/ExternalLinkDialog.tsx @@ -1,3 +1,4 @@ +import type { ReactNode } from 'react'; import styled, { type AnyStyledComponent } from 'styled-components'; import { ButtonAction, ButtonType } from '@/constants/buttons'; @@ -10,18 +11,26 @@ import { Dialog } from '@/components/Dialog'; import { layoutMixins } from '@/styles/layoutMixins'; type ElementProps = { + buttonText?: ReactNode; link: string; linkDescription?: string; + title?: ReactNode; setIsOpen: (open: boolean) => void; }; -export const ExternalLinkDialog = ({ setIsOpen, link, linkDescription }: ElementProps) => { +export const ExternalLinkDialog = ({ + setIsOpen, + buttonText, + link, + linkDescription, + title, +}: ElementProps) => { const stringGetter = useStringGetter(); return (

{stringGetter({ key: STRING_KEYS.LEAVING_WEBSITE_DISCLAIMER })}.

diff --git a/src/views/dialogs/ExternalNavStrideDialog.tsx b/src/views/dialogs/ExternalNavStrideDialog.tsx new file mode 100644 index 0000000..cb5c584 --- /dev/null +++ b/src/views/dialogs/ExternalNavStrideDialog.tsx @@ -0,0 +1,137 @@ +import { useCallback } from 'react'; +import styled, { type AnyStyledComponent } from 'styled-components'; +import { useDispatch } from 'react-redux'; + +import { ButtonAction, ButtonSize, ButtonType } from '@/constants/buttons'; +import { DialogTypes } from '@/constants/dialogs'; +import { STRING_KEYS } from '@/constants/localization'; +import { useBreakpoints, useStringGetter, useURLConfigs } from '@/hooks'; +import { layoutMixins } from '@/styles/layoutMixins'; + +import { Button } from '@/components/Button'; +import { Dialog, DialogPlacement } from '@/components/Dialog'; +import { Icon, IconName } from '@/components/Icon'; +import { IconButton } from '@/components/IconButton'; + +import { closeDialog, openDialog } from '@/state/dialogs'; + +type ElementProps = { + setIsOpen: (open: boolean) => void; +}; + +export const ExternalNavStrideDialog = ({ setIsOpen }: ElementProps) => { + const stringGetter = useStringGetter(); + const { strideZoneApp, accountExportLearnMore } = useURLConfigs(); + const dispatch = useDispatch(); + const { isTablet } = useBreakpoints(); + + const openExternalNavDialog = useCallback(() => { + dispatch(closeDialog()); + dispatch( + openDialog({ + type: DialogTypes.ExternalLink, + dialogProps: { + buttonText: ( + + Liquid Stake on Stride + + ), + link: strideZoneApp, + title: 'Liquid staking and leaving website', + }, + }) + ); + }, [dispatch]); + + return ( + + + + + {stringGetter({ key: STRING_KEYS.YES })}, Navigate to Stride Zone. + + + + + + + + {stringGetter({ + key: STRING_KEYS.LEARN_TO_EXPORT, + params: { + STRONG_NO: {stringGetter({ key: STRING_KEYS.NO })}, + }, + })} + + + + + + + ); +}; + +const Styled: Record = {}; + +Styled.TextToggle = styled.div` + ${layoutMixins.stickyFooter} + color: var(--color-accent); + cursor: pointer; + + margin-top: auto; + + &:hover { + text-decoration: underline; + } +`; + +Styled.Content = styled.div` + ${layoutMixins.stickyArea0} + --stickyArea0-bottomHeight: 2rem; + --stickyArea0-bottomGap: 1rem; + --stickyArea0-totalInsetBottom: 0.5rem; + + ${layoutMixins.flexColumn} + gap: 1rem; +`; + +Styled.Button = styled(Button)` + --button-font: var(--font-base-book); + --button-padding: 0 1.5rem; + + gap: 0; + + justify-content: space-between; +`; + +Styled.IconButton = styled(IconButton)` + color: var(--color-text-0); + --color-border: var(--color-layer-6); +`; + +Styled.Span = styled.span` + display: flex; + align-items: center; + gap: 0.5ch; +`; diff --git a/src/views/menus/AccountMenu.tsx b/src/views/menus/AccountMenu.tsx index af4cb80..f40b2b4 100644 --- a/src/views/menus/AccountMenu.tsx +++ b/src/views/menus/AccountMenu.tsx @@ -1,4 +1,4 @@ -import { memo } from 'react'; +import { ElementType, memo } from 'react'; import styled, { AnyStyledComponent, css } from 'styled-components'; import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import type { Dispatch } from '@reduxjs/toolkit'; @@ -106,7 +106,7 @@ export const AccountMenu = () => { {walletType && ( - + )} @@ -220,7 +220,7 @@ export const AccountMenu = () => { {onboardingState === OnboardingState.WalletConnected ? ( ) : onboardingState === OnboardingState.AccountConnected ? ( - walletType && + walletType && ) : null} {!isTablet && {truncateAddress(dydxAddress)}}