Compare commits

..
Author SHA1 Message Date
Rui db3e7331b8 Fix path to chainLogo 2023-12-06 13:35:08 -08:00
6 changed files with 53 additions and 62 deletions
+2 -2
View File
@@ -39,9 +39,9 @@
"@cosmjs/proto-signing": "^0.31.0", "@cosmjs/proto-signing": "^0.31.0",
"@cosmjs/stargate": "^0.31.0", "@cosmjs/stargate": "^0.31.0",
"@cosmjs/tendermint-rpc": "^0.31.0", "@cosmjs/tendermint-rpc": "^0.31.0",
"@dydxprotocol/v4-abacus": "^1.1.16", "@dydxprotocol/v4-abacus": "^1.1.4",
"@dydxprotocol/v4-client-js": "^1.0.6", "@dydxprotocol/v4-client-js": "^1.0.6",
"@dydxprotocol/v4-localization": "^1.0.18", "@dydxprotocol/v4-localization": "^1.0.17",
"@ethersproject/providers": "^5.7.2", "@ethersproject/providers": "^5.7.2",
"@js-joda/core": "^5.5.3", "@js-joda/core": "^5.5.3",
"@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-checkbox": "^1.0.4",
+8 -8
View File
@@ -27,14 +27,14 @@ dependencies:
specifier: ^0.31.0 specifier: ^0.31.0
version: 0.31.0 version: 0.31.0
'@dydxprotocol/v4-abacus': '@dydxprotocol/v4-abacus':
specifier: ^1.1.16 specifier: ^1.1.4
version: 1.1.16 version: 1.1.4
'@dydxprotocol/v4-client-js': '@dydxprotocol/v4-client-js':
specifier: ^1.0.6 specifier: ^1.0.6
version: 1.0.6 version: 1.0.6
'@dydxprotocol/v4-localization': '@dydxprotocol/v4-localization':
specifier: ^1.0.18 specifier: ^1.0.17
version: 1.0.18 version: 1.0.17
'@ethersproject/providers': '@ethersproject/providers':
specifier: ^5.7.2 specifier: ^5.7.2
version: 5.7.2 version: 5.7.2
@@ -988,8 +988,8 @@ packages:
resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==}
dev: true dev: true
/@dydxprotocol/v4-abacus@1.1.16: /@dydxprotocol/v4-abacus@1.1.4:
resolution: {integrity: sha512-R9ROWx70f0a4lHxAPP/iJd9qnLhzL1SG8vIowfNg2VvWLk6f+f1HwsgMhDd07H328RqY016GNrRmnigeyVcz/g==} resolution: {integrity: sha512-gml6qheFsPShE9p3FmzFeStYM9ZVhgMq0K0+y12V7pObnMKbumkOIISgCzc47idkah0GMNhiqwi9faD5SjOy/A==}
dev: false dev: false
/@dydxprotocol/v4-client-js@1.0.6: /@dydxprotocol/v4-client-js@1.0.6:
@@ -1020,8 +1020,8 @@ packages:
- utf-8-validate - utf-8-validate
dev: false dev: false
/@dydxprotocol/v4-localization@1.0.18: /@dydxprotocol/v4-localization@1.0.17:
resolution: {integrity: sha512-790ajXfGzqRs7JVA3vISCg0Vh4EEN7SlcI8u04iryPcBp1WwkQ5TFGllF32+YPs1+mgjMRhwrg6jP8zEGMQFyw==} resolution: {integrity: sha512-fybNpi1ono1IdwFQJTszsHbHmGti2BdhTo1nz9KOmKh3tmXdhWObKb64Ve6/6Fjk6h/9+DeZ5ZG4UbYyYMyhCA==}
dev: false dev: false
/@dydxprotocol/v4-proto@0.4.1: /@dydxprotocol/v4-proto@0.4.1:
+14 -14
View File
@@ -71,7 +71,7 @@
"https://validator.v4dev.dydx.exchange" "https://validator.v4dev.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.0xsquid.com", "0xsquid": "https://testnet.api.0xsquid.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4dev.dydx.exchange" "faucet": "https://faucet.v4dev.dydx.exchange"
}, },
"links": { "links": {
@@ -145,7 +145,7 @@
"http://54.92.118.111" "http://54.92.118.111"
], ],
"0xsquid": "https://testnet.api.0xsquid.com", "0xsquid": "https://testnet.api.0xsquid.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -218,7 +218,7 @@
"http://validator.v4dev4.dydx.exchange" "http://validator.v4dev4.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.0xsquid.com", "0xsquid": "https://testnet.api.0xsquid.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -291,7 +291,7 @@
"http://18.223.78.50" "http://18.223.78.50"
], ],
"0xsquid": "https://testnet.api.0xsquid.com", "0xsquid": "https://testnet.api.0xsquid.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -365,7 +365,7 @@
"https://validator.v4staging.dydx.exchange" "https://validator.v4staging.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -440,7 +440,7 @@
"https://validator.v4staging.dydx.exchange" "https://validator.v4staging.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -513,7 +513,7 @@
"https://validator-uswest1.v4staging.dydx.exchange" "https://validator-uswest1.v4staging.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/" "nobleValidator": "https://rpc.testnet.noble.strange.love"
}, },
"links": { "links": {
"tos": "https://dydx.exchange/v4-terms", "tos": "https://dydx.exchange/v4-terms",
@@ -591,7 +591,7 @@
"https://dydx-rpc.liquify.com/api=8878132/dydx" "https://dydx-rpc.liquify.com/api=8878132/dydx"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -666,7 +666,7 @@
"https://validator.v4testnet.dydx.exchange" "https://validator.v4testnet.dydx.exchange"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -742,7 +742,7 @@
"https://dydx-testnet.nodefleet.org" "https://dydx-testnet.nodefleet.org"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -818,7 +818,7 @@
"https://test-dydx.kingnodes.com" "https://test-dydx.kingnodes.com"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -894,7 +894,7 @@
"https://dydx-rpc.liquify.com/api=8878132/dydx" "https://dydx-rpc.liquify.com/api=8878132/dydx"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -970,7 +970,7 @@
"https://dydx-testnet-rpc.polkachu.com/" "https://dydx-testnet-rpc.polkachu.com/"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
@@ -1037,7 +1037,7 @@
"https://dydx-testnet-full-rpc.public.blastapi.io/" "https://dydx-testnet-full-rpc.public.blastapi.io/"
], ],
"0xsquid": "https://testnet.api.squidrouter.com", "0xsquid": "https://testnet.api.squidrouter.com",
"nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "nobleValidator": "https://rpc.testnet.noble.strange.love",
"faucet": "https://faucet.v4testnet.dydx.exchange" "faucet": "https://faucet.v4testnet.dydx.exchange"
}, },
"links": { "links": {
+7 -8
View File
@@ -1,10 +1,10 @@
import { useCallback, useMemo } from 'react'; import { type Dispatch, type SetStateAction, useCallback, useMemo } from 'react';
import styled, { AnyStyledComponent, css } from 'styled-components'; import styled, { AnyStyledComponent, css } from 'styled-components';
import { Root, Thumb, Track } from '@radix-ui/react-slider'; import { Root, Thumb, Track } from '@radix-ui/react-slider';
import _ from 'lodash'; import _ from 'lodash';
import { OrderSide } from '@dydxprotocol/v4-client-js'; import { OrderSide } from '@dydxprotocol/v4-client-js';
import { TradeInputField } from '@/constants/abacus'; import { type Nullable, TradeInputField } from '@/constants/abacus';
import { PositionSide } from '@/constants/trade'; import { PositionSide } from '@/constants/trade';
import { MustBigNumber, type BigNumberish } from '@/lib/numbers'; import { MustBigNumber, type BigNumberish } from '@/lib/numbers';
@@ -12,11 +12,11 @@ import abacusStateManager from '@/lib/abacus';
type ElementProps = { type ElementProps = {
leverage?: BigNumberish | null; leverage?: BigNumberish | null;
leverageInputValue: string; leverageInputValue: Nullable<number>;
maxLeverage: BigNumberish | null; maxLeverage: BigNumberish | null;
orderSide: OrderSide; orderSide: OrderSide;
positionSide: PositionSide; positionSide: PositionSide;
setLeverageInputValue: (value: string) => void; setLeverageInputValue: Dispatch<SetStateAction<Nullable<number>>>;
}; };
type StyleProps = { className?: string }; type StyleProps = { className?: string };
@@ -33,7 +33,6 @@ export const LeverageSlider = ({
const leverageBN = MustBigNumber(leverage); const leverageBN = MustBigNumber(leverage);
const maxLeverageBN = MustBigNumber(maxLeverage); const maxLeverageBN = MustBigNumber(maxLeverage);
const leverageInputBN = MustBigNumber(leverageInputValue || leverage); const leverageInputBN = MustBigNumber(leverageInputValue || leverage);
const leverageInputNumber = isNaN(leverageInputBN.toNumber()) ? 0 : leverageInputBN.toNumber();
const sliderConfig = useMemo( const sliderConfig = useMemo(
() => ({ () => ({
@@ -80,12 +79,12 @@ export const LeverageSlider = ({
); );
const onSliderDrag = ([newLeverage]: number[]) => { const onSliderDrag = ([newLeverage]: number[]) => {
setLeverageInputValue(`${newLeverage}`); setLeverageInputValue(newLeverage);
debouncedSetAbacusLeverage(newLeverage); debouncedSetAbacusLeverage(newLeverage);
}; };
const onValueCommit = ([newLeverage]: number[]) => { const onValueCommit = ([newLeverage]: number[]) => {
setLeverageInputValue(`${newLeverage}`); setLeverageInputValue(newLeverage);
// Ensure Abacus is updated with the latest, committed value // Ensure Abacus is updated with the latest, committed value
debouncedSetAbacusLeverage.cancel(); debouncedSetAbacusLeverage.cancel();
@@ -103,7 +102,7 @@ export const LeverageSlider = ({
min={min} min={min}
max={max} max={max}
step={0.1} step={0.1}
value={[Math.min(Math.max(leverageInputNumber, min), max)]} value={[Math.min(Math.max(leverageInputBN.toNumber(), min), max)]}
onValueChange={onSliderDrag} onValueChange={onSliderDrag}
onValueCommit={onValueCommit} onValueCommit={onValueCommit}
> >
@@ -1,8 +1,9 @@
import type { Dispatch, SetStateAction } from 'react';
import { shallowEqual, useSelector } from 'react-redux'; import { shallowEqual, useSelector } from 'react-redux';
import styled, { AnyStyledComponent } from 'styled-components'; import styled, { AnyStyledComponent } from 'styled-components';
import { OrderSide } from '@dydxprotocol/v4-client-js'; import { OrderSide } from '@dydxprotocol/v4-client-js';
import { TradeInputField } from '@/constants/abacus'; import { TradeInputField, Nullable } from '@/constants/abacus';
import { ButtonShape } from '@/constants/buttons'; import { ButtonShape } from '@/constants/buttons';
import { STRING_KEYS } from '@/constants/localization'; import { STRING_KEYS } from '@/constants/localization';
import { LEVERAGE_DECIMALS } from '@/constants/numbers'; import { LEVERAGE_DECIMALS } from '@/constants/numbers';
@@ -61,7 +62,21 @@ export const MarketLeverageInput = ({
const leveragePosition = postOrderLeverage ? newPositionSide : currentPositionSide; const leveragePosition = postOrderLeverage ? newPositionSide : currentPositionSide;
const getSignedLeverage = (newLeverage: string | number) => { const onLeverageInput = ({ value, floatValue }: { value: string; floatValue?: number }) => {
const newLeverage = MustBigNumber(floatValue).toFixed();
if (value === '' || newLeverage === 'NaN' || !floatValue) {
setLeverageInputValue('');
abacusStateManager.setTradeValue({
value: null,
field: TradeInputField.leverage,
});
} else {
updateLeverage(floatValue);
}
};
const updateLeverage = (newLeverage: string | number) => {
const newLeverageBN = MustBigNumber(newLeverage); const newLeverageBN = MustBigNumber(newLeverage);
const newLeverageSignedBN = const newLeverageSignedBN =
leveragePosition === PositionSide.Short || leveragePosition === PositionSide.Short ||
@@ -69,33 +84,10 @@ export const MarketLeverageInput = ({
? newLeverageBN.abs().negated() ? newLeverageBN.abs().negated()
: newLeverageBN.abs(); : newLeverageBN.abs();
return newLeverageSignedBN.toFixed(LEVERAGE_DECIMALS); setLeverageInputValue(newLeverageSignedBN.toString());
};
const onLeverageInput = ({
floatValue,
formattedValue,
}: {
floatValue?: number;
formattedValue: string;
}) => {
setLeverageInputValue(formattedValue);
const newLeverage = MustBigNumber(floatValue).toFixed();
abacusStateManager.setTradeValue({ abacusStateManager.setTradeValue({
value: value: newLeverageSignedBN.toFixed(LEVERAGE_DECIMALS),
formattedValue === '' || newLeverage === 'NaN' ? null : getSignedLeverage(formattedValue),
field: TradeInputField.leverage,
});
};
const updateLeverage = (newLeverage: string | number) => {
const newLeverageSigned = getSignedLeverage(newLeverage);
setLeverageInputValue(newLeverageSigned);
abacusStateManager.setTradeValue({
value: newLeverageSigned,
field: TradeInputField.leverage, field: TradeInputField.leverage,
}); });
}; };
@@ -138,7 +130,7 @@ export const MarketLeverageInput = ({
> >
<Styled.LeverageSlider <Styled.LeverageSlider
leverage={currentLeverage} leverage={currentLeverage}
leverageInputValue={getSignedLeverage(leverageInputValue)} leverageInputValue={leverageInputValue}
maxLeverage={maxLeverage} maxLeverage={maxLeverage}
orderSide={orderSide} orderSide={orderSide}
positionSide={currentPositionSide} positionSide={currentPositionSide}
@@ -77,7 +77,7 @@ export const TradeSizeInputs = () => {
floatValue?: number; floatValue?: number;
formattedValue: string; formattedValue: string;
}) => { }) => {
dispatch(setTradeFormInputs({ amountInput: formattedValue })); dispatch(setTradeFormInputs({ amountInput: MustBigNumber(floatValue).toString() }));
const newAmount = MustBigNumber(floatValue).toFixed(decimals); const newAmount = MustBigNumber(floatValue).toFixed(decimals);
abacusStateManager.setTradeValue({ abacusStateManager.setTradeValue({
@@ -93,7 +93,7 @@ export const TradeSizeInputs = () => {
floatValue?: number; floatValue?: number;
formattedValue: string; formattedValue: string;
}) => { }) => {
dispatch(setTradeFormInputs({ usdAmountInput: formattedValue })); dispatch(setTradeFormInputs({ usdAmountInput: MustBigNumber(floatValue).toString() }));
const newUsdcAmount = MustBigNumber(floatValue).toFixed(tickSizeDecimals || USD_DECIMALS); const newUsdcAmount = MustBigNumber(floatValue).toFixed(tickSizeDecimals || USD_DECIMALS);
abacusStateManager.setTradeValue({ abacusStateManager.setTradeValue({