diff --git a/package.json b/package.json index cb5c058..a7f8f3d 100644 --- a/package.json +++ b/package.json @@ -37,9 +37,9 @@ "@cosmjs/proto-signing": "^0.31.0", "@cosmjs/stargate": "^0.31.0", "@cosmjs/tendermint-rpc": "^0.31.0", - "@dydxprotocol/v4-abacus": "^0.6.3", + "@dydxprotocol/v4-abacus": "^0.6.4", "@dydxprotocol/v4-client-js": "^0.36.1", - "@dydxprotocol/v4-localization": "^0.1.23", + "@dydxprotocol/v4-localization": "^0.1.24", "@ethersproject/providers": "^5.7.2", "@js-joda/core": "^5.5.3", "@radix-ui/react-collapsible": "^1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c03d6b..00ec3b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,14 +27,14 @@ dependencies: specifier: ^0.31.0 version: 0.31.0 '@dydxprotocol/v4-abacus': - specifier: ^0.6.3 - version: 0.6.3 + specifier: ^0.6.4 + version: 0.6.4 '@dydxprotocol/v4-client-js': specifier: ^0.36.1 version: 0.36.1 '@dydxprotocol/v4-localization': - specifier: ^0.1.23 - version: 0.1.23 + specifier: ^0.1.24 + version: 0.1.24 '@ethersproject/providers': specifier: ^5.7.2 version: 5.7.2 @@ -979,8 +979,8 @@ packages: resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} dev: true - /@dydxprotocol/v4-abacus@0.6.3: - resolution: {integrity: sha512-oYMbII7o7fXjNpl2PZpG6mwKQ49e8Qky5vA8Ua9boNs7nRUx3PC6azfoPtjHKMdYY33eHoXcZBpTynhneLXCVg==} + /@dydxprotocol/v4-abacus@0.6.4: + resolution: {integrity: sha512-eH+/9Q/OnQtwzBwM1BJyXybFPdivGmFQWrxM71MFWGs6uIQGbZX775mpoa8deweSTyQ/QrRLRQ1mP2BPDgBQYg==} dev: false /@dydxprotocol/v4-client-js@0.36.1: @@ -1010,8 +1010,8 @@ packages: - utf-8-validate dev: false - /@dydxprotocol/v4-localization@0.1.23: - resolution: {integrity: sha512-TaEey7dINwxELlEyA8XsQ4GQLfJ7e1b434bafpnlG9ccW1sIW7TYTsfaSkck2egR4R736hA7k5WvVy0aI/0TFw==} + /@dydxprotocol/v4-localization@0.1.24: + resolution: {integrity: sha512-zSiu8+/6BWNWZXxe73zUp/UjuLG1Cp5UuhXKtbATqqkeZyVCs01QxbBCTs1MLfgsLh02IrfhXCPHvXnzZyReEw==} dev: false /@dydxprotocol/v4-proto@0.2.1: diff --git a/public/configs/env.json b/public/configs/env.json index 3156d5b..f47645a 100644 --- a/public/configs/env.json +++ b/public/configs/env.json @@ -1,19 +1,19 @@ { - "deployments":{ - "MAINNET":{ - "environments":[ + "deployments": { + "MAINNET": { + "environments": [ "dydxprotocol-mainnet" ], - "default":"dydxprotocol-mainnet" + "default": "dydxprotocol-mainnet" }, - "TESTNET":{ - "environments":[ + "TESTNET": { + "environments": [ "dydxprotocol-testnet" ], - "default":"dydxprotocol-testnet" + "default": "dydxprotocol-testnet" }, - "DEV":{ - "environments":[ + "DEV": { + "environments": [ "dydxprotocol-dev", "dydxprotocol-dev-2", "dydxprotocol-dev-4", @@ -27,781 +27,807 @@ "dydxprotocol-testnet-kingnodes", "dydxprotocol-testnet-liquify" ], - "default":"dydxprotocol-testnet" + "default": "dydxprotocol-testnet" } }, - "environments":{ - "dydxprotocol-dev":{ - "name":"v4 Dev", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "environments": { + "dydxprotocol-dev": { + "name": "v4 Dev", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"http://indexer.v4dev.dydx.exchange", - "socket":"wss://indexer.v4dev.dydx.exchange" + "api": "http://indexer.v4dev.dydx.exchange", + "socket": "wss://indexer.v4dev.dydx.exchange" } ], - "validators":[ + "validators": [ "http://validator.v4dev.dydx.exchange" ], - "0xsquid":"https://testnet.api.0xsquid.com", - "faucet":"http://faucet.v4dev.dydx.exchange" + "0xsquid": "https://testnet.api.0xsquid.com", + "faucet": "http://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" + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-dev-2":{ - "name":"v4 Dev 2", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-dev-2": { + "name": "v4 Dev 2", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "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" + "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":[ + "validators": [ "http://35.75.227.118" ], - "0xsquid":"https://testnet.api.0xsquid.com" + "0xsquid": "https://testnet.api.0xsquid.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" + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-dev-4":{ - "name":"v4 Dev 4", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-dev-4": { + "name": "v4 Dev 4", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"http://indexer.v4dev4.dydx.exchange", - "socket":"ws://indexer.v4dev4.dydx.exchange" + "api": "http://indexer.v4dev4.dydx.exchange", + "socket": "ws://indexer.v4dev4.dydx.exchange" } ], - "validators":[ + "validators": [ "http://validator.v4dev4.dydx.exchange" ], - "0xsquid":"https://testnet.api.0xsquid.com" + "0xsquid": "https://testnet.api.0xsquid.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" + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-dev-5":{ - "name":"v4 Dev 5", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-dev-5": { + "name": "v4 Dev 5", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "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" + "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":[ + "validators": [ "http://18.223.78.50" ], - "0xsquid":"https://testnet.api.0xsquid.com" + "0xsquid": "https://testnet.api.0xsquid.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" + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-staging":{ - "name":"v4 Staging", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-staging": { + "name": "v4 Staging", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://indexer.v4staging.dydx.exchange", - "socket":"wss://indexer.v4staging.dydx.exchange" + "api": "https://indexer.v4staging.dydx.exchange", + "socket": "wss://indexer.v4staging.dydx.exchange" } ], - "faucet":"https://faucet.v4staging.dydx.exchange", - "validators":[ + "faucet": "https://faucet.v4staging.dydx.exchange", + "validators": [ "https://validator.v4staging.dydx.exchange" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app" }, - "links":{ - "tos":"https://dydx.exchange/v4-terms", - "privacy":"https://dydx.exchange/privacy", - "mintscan":"https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "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" + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-staging-west":{ - "name":"v4 Staging West", - "ethereumChainId":"5", - "dydxChainId":"dydxprotocol-testnet", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-staging-west": { + "name": "v4 Staging West", + "ethereumChainId": "5", + "dydxChainId": "dydxprotocol-testnet", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://indexer.v4staging.dydx.exchange", - "socket":"wss://indexer.v4staging.dydx.exchange" + "api": "https://indexer.v4staging.dydx.exchange", + "socket": "wss://indexer.v4staging.dydx.exchange" } ], - "faucet":"https://faucet.v4staging.dydx.exchange", - "validators":[ + "faucet": "https://faucet.v4staging.dydx.exchange", + "validators": [ "https://validator-uswest1.v4staging.dydx.exchange" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app" }, - "links":{ - "tos":"https://dydx.exchange/v4-terms", - "privacy":"https://dydx.exchange/privacy", - "mintscan":"https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", - "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" + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } }, - "dydxprotocol-testnet":{ - "name":"v4 Public Testnet", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet": { + "name": "v4 Public Testnet", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://dydx-testnet.imperator.co", - "socket":"wss://dydx-testnet.imperator.co" + "api": "https://dydx-testnet.imperator.co", + "socket": "wss://dydx-testnet.imperator.co" } ], - "validators":[ + "validators": [ "https://dydx-testnet.nodefleet.org", "https://test-dydx.kingnodes.com", "https://dydx-rpc.liquify.com/api=8878132/dydx" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "links": { + "tos": "https://dydx.exchange/v4-terms", + "privacy": "https://dydx.exchange/privacy", + "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-testnet-dydx":{ - "name":"v4 Public Testnet/dYdX", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet-dydx": { + "name": "v4 Public Testnet/dYdX", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://indexer.v4testnet.dydx.exchange", - "socket":"wss://indexer.v4testnet.dydx.exchange" + "api": "https://indexer.v4testnet.dydx.exchange", + "socket": "wss://indexer.v4testnet.dydx.exchange" } ], - "validators":[ + "validators": [ "https://validator.v4testnet.dydx.exchange" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "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://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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-testnet-dsrv":{ - "name":"v4 Public Testnet/DSRV", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet-dsrv": { + "name": "v4 Public Testnet/DSRV", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://dydx-testnet.imperator.co", - "socket":"wss://dydx-testnet.imperator.co" + "api": "https://dydx-testnet.imperator.co", + "socket": "wss://dydx-testnet.imperator.co" } ], - "validators":[ + "validators": [ "https://dydx-testnet-archive.allthatnode.com:26657/XZvMM41hESf8PJrEQiTzbCOMVyFca79R" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "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://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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-testnet-nodefleet":{ - "name":"v4 Public Testnet/nodefleet", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet-nodefleet": { + "name": "v4 Public Testnet/nodefleet", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://dydx-testnet.imperator.co", - "socket":"wss://dydx-testnet.imperator.co" + "api": "https://dydx-testnet.imperator.co", + "socket": "wss://dydx-testnet.imperator.co" } ], - "validators":[ + "validators": [ "https://dydx-testnet.nodefleet.org" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "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://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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-testnet-kingnodes":{ - "name":"v4 Public Testnet/KingNodes", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet-kingnodes": { + "name": "v4 Public Testnet/KingNodes", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://dydx-testnet.imperator.co", - "socket":"wss://dydx-testnet.imperator.co" + "api": "https://dydx-testnet.imperator.co", + "socket": "wss://dydx-testnet.imperator.co" } ], - "validators":[ + "validators": [ "https://test-dydx.kingnodes.com" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "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://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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-testnet-liquify":{ - "name":"v4 Public Testnet/Liquify", - "ethereumChainId":"5", - "dydxChainId":"dydx-testnet-3", - "isMainNet":false, - "tokens":{ - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-testnet-liquify": { + "name": "v4 Public Testnet/Liquify", + "ethereumChainId": "5", + "dydxChainId": "dydx-testnet-3", + "isMainNet": false, + "tokens": { + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"https://dydx-testnet.imperator.co", - "socket":"wss://dydx-testnet.imperator.co" + "api": "https://dydx-testnet.imperator.co", + "socket": "wss://dydx-testnet.imperator.co" } ], - "validators":[ + "validators": [ "https://dydx-rpc.liquify.com/api=8878132/dydx" ], - "0xsquid":"https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", - "faucet":"https://faucet.v4testnet.dydx.exchange" + "0xsquid": "https://squid-api-git-main-cosmos-testnet-0xsquid.vercel.app", + "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://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" + "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://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" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"dYdX v4", - "description":"dYdX v4 App", - "iconUrl":"/logos/dydx-x.png" + "wallets": { + "walletconnect": { + "client": { + "name": "dYdX v4", + "description": "dYdX v4 App", + "iconUrl": "/logos/dydx-x.png" }, - "v1":{ - "bridgeUrl":"wss://api.stage.dydx.exchange/wc/" + "v1": { + "bridgeUrl": "wss://api.stage.dydx.exchange/wc/" }, - "v2":{ - "projectId":"47559b2ec96c09aed9ff2cb54a31ab0e" + "v2": { + "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e" } }, - "walletSegue":{ - "callbackUrl":"/walletsegue" + "walletSegue": { + "callbackUrl": "/walletsegue" }, - "images":"/wallets/" + "images": "/wallets/", + "signTypedDataAction": "dYdX V4 Onboarding", + "signTypedDataDomainName": "dYdX V4" } }, - "dydxprotocol-mainet":{ - "name":"v4", - "ethereumChainId":"1", - "dydxChainId":"[mainnet chain id]", - "isMainNet":true, - "tokens":{ - "comment":"Change according to mainnet release", - "chain":{ - "name":"DYDX", - "denom":"dv4tnt", - "image":"/currencies/dydx.png" + "dydxprotocol-mainet": { + "name": "v4", + "ethereumChainId": "1", + "dydxChainId": "[mainnet chain id]", + "isMainNet": true, + "tokens": { + "comment": "Change according to mainnet release", + "chain": { + "name": "DYDX", + "denom": "dv4tnt", + "image": "/currencies/dydx.png" }, - "usdc":{ - "name":"USDC", - "denom":"ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", - "gasDenom":"uusdc", - "image":"/currencies/usdc.png" + "usdc": { + "name": "USDC", + "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5", + "gasDenom": "uusdc", + "image": "/currencies/usdc.png" } }, - "endpoints":{ - "indexers":[ + "endpoints": { + "indexers": [ { - "api":"[REST endpoint]", - "socket":"[Websocket endpoint]" + "api": "[REST endpoint]", + "socket": "[Websocket endpoint]" } ], - "validators":[ + "validators": [ "[Validator endpoint 1", "[Validator endpoint n]" ], - "0xsquid":"[0xSquid endpoint for mainnet]" + "0xsquid": "[0xSquid endpoint for mainnet]" }, - "links":{ - "tos":"[HTTP link to TOS]", - "privacy":"[HTTP link to Privacy Policy]", - "mintscan":"[HTTP link to Mintscan, with {tx_hash} placeholder]", - "documentation":"[HTTP link to documentation, can be null]", - "community":"[HTTP link to community, can be null]", - "feedback":"[HTTP link to feedback form, can be null]", - "blogs":"[HTTP link to blogs, can be null]" + "links": { + "tos": "[HTTP link to TOS]", + "privacy": "[HTTP link to Privacy Policy]", + "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]", + "documentation": "[HTTP link to documentation, can be null]", + "community": "[HTTP link to community, can be null]", + "feedback": "[HTTP link to feedback form, can be null]", + "blogs": "[HTTP link to blogs, can be null]" }, - "wallets":{ - "walletconnect":{ - "client":{ - "name":"[Name of the app]", - "description":"[Description of the app]", - "iconUrl":"[Relative URL of the icon URL]" + "wallets": { + "walletconnect": { + "client": { + "name": "[Name of the app]", + "description": "[Description of the app]", + "iconUrl": "[Relative URL of the icon URL]" }, - "v1":{ - "bridgeUrl":"[Bridge URL]" + "v1": { + "bridgeUrl": "[Bridge URL]" }, - "v2":{ - "projectId":"[Project ID]" + "v2": { + "projectId": "[Project ID]" } }, - "walletSegue":{ - "callbackUrl":"[Relative callback URL for WalletSegue, should match apple-app-site-association]" + "walletSegue": { + "callbackUrl": "[Relative callback URL for WalletSegue, should match apple-app-site-association]" }, - "images":"[Relative URL for wallet images]" + "images": "[Relative URL for wallet images]", + "signTypedDataAction": "dYdX Chain Onboarding", + "signTypedDataDomainName": "dYdX Chain" } } } diff --git a/src/constants/wallets.ts b/src/constants/wallets.ts index ebc7825..4eaccac 100644 --- a/src/constants/wallets.ts +++ b/src/constants/wallets.ts @@ -24,6 +24,8 @@ import { import { isMetaMask } from '@/lib/wallet/providers'; +import { DydxNetwork, ENVIRONMENT_CONFIG_MAP } from './networks'; + // Wallet connection types export enum WalletConnectionType { @@ -318,20 +320,21 @@ export type WalletConnection = { export const COSMOS_DERIVATION_PATH = "m/44'/118'/0'/0/0"; /** - * @description typed data to sign for v4 onboarding + * @description typed data to sign for dYdX Chain onboarding */ -export const SIGN_TYPED_DATA = { - primaryType: 'dYdX', - domain: { - name: 'dYdX V4', - }, - types: { - dYdX: [{ name: 'action', type: 'string' }], - }, - message: { - action: 'dYdX V4 Onboarding', - }, -} as const; +export const getSignTypedData = (selectedNetwork: DydxNetwork) => + ({ + primaryType: 'dYdX', + domain: { + name: ENVIRONMENT_CONFIG_MAP[selectedNetwork].wallets.signTypedDataDomainName, + }, + types: { + dYdX: [{ name: 'action', type: 'string' }], + }, + message: { + action: ENVIRONMENT_CONFIG_MAP[selectedNetwork].wallets.signTypedDataAction, + }, + } as const); export type PrivateInformation = ReturnType; diff --git a/src/views/TransferStatus.tsx b/src/views/TransferStatus.tsx index 6f3bb06..cecce4e 100644 --- a/src/views/TransferStatus.tsx +++ b/src/views/TransferStatus.tsx @@ -53,6 +53,15 @@ export const TransferStatusToast = ({ if (!status) return ; + const statusString = + type === 'deposit' + ? status?.squidTransactionStatus === 'success' + ? STRING_KEYS.DEPOSIT_COMPLETE + : STRING_KEYS.DEPOSIT_STATUS + : status?.squidTransactionStatus === 'success' + ? STRING_KEYS.WITHDRAW_COMPLETE + : STRING_KEYS.WITHDRAW_STATUS; + return ( {stringGetter({ - key: type === 'deposit' ? STRING_KEYS.DEPOSIT_STATUS : STRING_KEYS.WITHDRAW_STATUS, + key: statusString, params: { AMOUNT_USD: , ESTIMATED_DURATION: ( diff --git a/src/views/TransferStatusSteps.tsx b/src/views/TransferStatusSteps.tsx index cf3d551..409badf 100644 --- a/src/views/TransferStatusSteps.tsx +++ b/src/views/TransferStatusSteps.tsx @@ -51,7 +51,7 @@ export const TransferStatusSteps = ({ status }: ElementProps) => { label: stringGetter({ key: type === 'deposit' ? STRING_KEYS.DEPOSIT_TO_CHAIN : STRING_KEYS.WITHDRAW_TO_CHAIN, params: { - CHAIN: status?.toChain?.chainData?.chainName, + CHAIN: type === 'deposit' ? 'dYdX' : status?.toChain?.chainData?.chainName, }, }), step: TransferStatusStep.ToChain, diff --git a/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx b/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx index 6669a4a..32c5d66 100644 --- a/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx +++ b/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx @@ -10,7 +10,7 @@ import { AnalyticsEvent } from '@/constants/analytics'; import { ButtonAction } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; import { ENVIRONMENT_CONFIG_MAP } from '@/constants/networks'; -import { DydxAddress, SIGN_TYPED_DATA } from '@/constants/wallets'; +import { DydxAddress, getSignTypedData } from '@/constants/wallets'; import { useAccounts, useBreakpoints, useDydxClient, useStringGetter } from '@/hooks'; import { useMatchingEvmNetwork } from '@/hooks/useMatchingEvmNetwork'; @@ -85,10 +85,11 @@ export const GenerateKeys = ({ EvmDerivedAccountStatus.Derived, ].includes(status); + const signTypedData = getSignTypedData(selectedNetwork); const { signTypedDataAsync } = useSignTypedData({ - ...SIGN_TYPED_DATA, + ...signTypedData, domain: { - ...SIGN_TYPED_DATA.domain, + ...signTypedData.domain, chainId, }, }); @@ -165,8 +166,8 @@ export const GenerateKeys = ({ {[ { status: EvmDerivedAccountStatus.Deriving, - title: stringGetter({ key: STRING_KEYS.GENERATE_COSMOS_WALLET }), - description: stringGetter({ key: STRING_KEYS.GENERATE_COSMOS_WALLET }), + title: stringGetter({ key: STRING_KEYS.GENERATE_DYDX_WALLET }), + description: stringGetter({ key: STRING_KEYS.VERIFY_WALLET_OWNERSHIP }), }, status === EvmDerivedAccountStatus.EnsuringDeterminism && { status: EvmDerivedAccountStatus.EnsuringDeterminism, diff --git a/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx b/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx index f63e649..07d0cb1 100644 --- a/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx +++ b/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx @@ -168,6 +168,19 @@ export const DepositButtonAndReceipt = ({ /> ), }, + { + key: 'estimatedRouteDuration', + label: {stringGetter({ key: STRING_KEYS.ESTIMATED_TIME })}, + value: typeof summary?.estimatedRouteDuration === 'number' && ( + + ), + }, ]; const isFormValid = !isDisabled && !isEditingSlippage; diff --git a/src/views/forms/AccountManagementForms/WithdrawForm.tsx b/src/views/forms/AccountManagementForms/WithdrawForm.tsx index 02ce647..f24b628 100644 --- a/src/views/forms/AccountManagementForms/WithdrawForm.tsx +++ b/src/views/forms/AccountManagementForms/WithdrawForm.tsx @@ -4,6 +4,7 @@ import styled, { type AnyStyledComponent } from 'styled-components'; import type { NumberFormatValues } from 'react-number-format'; import { shallowEqual, useSelector } from 'react-redux'; import { TESTNET_CHAIN_ID } from '@dydxprotocol/v4-client-js'; +import { isAddress } from 'viem'; import { TransferInputField, TransferInputTokenResource, TransferType } from '@/constants/abacus'; import { AlertType } from '@/constants/alerts'; @@ -26,6 +27,7 @@ import { Link } from '@/components/Link'; import { OutputType } from '@/components/Output'; import { Tag } from '@/components/Tag'; import { WithDetailsReceipt } from '@/components/WithDetailsReceipt'; +import { Icon, IconName } from '@/components/Icon'; import { ChainSelectMenu } from '@/views/forms/AccountManagementForms/ChainSelectMenu'; @@ -59,6 +61,8 @@ export const WithdrawForm = () => { resources, } = useSelector(getTransferInputs, shallowEqual) || {}; + const isValidAddress = toAddress && isAddress(toAddress); + const toToken = useMemo( () => (token ? resources?.tokenResources?.get(token) : undefined), [token, resources] @@ -179,7 +183,6 @@ export const WithdrawForm = () => { const onSelectChain = useCallback((chain: string) => { if (chain) { - abacusStateManager.clearTransferInputValues(); abacusStateManager.setTransferValue({ field: TransferInputField.chain, value: chain, @@ -190,7 +193,6 @@ export const WithdrawForm = () => { const onSelectToken = useCallback((token: TransferInputTokenResource) => { if (token) { - abacusStateManager.clearTransferInputValues(); abacusStateManager.setTransferValue({ field: TransferInputField.token, value: token.address, @@ -265,7 +267,12 @@ export const WithdrawForm = () => { placeholder={stringGetter({ key: STRING_KEYS.ADDRESS })} onChange={onChangeAddress} value={toAddress || ''} - label={stringGetter({ key: STRING_KEYS.DESTINATION })} + label={ + + {stringGetter({ key: STRING_KEYS.DESTINATION })}{' '} + {isValidAddress ? : null} + + } /> + {stringGetter({ key: STRING_KEYS.AMOUNT_RECEIVED })}{' '} + {withdrawToken && {withdrawToken?.symbol}} + + ), + value: ( + + ), + }, { key: 'leverage', - label: {stringGetter({ key: STRING_KEYS.LEVERAGE })}, + label: {stringGetter({ key: STRING_KEYS.ACCOUNT_LEVERAGE })}, value: ( ), }, - // TODO: uncomment when we have a way to get token amount estimate from abacus - // { - // key: 'wallet', - // label: ( - // - // {stringGetter({ key: STRING_KEYS.WALLET })}{' '} - // {withdrawToken && {withdrawToken?.symbol}} - // - // ), - // value: ( - // - // ), - // }, + { + key: 'estimatedRouteDuration', + label: {stringGetter({ key: STRING_KEYS.ESTIMATED_TIME })}, + value: typeof summary?.estimatedRouteDuration === 'number' && ( + + ), + }, ]; const isFormValid = !isDisabled && !isEditingSlippage; diff --git a/src/views/forms/TradeForm/AdvancedTradeOptions.tsx b/src/views/forms/TradeForm/AdvancedTradeOptions.tsx index 5fa2ef3..a1e1842 100644 --- a/src/views/forms/TradeForm/AdvancedTradeOptions.tsx +++ b/src/views/forms/TradeForm/AdvancedTradeOptions.tsx @@ -6,7 +6,7 @@ import { layoutMixins } from '@/styles/layoutMixins'; import { formMixins } from '@/styles/formMixins'; import { TradeInputField } from '@/constants/abacus'; -import { STRING_KEYS } from '@/constants/localization'; +import { STRING_KEYS, StringKey } from '@/constants/localization'; import { INTEGER_DECIMALS } from '@/constants/numbers'; import { TimeUnitShort } from '@/constants/time'; import { GOOD_TIL_TIME_TIMESCALE_STRINGS } from '@/constants/trade'; @@ -29,12 +29,12 @@ export const AdvancedTradeOptions = () => { const currentTradeFormConfig = useSelector(getInputTradeOptions, shallowEqual); const inputTradeData = useSelector(getInputTradeData, shallowEqual); - const { execution, goodUntil, postOnly, reduceOnly, timeInForce } = inputTradeData || {}; + const { execution, goodTil, postOnly, reduceOnly, timeInForce } = inputTradeData || {}; const { executionOptions, needsGoodUntil, needsPostOnly, needsReduceOnly, timeInForceOptions } = currentTradeFormConfig || {}; - const { duration, unit } = goodUntil || {}; + const { duration, unit } = goodTil || {}; const needsExecution = executionOptions || needsPostOnly || needsReduceOnly; @@ -62,7 +62,7 @@ export const AdvancedTradeOptions = () => { ))} @@ -76,7 +76,7 @@ export const AdvancedTradeOptions = () => { onChange={({ value }: NumberFormatValues) => { abacusStateManager.setTradeValue({ value: Number(value), - field: TradeInputField.goodUntilDuration, + field: TradeInputField.goodTilDuration, }); }} value={duration ?? ''} @@ -86,7 +86,7 @@ export const AdvancedTradeOptions = () => { onValueChange={(goodTilTimeTimescale: string) => { abacusStateManager.setTradeValue({ value: goodTilTimeTimescale, - field: TradeInputField.goodUntilUnit, + field: TradeInputField.goodTilUnit, }); }} > @@ -121,7 +121,7 @@ export const AdvancedTradeOptions = () => { ))}