diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml
index fc54663a..9e873b83 100644
--- a/.github/workflows/merge.yml
+++ b/.github/workflows/merge.yml
@@ -20,6 +20,7 @@ jobs:
REACT_APP_RPC_ATOM: "https://private-rpc-cm-cosmos.imperator.co"
REACT_APP_RPC_HUAHUA: "https://private-rpc-cm-chihuahua.imperator.co"
REACT_APP_RPC_OSMO: "https://private-rpc-cm-osmosis.imperator.co"
+ REACT_APP_RPC_INJ: "https://private-rpc-cm-injective.imperator.co"
REACT_APP_FIREBASE_API_KEY: "AIzaSyA49DTslUcJG2b5TUdI_EbPzugFFXOfO0o"
REACT_APP_FIREBASE_AUTH_DOMAIN: "lum-network.firebaseapp.com"
REACT_APP_FIREBASE_DATABASE_URL: "https://lum-network-default-rtdb.firebaseio.com"
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index 0c113e94..8f665e67 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -27,10 +27,11 @@ jobs:
REACT_APP_API_URL: "https://explorer-mainnet.infra.lum.network"
REACT_APP_IMPERATOR_API_URL: "https://api-osmosis.imperator.co"
GENERATE_SOURCEMAP: "false"
- REACT_APP_RPC_LUM: "https://private-rpc-cm-lum.imperator.co"
- REACT_APP_RPC_ATOM: "https://private-rpc-cm-cosmos.imperator.co"
- REACT_APP_RPC_HUAHUA: "https://private-rpc-cm-chihuahua.imperator.co"
- REACT_APP_RPC_OSMO: "https://private-rpc-cm-osmosis.imperator.co"
+ REACT_APP_RPC_LUM: "https://rpc.node0.mainnet.lum.network"
+ REACT_APP_RPC_ATOM: "https://cosmos-rpc.publicnode.com:443"
+ REACT_APP_RPC_HUAHUA: "https://chihuahua-rpc.publicnode.com:443"
+ REACT_APP_RPC_OSMO: "https://osmosis-rpc.publicnode.com:443"
+ REACT_APP_RPC_INJ: "https://injective-rpc.publicnode.com:443"
REACT_APP_FIREBASE_API_KEY: "AIzaSyA49DTslUcJG2b5TUdI_EbPzugFFXOfO0o"
REACT_APP_FIREBASE_AUTH_DOMAIN: "lum-network.firebaseapp.com"
REACT_APP_FIREBASE_DATABASE_URL: "https://lum-network-default-rtdb.firebaseio.com"
@@ -46,10 +47,11 @@ jobs:
REACT_APP_API_URL: "https://explorer-mainnet.infra.lum.network"
REACT_APP_IMPERATOR_API_URL: "https://api-osmosis.imperator.co"
GENERATE_SOURCEMAP: "false"
- REACT_APP_RPC_LUM: "https://private-rpc-cm-lum.imperator.co"
- REACT_APP_RPC_ATOM: "https://rpc.cosmoshub.strange.love"
+ REACT_APP_RPC_LUM: "https://rpc.node0.mainnet.lum.network"
+ REACT_APP_RPC_ATOM: "https://cosmos-rpc.publicnode.com:443"
REACT_APP_RPC_HUAHUA: "https://chihuahua-rpc.publicnode.com:443"
- REACT_APP_RPC_OSMO: "https://private-rpc-cm-osmosis.imperator.co"
+ REACT_APP_RPC_OSMO: "https://osmosis-rpc.publicnode.com:443"
+ REACT_APP_RPC_INJ: "https://injective-rpc.publicnode.com:443"
REACT_APP_FIREBASE_API_KEY: "AIzaSyA49DTslUcJG2b5TUdI_EbPzugFFXOfO0o"
REACT_APP_FIREBASE_AUTH_DOMAIN: "lum-network.firebaseapp.com"
REACT_APP_FIREBASE_DATABASE_URL: "https://lum-network-default-rtdb.firebaseio.com"
diff --git a/README.md b/README.md
index f2ecbe0c..23314db3 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
This is the front-end repository for **Cosmos Millions**.
-This service use **Lum Network - Chain** (code hosted [here](https://github.com/lum-network/chain))
+This service uses **Lum Network - Chain** (code hosted [here](https://github.com/lum-network/chain))
## Description
diff --git a/package.json b/package.json
index df8062df..c7aca476 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
"@cosmostation/cosmos-client": "^0.0.5",
"@cosmostation/extension-client": "^0.1.15",
"@firebase/analytics": "^0.9.3",
+ "@injectivelabs/sdk-ts": "^1.14.7",
"@keplr-wallet/types": "^0.12.67",
"@keplr-wallet/unit": "^0.12.67",
"@leapwallet/elements": "^0.6.6",
diff --git a/src/assets/images/chains/inj.svg b/src/assets/images/chains/inj.svg
new file mode 100644
index 00000000..3abb662d
--- /dev/null
+++ b/src/assets/images/chains/inj.svg
@@ -0,0 +1,15 @@
+
diff --git a/src/assets/index.ts b/src/assets/index.ts
index e7111ff9..f5c2dc3b 100644
--- a/src/assets/index.ts
+++ b/src/assets/index.ts
@@ -55,6 +55,7 @@ import atom from './images/chains/atom.svg';
import lum from './images/chains/lum.svg';
import osmo from './images/chains/osmo.svg';
import huahua from './images/chains/huahua.svg';
+import inj from './images/chains/inj.svg';
import atomIllustration from './images/chains/atom_illu.png';
import osmoIllustration from './images/chains/osmo_illu.png';
@@ -134,6 +135,7 @@ const Assets = {
osmoIllustration,
huahua,
huahuaIllustration,
+ inj,
},
};
diff --git a/src/components/AssetsSelect/AssetsSelect.tsx b/src/components/AssetsSelect/AssetsSelect.tsx
index c72d0d66..0eecffd4 100644
--- a/src/components/AssetsSelect/AssetsSelect.tsx
+++ b/src/components/AssetsSelect/AssetsSelect.tsx
@@ -45,7 +45,7 @@ const AssetOption = (
{
totalDeposited &&
userRank &&
userRank.rank > item.rank &&
- NumbersUtils.convertUnitNumber(userRank.amount) !== totalDeposited ? (
+ NumbersUtils.convertUnitNumber(userRank.amount, userRank.nativeDenom) !== totalDeposited ? (
@@ -215,11 +215,12 @@ const Leaderboard = (props: Props) => {
@@ -251,7 +252,11 @@ const DepositDropStep = (
type='number'
step='any'
min='0'
- max={balances.length > 0 ? NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0') : '0'}
+ max={
+ balances.length > 0
+ ? NumbersUtils.convertUnitNumber(balances.find((bal) => bal.denom === currentPool.nativeDenom)?.amount || '0', currentPool.nativeDenom)
+ : '0'
+ }
value={manualInputs[index].amount || ''}
onChange={(event) => onAmountInputChange(event.target.value, index)}
/>
@@ -315,7 +320,7 @@ const DepositDropStep = (
@@ -410,7 +415,7 @@ const ShareStep = ({ txInfos, price, title, subtitle, onTwitterShare }: { txInfo
withoutPadding
className='step-3-cta-container d-flex flex-row align-items-center text-start p-4 w-100'
onClick={() => {
- window.open(`${NavigationConstants.MINTSCAN}/address/${txInfos.depositorAddress}`, '_blank');
+ window.open(`${NavigationConstants.MINTSCAN_LUM}/address/${txInfos.depositorAddress}`, '_blank');
}}
>

@@ -489,7 +494,7 @@ const DepositDropSteps = (props: Props) => {
title={steps[currentStep].cardTitle ?? steps[currentStep]?.title ?? ''}
balances={lumWallet?.balances || []}
onDepositDrop={async (pool, deposits, callback, startIndex) => {
- const totalDepositAmount = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount), 0);
+ const totalDepositAmount = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount, currentPool.nativeDenom), 0);
const res = await onDepositDrop(pool, deposits, callback, startIndex);
if (res) {
@@ -497,7 +502,7 @@ const DepositDropSteps = (props: Props) => {
setTxInfos({
amount: numeral(totalDepositAmount).format('0,0[.]00'),
denom: DenomsUtils.getNormalDenom(pool.nativeDenom).toUpperCase(),
- tvl: numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount) + totalDepositAmount).format('0,0'),
+ tvl: numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) + totalDepositAmount).format('0,0'),
poolId: pool.poolId.toString(),
numOfWallets: deposits.length,
depositorAddress: lumWallet?.address || '',
diff --git a/src/drops/pages/MyDeposits/MyDeposits.tsx b/src/drops/pages/MyDeposits/MyDeposits.tsx
index 03ae79b3..10e63a4b 100644
--- a/src/drops/pages/MyDeposits/MyDeposits.tsx
+++ b/src/drops/pages/MyDeposits/MyDeposits.tsx
@@ -62,7 +62,7 @@ const MyDeposits = () => {
};
const renderDepositDrop = (drop: AggregatedDepositModel, index: number) => {
- const usdPrice = NumbersUtils.convertUnitNumber(drop.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(drop.amount?.denom || '')] || 0;
+ const usdPrice = NumbersUtils.convertUnitNumber(drop.amount?.amount || '0', drop.amount?.denom) * prices[DenomsUtils.getNormalDenom(drop.amount?.denom || '')] || 0;
return (
@@ -80,7 +80,7 @@ const MyDeposits = () => {
-
+
{DenomsUtils.getNormalDenom(drop.amount?.denom || '')}
diff --git a/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx b/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx
index dc125fde..26a55230 100644
--- a/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx
+++ b/src/drops/pages/MyDeposits/components/Modals/CancelDropModal/CancelDropModal.tsx
@@ -25,7 +25,7 @@ const CancelDropModal = ({ deposits, limit }: { deposits?: DepositModel[]; limit
provider: WalletUtils.getAutoconnectProvider(),
});
- const depositsTotalAmount = deposits ? deposits.reduce((acc, deposit) => NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') + acc, 0) : 0;
+ const depositsTotalAmount = deposits ? deposits.reduce((acc, deposit) => NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) + acc, 0) : 0;
useEffect(() => {
const handler = () => {
diff --git a/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx b/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx
index f2d22f7b..b8a8844b 100644
--- a/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx
+++ b/src/drops/pages/MyDeposits/components/Modals/DropsDetailsModal/DropsDetailsModal.tsx
@@ -90,9 +90,11 @@ const DropsDetails = ({ drops, poolDenom, prices, modalRef, onCancel, onEdit }:
- {numeral(NumbersUtils.convertUnitNumber(drop.amount?.amount || 0) * (prices[poolDenom] || 0)).format('$0,0[.]00')}
+
+ {numeral(NumbersUtils.convertUnitNumber(drop.amount?.amount || 0, drop.amount?.denom) * (prices[poolDenom] || 0)).format('$0,0[.]00')}
+
- {poolDenom.toUpperCase()}
+ {poolDenom.toUpperCase()}
|
diff --git a/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx b/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx
index e3bbe217..273cca77 100644
--- a/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx
+++ b/src/drops/pages/MyDeposits/components/Modals/EditDepositModal/EditDepositModal.tsx
@@ -113,7 +113,7 @@ const EditDepositModal = ({ deposit }: { deposit: DepositModel | null }) => {
-
+
diff --git a/src/drops/pages/Pools/Pools.tsx b/src/drops/pages/Pools/Pools.tsx
index c20a447b..58d55dcc 100644
--- a/src/drops/pages/Pools/Pools.tsx
+++ b/src/drops/pages/Pools/Pools.tsx
@@ -35,7 +35,7 @@ const Pools = ({}: IProps): JSX.Element => {
drawEndAt={pool.nextDrawAt || new Date()}
denom={DenomsUtils.getNormalDenom(pool.nativeDenom)}
poolId={pool.poolId.toString()}
- tvl={NumbersUtils.convertUnitNumber(pool.tvlAmount)}
+ tvl={NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom)}
estimatedPrize={pool.estimatedPrizeToWin?.amount}
apy={pool.apy}
ctaText={I18n.t('depositDrops.pools.ctaText')}
diff --git a/src/locales/en.ts b/src/locales/en.ts
index 86b4f39a..fcbc00f1 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -85,6 +85,9 @@ export default {
claimAndCompound: 'Failed to compound prizes',
withdrawalRetry: 'Failed to retry withdrawal #{{ withdrawalId }} to pool #{{ poolId }}',
},
+ warning: {
+ ibcTransfer: 'Your IBC Transfer is still in progress, you may encounter issues while depositing so please wait a few minutes. Check transaction on
Mintscan',
+ },
success: {
wallet: 'Successfully connected',
ibcTransfer: 'Successfully transferred {{ amount }} {{ denom }} to {{ chain }}',
diff --git a/src/pages/Deposit/Deposit.tsx b/src/pages/Deposit/Deposit.tsx
index 95c1322b..048780e6 100644
--- a/src/pages/Deposit/Deposit.tsx
+++ b/src/pages/Deposit/Deposit.tsx
@@ -48,7 +48,8 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => {
const [currentStep, setCurrentStep] = useState(
existsInLumBalances &&
denom !== LUM_DENOM &&
- ((!isDrop && NumbersUtils.convertUnitNumber(existsInLumBalances.amount) > NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0')) || isDrop)
+ ((!isDrop && NumbersUtils.convertUnitNumber(existsInLumBalances.amount, existsInLumBalances.denom) > NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom)) ||
+ isDrop)
? 1
: 0,
);
@@ -171,8 +172,8 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => {
.required(I18n.t('errors.generic.required', { field: 'Amount' }))
.test(
'min-deposit',
- () => I18n.t('errors.deposit.lessThanMinDeposit', { minDeposit: NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0'), denom: denom?.toUpperCase() }),
- (value) => (pool && pool.minDepositAmount && value ? Number(value) >= NumbersUtils.convertUnitNumber(pool.minDepositAmount) : false),
+ () => I18n.t('errors.deposit.lessThanMinDeposit', { minDeposit: NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom), denom: denom?.toUpperCase() }),
+ (value) => (pool && pool.minDepositAmount && value ? Number(value) >= NumbersUtils.convertUnitNumber(pool.minDepositAmount, pool.nativeDenom) : false),
),
}),
onSubmit: async (values) => {
@@ -691,7 +692,7 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => {
const onDepositDrop = async (pool: PoolModel, deposits: { amount: string; winnerAddress: string }[], onDepositCallback: (batchNum: number) => void, startIndex: number) => {
const maxAmount = Number(WalletUtils.getMaxAmount(pool.nativeDenom, lumWallet?.balances || []));
- const depositAmountNumber = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount), 0);
+ const depositAmountNumber = deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount, pool.nativeDenom), 0);
if (depositAmountNumber > maxAmount) {
const prev = depositAmountNumber.toFixed(6);
@@ -1024,7 +1025,7 @@ const Deposit = ({ isDrop }: { isDrop: boolean }) => {
},
}}
onClose={() => {
- dispatch.wallet.reloadOtherWalletInfo({ address: otherWallet.address });
+ dispatch.wallet.reloadOtherWalletInfo(null);
}}
/>
diff --git a/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx b/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx
index 050ceb32..60b43ea7 100644
--- a/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx
+++ b/src/pages/Deposit/components/DepositSteps/DepositSteps.tsx
@@ -3,7 +3,7 @@ import { FormikProps } from 'formik';
import numeral from 'numeral';
import { useNavigate, useParams } from 'react-router-dom';
import { useSelector } from 'react-redux';
-import { Coin, LUM_DENOM, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript';
+import { Coin, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript';
import { DepositState } from '@lum-network/sdk-javascript/build/codegen/lum/network/millions/deposit';
import Assets from 'assets';
@@ -69,9 +69,7 @@ const DepositStep = (
const navigate = useNavigate();
const { denom } = useParams
();
- const [depositAmount, setDepositAmount] = useState(
- initialAmount ? (NumbersUtils.convertUnitNumber(initialAmount, MICRO_LUM_DENOM, LUM_DENOM) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6) : amount,
- );
+ const [depositAmount, setDepositAmount] = useState(initialAmount ? (parseFloat(initialAmount) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6) : amount);
const [poolToDeposit, setPoolToDeposit] = useState(currentPool);
const [isModifying, setIsModifying] = useState(currentPool.nativeDenom === MICRO_LUM_DENOM);
const [error, setError] = useState('');
@@ -90,7 +88,7 @@ const DepositStep = (
useEffect(() => {
if (initialAmount) {
- setDepositAmount((NumbersUtils.convertUnitNumber(initialAmount, MICRO_LUM_DENOM, LUM_DENOM) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6));
+ setDepositAmount((parseFloat(initialAmount) - (currentPool.nativeDenom === MICRO_LUM_DENOM ? 0.005 : 0)).toFixed(6));
}
}, [initialAmount]);
@@ -131,7 +129,9 @@ const DepositStep = (
) : (
@@ -242,7 +242,7 @@ const ShareStep = ({ txInfos, price, title, subtitle, onTwitterShare }: { txInfo
withoutPadding
className='step-3-cta-container d-flex flex-row align-items-center text-start p-4 w-100'
onClick={() => {
- window.open(`${NavigationConstants.MINTSCAN}/tx/${txInfos.hash}`, '_blank');
+ window.open(`${NavigationConstants.MINTSCAN_LUM}/tx/${txInfos.hash}`, '_blank');
}}
>
@@ -304,7 +304,7 @@ const DepositSteps = (props: Props) => {
useEffect(() => {
if (!amountFromLocationState) {
const existsInLumBalances = lumWallet?.balances?.find((balance) => balance.denom === currentPool.nativeDenom);
- setInitialAmount(existsInLumBalances && currentPool.nativeDenom !== MICRO_LUM_DENOM ? existsInLumBalances.amount : '0');
+ setInitialAmount(existsInLumBalances && currentPool.nativeDenom !== MICRO_LUM_DENOM ? NumbersUtils.convertUnitNumber(existsInLumBalances.amount, currentPool.nativeDenom).toFixed(6) : '0');
}
}, [lumWallet]);
@@ -342,7 +342,7 @@ const DepositSteps = (props: Props) => {
hash: res.hash.toUpperCase(),
amount: numeral(depositAmount).format('0,0[.]00'),
denom: DenomsUtils.getNormalDenom(poolToDeposit.nativeDenom).toUpperCase(),
- tvl: numeral(NumbersUtils.convertUnitNumber(poolToDeposit.tvlAmount) + Number(depositAmount)).format('0,0'),
+ tvl: numeral(NumbersUtils.convertUnitNumber(poolToDeposit.tvlAmount, poolToDeposit.nativeDenom) + Number(depositAmount)).format('0,0'),
poolId: poolToDeposit.poolId.toString(),
});
}
diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx
index 94bbb59f..a6b2c9be 100644
--- a/src/pages/Home/Home.tsx
+++ b/src/pages/Home/Home.tsx
@@ -20,7 +20,7 @@ const Home = () => {
const biggestAprPrizes = useSelector((state: RootState) => state.prizes.biggestAprPrizes);
const navigate = useNavigate();
- const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0);
+ const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0);
return (
diff --git a/src/pages/Landing/Landing.tsx b/src/pages/Landing/Landing.tsx
index 4f891344..8f6f9afc 100644
--- a/src/pages/Landing/Landing.tsx
+++ b/src/pages/Landing/Landing.tsx
@@ -34,7 +34,7 @@ const Landing = () => {
};
const pools = useSelector((state: RootState) => state.pools.pools);
const prices = useSelector((state: RootState) => state.stats.prices);
- const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0);
+ const tvl = pools.reduce((acc, pool) => acc + NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[DenomsUtils.getNormalDenom(pool.nativeDenom)] || 1), 0);
const timeline = useRef();
const { width } = useWindowSize();
@@ -374,7 +374,7 @@ const Landing = () => {
{pools.slice(0, 3).map((pool, index) => (
-
+
))}
{poolsPlaceholders.map((_, index) => (
diff --git a/src/pages/Landing/components/PoolCard.tsx b/src/pages/Landing/components/PoolCard.tsx
index a67111a0..77b21883 100644
--- a/src/pages/Landing/components/PoolCard.tsx
+++ b/src/pages/Landing/components/PoolCard.tsx
@@ -13,22 +13,23 @@ interface IProps {
const PoolCard = ({ denom, tvl, prize }: IProps) => {
const prices = useSelector((state: RootState) => state.stats?.prices);
- const price = prices?.[denom];
+ const normalDenom = DenomsUtils.getNormalDenom(denom);
+ const price = prices?.[normalDenom];
return (
-
})
+
- {denom}
+ {normalDenom}
{I18n.t('landing.pools.deposited')}
- {numeral(NumbersUtils.convertUnitNumber(tvl)).format('0,0')} {denom}
+ {numeral(NumbersUtils.convertUnitNumber(tvl, denom)).format('0,0')} {normalDenom}
- ≃${price ? numeral(NumbersUtils.convertUnitNumber(tvl) * price).format('0,0') : ' --'}
+ ≃${price ? numeral(NumbersUtils.convertUnitNumber(tvl, denom) * price).format('0,0') : ' --'}
{I18n.t('landing.pools.prizeToWin')}
diff --git a/src/pages/MySavings/MySavings.tsx b/src/pages/MySavings/MySavings.tsx
index 1d0ffd21..a6532809 100644
--- a/src/pages/MySavings/MySavings.tsx
+++ b/src/pages/MySavings/MySavings.tsx
@@ -151,7 +151,7 @@ const MySavings = () => {
const renderAsset = (asset: Coin) => {
const icon = DenomsUtils.getIconFromDenom(asset.denom);
const normalDenom = DenomsUtils.getNormalDenom(asset.denom);
- const amount = NumbersUtils.convertUnitNumber(asset.amount);
+ const amount = NumbersUtils.convertUnitNumber(asset.amount, asset.denom);
const bondedAmount = 0;
const price = prices?.[normalDenom];
const usdAmount = price ? amount * price : 0;
diff --git a/src/pages/MySavings/components/DepositTable/DepositTable.tsx b/src/pages/MySavings/components/DepositTable/DepositTable.tsx
index b8e2786e..b9e78a58 100644
--- a/src/pages/MySavings/components/DepositTable/DepositTable.tsx
+++ b/src/pages/MySavings/components/DepositTable/DepositTable.tsx
@@ -50,7 +50,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on
Firebase.logEvent(FirebaseConstants.ANALYTICS_EVENTS.LEAVE_POOL_CLICK, {
pool_id: deposit.poolId?.toString(),
deposit_id: deposit.depositId?.toString(),
- amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0),
+ amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0, deposit.amount?.denom),
denom: DenomsUtils.getNormalDenom(deposit.amount?.denom || ''),
});
onLeavePool(deposit as DepositModel);
@@ -117,7 +117,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on
}
}
- const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0;
+ const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0;
const ActionsContainer = ({ children }: { children: JSX.Element[] }) => {
if (winSizes.width < Breakpoints.MD) {
@@ -134,7 +134,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on
- {' '}
+ {' '}
{DenomsUtils.getNormalDenom(deposit.amount?.denom || '').toUpperCase()}
{deposit.isSponsor && (
@@ -170,7 +170,7 @@ const DepositTable = ({ deposits, pools, prices, onLeavePool, onDepositRetry, on
const renderRow = (deposit: AggregatedDepositModel, index: number) => {
if (deposit.deposits.length > 1) {
- const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0') * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0;
+ const usdPrice = NumbersUtils.convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom) * prices[DenomsUtils.getNormalDenom(deposit.amount?.denom || '')] || 0;
return (
- {' '}
+ {' '}
{DenomsUtils.getNormalDenom(deposit.amount?.denom || '').toUpperCase()}
diff --git a/src/pages/MySavings/components/Modals/Claim/Claim.tsx b/src/pages/MySavings/components/Modals/Claim/Claim.tsx
index 03d87b76..371c08a6 100644
--- a/src/pages/MySavings/components/Modals/Claim/Claim.tsx
+++ b/src/pages/MySavings/components/Modals/Claim/Claim.tsx
@@ -63,7 +63,7 @@ const ShareClaim = ({ infos, prices, modalRef, onTwitterShare }: { infos: ShareI
withoutPadding
className='step-3-cta-container d-flex flex-row align-items-center text-start p-4 w-100'
onClick={() => {
- window.open(`${NavigationConstants.MINTSCAN}/tx/${infos.hash}`, '_blank');
+ window.open(`${NavigationConstants.MINTSCAN_LUM}/tx/${infos.hash}`, '_blank');
}}
>
@@ -165,7 +165,9 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => {
if (denomExistIndex === -1) {
amount.push({
amount: numeral(
- prizes.filter((p) => p.amount?.denom === prize.amount?.denom).reduce((acc, prize) => (prize.amount ? acc + NumbersUtils.convertUnitNumber(prize.amount.amount) : acc), 0),
+ prizes
+ .filter((p) => p.amount?.denom === prize.amount?.denom)
+ .reduce((acc, prize) => (prize.amount ? acc + NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) : acc), 0),
).format('0,0.000000'),
denom: DenomsUtils.getNormalDenom(prize.amount?.denom || ''),
});
@@ -177,7 +179,7 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => {
setShareInfos({
hash: res.hash.toUpperCase(),
amount,
- tvl: numeral(NumbersUtils.convertUnitNumber(pool?.tvlAmount || '')).format('0,0'),
+ tvl: numeral(NumbersUtils.convertUnitNumber(pool?.tvlAmount || '', pool?.nativeDenom)).format('0,0'),
compounded: compound,
poolId: pool?.poolId.toString() || '',
});
@@ -248,8 +250,8 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => {
for (const pToDeposit of toDeposit) {
const pool = pools.find((p) => p.poolId === pToDeposit.pool.poolId);
- const depositAmount = NumbersUtils.convertUnitNumber(pToDeposit.amount);
- const minDeposit = NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0');
+ const depositAmount = NumbersUtils.convertUnitNumber(pToDeposit.amount, pToDeposit.pool.nativeDenom);
+ const minDeposit = NumbersUtils.convertUnitNumber(pool?.minDepositAmount || '0', pool?.nativeDenom);
if (!pool || (pool && depositAmount < minDeposit)) {
blockCompound = true;
@@ -309,7 +311,10 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => {
prizes.reduce(
(acc, prize) =>
acc +
- (prize.amount ? NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1) : 0),
+ (prize.amount
+ ? NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) *
+ (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1)
+ : 0),
0,
),
).format('0,0')}
@@ -330,13 +335,17 @@ const Claim = ({ prizes, prices, pools, limit }: Props) => {
-
+
{DenomsUtils.getNormalDenom(prize.amount.denom).toUpperCase()}
$
{numeral(
- NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1),
+ NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) *
+ (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] || 1),
).format('0,0.00')}
diff --git a/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx b/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx
index e6703aef..8278503a 100644
--- a/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx
+++ b/src/pages/MySavings/components/Modals/LeavePool/LeavePool.tsx
@@ -34,7 +34,7 @@ const LeavePool = ({ deposit }: Props) => {
Firebase.logEvent(FirebaseConstants.ANALYTICS_EVENTS.LEAVE_POOL_CONFIRMED, {
pool_id: deposit.poolId?.toString(),
deposit_id: deposit.depositId?.toString(),
- amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0),
+ amount: NumbersUtils.convertUnitNumber(deposit.amount?.amount || 0, deposit.amount?.denom),
denom: DenomsUtils.getNormalDenom(deposit.amount?.denom || ''),
});
@@ -106,7 +106,7 @@ const LeavePool = ({ deposit }: Props) => {
{DenomsUtils.getNormalDenom(deposit?.amount?.denom || '').toUpperCase()}
-
+
diff --git a/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx b/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx
index 61a65a43..df87df30 100644
--- a/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx
+++ b/src/pages/MySavings/components/Modals/TransferOut/TransferOut.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import React, { useEffect, useMemo, useState } from 'react';
import { Coin, MICRO_LUM_DENOM } from '@lum-network/sdk-javascript';
import { useDispatch } from 'react-redux';
import { useFormik } from 'formik';
@@ -117,6 +117,8 @@ const TransferOut = ({ lumWallet, otherWallets, asset, isLoading, balances, pric
provider: WalletUtils.getAutoconnectProvider(),
});
+ const balance = useMemo(() => balances.find((balance) => balance.denom === form.values.denom), [form]);
+
return (
@@ -138,7 +140,7 @@ const TransferOut = ({ lumWallet, otherWallets, asset, isLoading, balances, pric
className='mt-5'
label={I18n.t('mySavings.transferOutModal.amountInput.label')}
sublabel={I18n.t('mySavings.transferOutModal.amountInput.sublabel', {
- amount: NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balances.length > 0 ? balances[0].amount : '0')),
+ amount: balance ? NumbersUtils.formatTo6digit(NumbersUtils.convertUnitNumber(balance.amount, balance.denom)) : 0,
denom: DenomsUtils.getNormalDenom(form.values.denom).toUpperCase(),
})}
onMax={() => {
diff --git a/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx b/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx
index 502d8fc3..f35e896a 100644
--- a/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx
+++ b/src/pages/MySavings/components/PrizesHistoryTable/PrizesHistoryTable.tsx
@@ -26,7 +26,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => {
const renderRow = (prize: PrizeModel, index: number) => {
const icon = DenomsUtils.getIconFromDenom(prize.amount.denom);
const normalDenom = DenomsUtils.getNormalDenom(prize.amount.denom);
- const amount = NumbersUtils.convertUnitNumber(prize.amount.amount);
+ const amount = NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom);
const price = prices?.[normalDenom];
let tagType = TagsConstants.Types.UNCLAIMED;
@@ -63,7 +63,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => {
- {prize.amount ? : '--'}
+ {amount ? : '--'}
{DenomsUtils.getNormalDenom(prize.amount.denom || '').toUpperCase()}
{price && {numeral(amount * price).format('$0,0[.]00')}}
@@ -81,7 +81,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => {
const icon = DenomsUtils.getIconFromDenom(prize.amount.denom);
const normalDenom = DenomsUtils.getNormalDenom(prize.amount.denom);
- const amount = NumbersUtils.convertUnitNumber(prize.amount.amount);
+ const amount = NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom);
const price = prices?.[normalDenom];
let tagType = TagsConstants.Types.UNCLAIMED;
@@ -117,7 +117,7 @@ const PrizesHistoryTable = ({ prizes, onPageChange, pagination }: IProps) => {
- {prize.amount ? : '--'}
+ {amount ? : '--'}
{DenomsUtils.getNormalDenom(prize.amount.denom || '').toUpperCase()}
{price && {numeral(amount * price).format('$0,0[.]00')}}
diff --git a/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx b/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx
index 59f297b3..10d4117a 100644
--- a/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx
+++ b/src/pages/MySavings/components/TransationsTable/TransactionsTable.tsx
@@ -64,7 +64,7 @@ const TransactionsTable = ({
) : null}
-
+
{StringsUtils.trunc(transaction.hash)}
@@ -72,10 +72,14 @@ const TransactionsTable = ({
- {transaction.amount.length > 0 ? : '--'}
+ {transaction.amount.length > 0 ? (
+
+ ) : (
+ '--'
+ )}
{DenomsUtils.getNormalDenom(transaction.amount[0]?.denom || 'ulum').toUpperCase()}
- {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount) * price).format('$0,0[.]00')}}
+ {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount, transaction.amount[0].denom) * price).format('$0,0[.]00')}}
|
@@ -110,7 +114,7 @@ const TransactionsTable = ({
@@ -119,10 +123,16 @@ const TransactionsTable = ({
- {transaction.amount.length > 0 ? : '--'}
+ {transaction.amount.length > 0 ? (
+
+ ) : (
+ '--'
+ )}
{DenomsUtils.getNormalDenom(transaction.amount[0]?.denom || 'ulum').toUpperCase()}
- {price && {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount) * price).format('$0,0[.]00')}}
+ {price && (
+ {numeral(NumbersUtils.convertUnitNumber(transaction.amount[0].amount, transaction.amount[0].denom) * price).format('$0,0[.]00')}
+ )}
diff --git a/src/pages/PoolDetails/PoolDetails.tsx b/src/pages/PoolDetails/PoolDetails.tsx
index b7436171..7b5c42da 100644
--- a/src/pages/PoolDetails/PoolDetails.tsx
+++ b/src/pages/PoolDetails/PoolDetails.tsx
@@ -97,8 +97,8 @@ const PoolDetails = () => {
const drawHistoryHeaders = I18n.t('poolDetails.drawsHistory.tableHeaders', { returnObjects: true });
const prizeDistributionHeaders = I18n.t('poolDetails.prizeDistribution.tableHeaders', { returnObjects: true });
- const sponsorshipAmount = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount);
- const usersDepositsAmount = NumbersUtils.convertUnitNumber(pool.tvlAmount || '0') - sponsorshipAmount;
+ const sponsorshipAmount = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount, pool.nativeDenom);
+ const usersDepositsAmount = NumbersUtils.convertUnitNumber(pool.tvlAmount || '0', pool.nativeDenom) - sponsorshipAmount;
const userDeposits = lumWallet?.deposits.find((deposit) => (poolId ? Number(deposit.poolId) === Number(poolId) : deposit.amount?.denom === 'u' + denom));
const avgDeposit = (usersDepositsAmount / Number(pool.depositorsCount)) * (prices[denom] ?? 0);
@@ -137,7 +137,7 @@ const PoolDetails = () => {
{I18n.t('home.totalValueLocked')}
- ${numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount) * (prices[denom] || 1)).format('0,0')}
+ ${numeral(NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom) * (prices[denom] || 1)).format('0,0')}
|
-
+
{denom.toUpperCase()}
-
+
|
@@ -646,7 +650,7 @@ const PoolDetails = () => {
]}
/>
-
+
);
};
diff --git a/src/pages/PoolDetails/components/DrawDetailsModal/DrawDetailsModal.tsx b/src/pages/PoolDetails/components/DrawDetailsModal/DrawDetailsModal.tsx
index c994c3d0..c2384c70 100644
--- a/src/pages/PoolDetails/components/DrawDetailsModal/DrawDetailsModal.tsx
+++ b/src/pages/PoolDetails/components/DrawDetailsModal/DrawDetailsModal.tsx
@@ -20,14 +20,17 @@ const DrawDetails = ({ draw, poolDenom, prices, modalRef }: { draw: DrawModel |
const navigate = useNavigate();
const { width: windowWidth } = useWindowSize();
+ const normalDenom = DenomsUtils.getNormalDenom(poolDenom);
+ const drawRemainingPrizePool = NumbersUtils.convertUnitNumber(draw?.prizePool?.amount || 0, poolDenom) - NumbersUtils.convertUnitNumber(draw?.totalWinAmount || 0, poolDenom);
+
return (
{draw ? (
-
})
+
- {poolDenom.toUpperCase()} {I18n.t('common.pool')}
+ {normalDenom.toUpperCase()} {I18n.t('common.pool')}
@@ -88,10 +91,10 @@ const DrawDetails = ({ draw, poolDenom, prices, modalRef }: { draw: DrawModel |
- {poolDenom.toUpperCase()}
+ {normalDenom.toUpperCase()}
-
+
|
@@ -106,25 +109,21 @@ const DrawDetails = ({ draw, poolDenom, prices, modalRef }: { draw: DrawModel |
{' '}
- {poolDenom.toUpperCase()}
+ {normalDenom.toUpperCase()}
-
+
diff --git a/src/pages/Winners/components/LatestWinnersTable/LatestWinnersTable.tsx b/src/pages/Winners/components/LatestWinnersTable/LatestWinnersTable.tsx
index e523376f..7f6f4dae 100644
--- a/src/pages/Winners/components/LatestWinnersTable/LatestWinnersTable.tsx
+++ b/src/pages/Winners/components/LatestWinnersTable/LatestWinnersTable.tsx
@@ -45,11 +45,11 @@ const LatestWinnersTable = ({ prizes, metadata, visibleItem, onPageChange, onIte
- {' '}
+ {' '}
{DenomsUtils.getNormalDenom(prize.amount.denom).toUpperCase()}
- {numeral(NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] ?? 0)).format('$0,0.00')}
+ {numeral(NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] ?? 0)).format('$0,0.00')}
|
@@ -93,11 +93,11 @@ const LatestWinnersTable = ({ prizes, metadata, visibleItem, onPageChange, onIte
- {' '}
+ {' '}
{DenomsUtils.getNormalDenom(prize.amount.denom).toUpperCase()}
- {numeral(NumbersUtils.convertUnitNumber(prize.amount.amount) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] ?? 0)).format('$0,0.00')}
+ {numeral(NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom) * (prices[DenomsUtils.getNormalDenom(prize.amount.denom)] ?? 0)).format('$0,0.00')}
diff --git a/src/pages/Winners/components/LuckiestWinnerCard/LuckiestWinnerCard.tsx b/src/pages/Winners/components/LuckiestWinnerCard/LuckiestWinnerCard.tsx
index 4fa5593d..14a61c7e 100644
--- a/src/pages/Winners/components/LuckiestWinnerCard/LuckiestWinnerCard.tsx
+++ b/src/pages/Winners/components/LuckiestWinnerCard/LuckiestWinnerCard.tsx
@@ -29,7 +29,7 @@ const LuckiestWinnerCard = ({ prize, rank }: IProps) => {
return (
{
- window.open(`${NavigationConstants.MINTSCAN}/address/${prize.address}`, '_blank')?.focus();
+ window.open(`${NavigationConstants.MINTSCAN_LUM}/address/${prize.address}`, '_blank')?.focus();
}}
className='luckiest-winner-card p-3 p-xl-4'
withoutPadding
diff --git a/src/redux/models/pools.ts b/src/redux/models/pools.ts
index 0e3e4d6f..2691dc17 100644
--- a/src/redux/models/pools.ts
+++ b/src/redux/models/pools.ts
@@ -139,7 +139,7 @@ export const pools = createModel()({
for (const pool of pools) {
// Calculate Prize to win
- const availablePrizePool = NumbersUtils.convertUnitNumber(pool.availablePrizePool?.amount || '0');
+ const availablePrizePool = NumbersUtils.convertUnitNumber(pool.availablePrizePool?.amount || '0', await DenomsUtils.getDenomFromIbc(pool.availablePrizePool?.denom || ''));
if (pool.nativeDenom !== MICRO_LUM_DENOM && !pool.internalInfos) {
continue;
@@ -156,7 +156,7 @@ export const pools = createModel()({
const prizePool =
availablePrizePool +
- NumbersUtils.convertUnitNumber(bankBalance ? parseInt(bankBalance.amount, 10) : 0) +
+ NumbersUtils.convertUnitNumber(bankBalance ? parseInt(bankBalance.amount, 10) : 0, pool.nativeDenom) +
NumbersUtils.convertUnitNumber(
stakingRewards
? stakingRewards.total
@@ -164,6 +164,7 @@ export const pools = createModel()({
.reduce((a, b) => a + parseInt(b.amount, 10) / ApiConstants.CLIENT_PRECISION, 0)
.toString()
: '0',
+ pool.nativeDenom,
);
pool.currentPrizeToWin = { amount: prizePool, denom: pool.nativeDenom };
@@ -179,21 +180,21 @@ export const pools = createModel()({
nativeApy = osmoApy / 100;
} else {
const [bonding, supply, communityTaxRate, inflation] = await Promise.all([
- client.getBonding(),
+ client.getBonding(pool.nativeDenom),
client.getSupply(pool.nativeDenom),
client.getCommunityTaxRate(),
client.getInflation(),
]);
-
- const stakingRatio = NumbersUtils.convertUnitNumber(bonding || '0') / NumbersUtils.convertUnitNumber(supply || '1');
+ const stakingRatio = (bonding || 0) / (supply || 1);
nativeApy = ((inflation || 0) * (1 - (communityTaxRate || 0))) / stakingRatio;
}
- const poolTvl = NumbersUtils.convertUnitNumber(pool.tvlAmount);
- const poolSponsorTvl = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount);
+ const poolTvl = NumbersUtils.convertUnitNumber(pool.tvlAmount, pool.nativeDenom);
+ const poolSponsorTvl = NumbersUtils.convertUnitNumber(pool.sponsorshipAmount, pool.nativeDenom);
+ const tvlMinusSponsor = poolTvl - poolSponsorTvl;
- const variableApy = (nativeApy * (1 - (feesStakers || 0)) * poolTvl) / (poolTvl - poolSponsorTvl);
+ const variableApy = tvlMinusSponsor === 0 ? 0 : (nativeApy * (1 - (feesStakers || 0)) * poolTvl) / tvlMinusSponsor;
pool.apy = variableApy * 100;
diff --git a/src/redux/models/wallet.ts b/src/redux/models/wallet.ts
index 773aa834..c2c1366f 100644
--- a/src/redux/models/wallet.ts
+++ b/src/redux/models/wallet.ts
@@ -1,6 +1,6 @@
import axios from 'axios';
-import { Coin, LUM_DENOM, MICRO_LUM_DENOM, LUM_EXPONENT, LumBech32Prefixes, convertUnit } from '@lum-network/sdk-javascript';
+import { Coin, LUM_DENOM, MICRO_LUM_DENOM, LUM_EXPONENT, LumBech32Prefixes } from '@lum-network/sdk-javascript';
import { createModel } from '@rematch/core';
import { LumApi } from 'api';
@@ -385,8 +385,8 @@ export const wallet = createModel()({
await dispatch.wallet.getDepositsAndWithdrawalsDrops(address);
}
},
- async reloadOtherWalletInfo(payload: { address: string }, state) {
- const { address } = payload;
+ async reloadOtherWalletInfo(_, state) {
+ const otherWallets = state.wallet.otherWallets;
const poolsChainIds = state.pools.pools.reduce((acc, pool) => {
if (!acc.includes(pool.chainId) && !pool.chainId.includes('lum')) {
@@ -397,7 +397,6 @@ export const wallet = createModel()({
for (const chainId of poolsChainIds) {
const pool = state.pools.pools.find((pool) => pool.chainId === chainId);
-
if (!pool) {
continue;
}
@@ -406,20 +405,27 @@ export const wallet = createModel()({
continue;
}
+ const poolNativeDenom = DenomsUtils.getNormalDenom(pool.nativeDenom);
+ const wallet = otherWallets[poolNativeDenom];
+
+ if (!wallet) {
+ continue;
+ }
+
const client = new WalletClient();
await client.connect(pool.internalInfos.rpc);
- const res = await client.getWalletBalance(address);
+ const res = await client.getWalletBalance(wallet.address);
dispatch.wallet.setOtherWalletData({
- address,
+ address: wallet.address,
balances: res
? DenomsUtils.translateIbcBalances([...res.balances], pool.transferChannelId, pool.nativeDenom).filter(
(balance) => state.pools.pools.find((pool) => pool.nativeDenom === balance.denom) || balance.denom === MICRO_LUM_DENOM,
)
: [],
- denom: DenomsUtils.getNormalDenom(pool.nativeDenom),
+ denom: poolNativeDenom,
});
client.disconnect();
@@ -491,8 +497,8 @@ export const wallet = createModel()({
if (prizesToClaim) {
prizesToClaimSorted = prizesToClaim.prizes
.sort((a, b) => {
- const aAmount = NumbersUtils.convertUnitNumber(a.amount?.amount || '0');
- const bAmount = NumbersUtils.convertUnitNumber(b.amount?.amount || '0');
+ const aAmount = NumbersUtils.convertUnitNumber(a.amount?.amount || '0', a.amount?.denom);
+ const bAmount = NumbersUtils.convertUnitNumber(b.amount?.amount || '0', b.amount?.denom);
return bAmount - aAmount;
})
@@ -539,9 +545,9 @@ export const wallet = createModel()({
}
if (totalPrizesWon[prize.amount.denom]) {
- totalPrizesWon[prize.amount.denom] += NumbersUtils.convertUnitNumber(prize.amount.amount);
+ totalPrizesWon[prize.amount.denom] += NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom);
} else {
- totalPrizesWon[prize.amount.denom] = NumbersUtils.convertUnitNumber(prize.amount.amount);
+ totalPrizesWon[prize.amount.denom] = NumbersUtils.convertUnitNumber(prize.amount.amount, prize.amount.denom);
}
}
@@ -571,13 +577,7 @@ export const wallet = createModel()({
async ibcTransfer(payload: IbcTransferPayload, state): Promise<{ hash: string; error: string | null | undefined } | null> {
const { toAddress, fromAddress, amount, normalDenom, type, ibcChannel, chainId } = payload;
- const convertedAmount = convertUnit(
- {
- amount: amount.amount,
- denom: LUM_DENOM,
- },
- MICRO_LUM_DENOM,
- );
+ const convertedAmount = NumbersUtils.convertUnitNumber(amount.amount, normalDenom, false).toFixed();
const coin = {
amount: convertedAmount,
@@ -631,15 +631,18 @@ export const wallet = createModel()({
throw new Error(result?.error || undefined);
}
- while (true) {
+ let balanceUpdated = false;
+
+ for (let ticks = 0; ticks < 6; ticks++) {
await new Promise((resolve) => {
setTimeout(resolve, 10000);
});
const newBalances = await dispatch.wallet.getLumWalletBalances(null);
+ const res = WalletUtils.updatedBalances([...(state.wallet.lumWallet?.balances ?? [])], newBalances);
- if (WalletUtils.updatedBalances(state.wallet.lumWallet?.balances, newBalances)) {
- break;
+ if (res) {
+ balanceUpdated = res;
}
}
@@ -654,12 +657,26 @@ export const wallet = createModel()({
}
}
- ToastUtils.updateLoadingToast(toastId, 'success', {
- content: I18n.t('success.ibcTransfer', { amount: amount.amount, denom: normalDenom.toUpperCase(), chain: type === 'withdraw' ? 'native chain' : 'Lum Network' }),
- });
+ if (!balanceUpdated) {
+ ToastUtils.updateLoadingToast(
+ toastId,
+ 'warning',
+ {
+ content: I18n.t('warning.ibcTransfer', { link: `${NavigationConstants.MINTSCAN}/${chainId.split('-')[0]}/tx/${result.hash}` }),
+ },
+ false,
+ {
+ closeButton: true,
+ },
+ );
+ } else {
+ ToastUtils.updateLoadingToast(toastId, 'success', {
+ content: I18n.t('success.ibcTransfer', { amount: amount.amount, denom: normalDenom.toUpperCase(), chain: type === 'withdraw' ? 'native chain' : 'Lum Network' }),
+ });
+ }
dispatch.wallet.reloadWalletInfos({ address: type === 'withdraw' ? fromAddress : toAddress, force: true });
- dispatch.wallet.reloadOtherWalletInfo({ address: type === 'withdraw' ? toAddress : fromAddress });
+ dispatch.wallet.reloadOtherWalletInfo(null);
return result;
} catch (e) {
@@ -1017,7 +1034,7 @@ export const wallet = createModel()({
content: I18n.t(batchCount === 1 ? 'success.deposit' : 'success.multiDeposit', {
count: batchCount,
denom: DenomsUtils.getNormalDenom(pool.nativeDenom).toUpperCase(),
- amount: deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount), 0),
+ amount: deposits.reduce((acc, deposit) => acc + NumbersUtils.convertUnitNumber(deposit.amount, pool.nativeDenom), 0),
}),
});
diff --git a/src/utils/numbers.ts b/src/utils/numbers.ts
index 3db02346..efce80fd 100644
--- a/src/utils/numbers.ts
+++ b/src/utils/numbers.ts
@@ -1,28 +1,42 @@
import numeral from 'numeral';
import { Coin } from '@keplr-wallet/types';
import { LUM_DENOM, MICRO_LUM_DENOM, convertUnit } from '@lum-network/sdk-javascript';
+import { DenomsConstants } from 'constant';
-export const convertUnitNumber = (nb: number | string, fromDenom = MICRO_LUM_DENOM, toDenom = LUM_DENOM): number => {
+export const convertUnitNumber = (nb: number | string, fromDenom = MICRO_LUM_DENOM, fromMinimalDenom = true): number => {
let amount: string;
if (!nb) {
return 0;
}
+ const specificExponent = DenomsConstants.SPECIFIC_DENOM_DECIMALS[fromDenom];
+ const fromMinimal = fromMinimalDenom === true || fromDenom.startsWith('u');
+
+ if (specificExponent) {
+ const nbToNumber = Number(nb);
+
+ if (Number.isNaN(nbToNumber)) {
+ return NaN;
+ }
+
+ return fromMinimalDenom ? nbToNumber / 10 ** specificExponent : nbToNumber * 10 ** specificExponent;
+ }
+
if (typeof nb === 'string') {
const split = nb.split('.');
- amount = split[0];
+ amount = fromMinimal ? split[0] : nb;
} else {
- amount = nb.toFixed(fromDenom.startsWith('u') ? 0 : 6);
+ amount = nb.toFixed(fromMinimal ? 0 : 6);
}
const coin = {
amount,
- denom: fromDenom,
+ denom: fromMinimal ? MICRO_LUM_DENOM : LUM_DENOM,
};
- return parseFloat(convertUnit(coin, toDenom));
+ return parseFloat(convertUnit(coin, fromMinimal ? LUM_DENOM : MICRO_LUM_DENOM));
};
export const formatUnit = (coin: Coin, moreDecimal?: boolean): string => {
diff --git a/src/utils/pools.ts b/src/utils/pools.ts
index 06757fb5..e13ae55d 100644
--- a/src/utils/pools.ts
+++ b/src/utils/pools.ts
@@ -36,8 +36,8 @@ export const getBestPrize = (prizes: Prize[], prices: { [key: string]: number })
export const getWinningChances = (inputAmount: number, pool: PoolModel, prices?: { [index: string]: number } | number) => {
const amount = prices ? inputAmount / (typeof prices === 'number' ? prices : prices[getNormalDenom(pool.nativeDenom)] || 1) : inputAmount;
- const tvl = convertUnitNumber(pool.tvlAmount);
- const sponsorTvl = convertUnitNumber(pool.sponsorshipAmount);
+ const tvl = convertUnitNumber(pool.tvlAmount, pool.nativeDenom);
+ const sponsorTvl = convertUnitNumber(pool.sponsorshipAmount, pool.nativeDenom);
const prizeStrat = pool.prizeStrategy;
let avgPrizesDrawn = 0;
let estimated = 0;
diff --git a/src/utils/toast.tsx b/src/utils/toast.tsx
index c65424e7..fafbd317 100644
--- a/src/utils/toast.tsx
+++ b/src/utils/toast.tsx
@@ -39,13 +39,13 @@ export const showLoadingToast = (content: ToastContentProps, options?: ToastOpti
});
};
-export const updateLoadingToast = (toastId: Id, type: TypeOptions, content: ToastContentProps, options?: ToastOptions): void => {
+export const updateLoadingToast = (toastId: Id, type: TypeOptions, content: ToastContentProps, autoClose = true, options?: ToastOptions): void => {
toast.update(toastId, {
render: ,
icon: () =>
,
type,
isLoading: false,
- autoClose: 5000,
+ autoClose: autoClose ? 5000 : false,
...options,
});
};
diff --git a/src/utils/txs.ts b/src/utils/txs.ts
index b541130e..b3e0a660 100644
--- a/src/utils/txs.ts
+++ b/src/utils/txs.ts
@@ -1,4 +1,4 @@
-import { Coin, LUM_DENOM, LumRegistry, MICRO_LUM_DENOM, lum, parseRawLogs, toJSON } from '@lum-network/sdk-javascript';
+import { Coin, LUM_DENOM, LumRegistry, lum, parseRawLogs, toJSON } from '@lum-network/sdk-javascript';
import Assets from 'assets';
import { TransactionModel } from 'models';
import { I18n, NumbersUtils } from 'utils';
@@ -69,13 +69,13 @@ export const findAmountInLogs = async (logs: any, event: string, index: number)
export const parseLogs = async (tx: TransactionModel, msg: Any, index: number, logs: any, event: string, formattedTxs: TransactionModel[]) => {
if (tx.amount.length > 0) {
const msgAmount = await findAmountInLogs(logs, event, index);
- const msgAmountNumber = NumbersUtils.convertUnitNumber(msgAmount[0].amount);
+ const msgAmountNumber = NumbersUtils.convertUnitNumber(msgAmount[0].amount, msgAmount[0].denom);
const existingDenomIndex = tx.amount.findIndex((amount) => amount.denom === msgAmount[0].denom);
if (existingDenomIndex > -1) {
- const prevAmountNumber = NumbersUtils.convertUnitNumber(tx.amount[0].amount);
- const amount = NumbersUtils.convertUnitNumber(prevAmountNumber + msgAmountNumber, LUM_DENOM, MICRO_LUM_DENOM).toFixed();
+ const prevAmountNumber = NumbersUtils.convertUnitNumber(tx.amount[0].amount, tx.amount[0].denom);
+ const amount = NumbersUtils.convertUnitNumber(prevAmountNumber + msgAmountNumber, LUM_DENOM).toFixed();
tx.amount[existingDenomIndex].amount = amount;
} else {
const existingTx = formattedTxs.find((formattedTx) => formattedTx.hash === tx.hash && formattedTx.height === tx.height);
@@ -95,8 +95,8 @@ export const parseLogs = async (tx: TransactionModel, msg: Any, index: number, l
],
});
} else {
- const prevAmountNumber = NumbersUtils.convertUnitNumber(existingTx.amount[0].amount);
- const amount = NumbersUtils.convertUnitNumber(prevAmountNumber + msgAmountNumber, LUM_DENOM, MICRO_LUM_DENOM).toFixed();
+ const prevAmountNumber = NumbersUtils.convertUnitNumber(existingTx.amount[0].amount, existingTx.amount[0].denom);
+ const amount = NumbersUtils.convertUnitNumber(prevAmountNumber + msgAmountNumber, LUM_DENOM).toFixed();
existingTx.amount = [
{
diff --git a/src/utils/wallet.ts b/src/utils/wallet.ts
index 7ebfeae4..3e0d301b 100644
--- a/src/utils/wallet.ts
+++ b/src/utils/wallet.ts
@@ -11,7 +11,7 @@ export const getTotalBalance = (balances: Coin[], prices: { [denom: string]: num
balances.forEach((balance) => {
const price = Object.entries(prices).find((price) => price[0] === getNormalDenom(balance.denom));
- const convertedAmount = convertUnitNumber(balance.amount);
+ const convertedAmount = convertUnitNumber(balance.amount, balance.denom);
if (price) {
totalBalance += convertedAmount * price[1];
@@ -43,7 +43,7 @@ export const getTotalBalanceFromDeposits = (deposits: AggregatedDepositModel[] |
.filter((deposit) => deposit.state === DepositState.DEPOSIT_STATE_SUCCESS)
.forEach((deposit) => {
const price = prices ? Object.entries(prices).find((price) => price[0] === getNormalDenom(deposit.amount?.denom || '')) : null;
- const convertedAmount = convertUnitNumber(deposit.amount?.amount || '0');
+ const convertedAmount = convertUnitNumber(deposit.amount?.amount || '0', deposit.amount?.denom);
if (prices && !price) {
missingPrice = true;
@@ -67,7 +67,7 @@ export const getMaxAmount = (denom?: string, balances?: Coin[], feesAmount?: num
const balance = balances?.find((b) => b.denom === denom);
if (balance) {
- let amount = convertUnitNumber(balance.amount);
+ let amount = convertUnitNumber(balance.amount, balance.denom);
if (feesAmount) {
amount -= feesAmount;
diff --git a/src/utils/walletClient.ts b/src/utils/walletClient.ts
index df2f4e67..caa4bf49 100644
--- a/src/utils/walletClient.ts
+++ b/src/utils/walletClient.ts
@@ -4,6 +4,7 @@ import { SigningStargateClient, assertIsDeliverTxSuccess } from '@cosmjs/stargat
import { Coin } from '@keplr-wallet/types';
import { Dec, IntPretty } from '@keplr-wallet/unit';
import { cosmos, fromAscii, getSigningIbcClient, ibc } from '@lum-network/sdk-javascript';
+import { InjectiveStargate } from '@injectivelabs/sdk-ts';
import { ApiConstants, GAS_MULTIPLIER } from 'constant';
import { I18n, NumbersUtils } from 'utils';
@@ -15,7 +16,7 @@ const { transfer } = ibc.applications.transfer.v1.MessageComposer.withTypeUrl;
class WalletClient {
private chainId: string | null = null;
- private walletClient: SigningStargateClient | null = null;
+ private walletClient: SigningStargateClient | InjectiveStargate.InjectiveSigningStargateClient | null = null;
private queryClient: Awaited> | null = null;
// Utils
@@ -29,15 +30,20 @@ class WalletClient {
const { createRPCQueryClient } = cosmos.ClientFactory;
const queryClient = await createRPCQueryClient({ rpcEndpoint: rpc });
- if (offlineSigner) {
- this.walletClient = await getSigningIbcClient({
- rpcEndpoint: rpc,
- signer: offlineSigner,
- });
- }
-
this.queryClient = queryClient;
this.chainId = (await queryClient.cosmos.base.tendermint.v1beta1.getNodeInfo()).nodeInfo?.network || 'lum-network-1';
+
+ if (offlineSigner) {
+ if (this.chainId.includes('injective')) {
+ const client = await InjectiveStargate.InjectiveSigningStargateClient.connectWithSigner(rpc, offlineSigner);
+ this.walletClient = client;
+ } else {
+ this.walletClient = await getSigningIbcClient({
+ rpcEndpoint: rpc,
+ signer: offlineSigner,
+ });
+ }
+ }
} catch (e) {
if (!silent) showErrorToast({ content: I18n.t('errors.client.rpc') });
throw e;
@@ -87,14 +93,14 @@ class WalletClient {
return this.queryClient.cosmos.distribution.v1beta1.delegationTotalRewards({ delegatorAddress: address });
};
- getBonding = async () => {
+ getBonding = async (denom: string) => {
if (this.queryClient === null) {
return null;
}
const bondedTokens = (await this.queryClient.cosmos.staking.v1beta1.pool()).pool?.bondedTokens;
- return bondedTokens ? NumbersUtils.convertUnitNumber(bondedTokens) : null;
+ return bondedTokens ? NumbersUtils.convertUnitNumber(bondedTokens, denom) : null;
};
getSupply = async (denom: string) => {
@@ -104,7 +110,7 @@ class WalletClient {
const supply = (await this.queryClient.cosmos.bank.v1beta1.supplyOf({ denom }))?.amount?.amount;
- return supply ? NumbersUtils.convertUnitNumber(supply) : null;
+ return supply ? NumbersUtils.convertUnitNumber(supply, denom) : null;
};
getCommunityTaxRate = async () => {
diff --git a/yarn.lock b/yarn.lock
index 5100d5dd..eb4d2214 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2912,6 +2912,16 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
+"@ensdomains/ens-validation@^0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@ensdomains/ens-validation/-/ens-validation-0.1.0.tgz#9ebfe66016fbf069a6ebca70c043714f6f02fbe6"
+ integrity sha512-rbDh2K6GfqXvBcJUISaTTYEt3f079WA4ohTE5Lh4/8EaaPAk/9vk3EisMUQV2UVxeFIZQEEyRCIOmRTpqN0W7A==
+
+"@ensdomains/eth-ens-namehash@^2.0.15":
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/@ensdomains/eth-ens-namehash/-/eth-ens-namehash-2.0.15.tgz#5e5f2f24ba802aff8bc19edd822c9a11200cdf4a"
+ integrity sha512-JRDFP6+Hczb1E0/HhIg0PONgBYasfGfDheujmfxaZaAv/NAH4jE6Kf48WbqfRZdxt4IZI3jl3Ri7sZ1nP09lgw==
+
"@eslint/eslintrc@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e"
@@ -3791,6 +3801,16 @@
protobufjs "^7.0.0"
rxjs "^7.4.0"
+"@injectivelabs/core-proto-ts@^0.0.21":
+ version "0.0.21"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/core-proto-ts/-/core-proto-ts-0.0.21.tgz#b52d4bee7556ce57c7c7e2c1ec7f6b920b4c2ffd"
+ integrity sha512-RBxSkRBCty60R/l55/D1jsSW0Aof5dyGFhCFdN3A010KjMv/SzZGGr+6DZPY/hflyFeaJzDv/VTopCymKNRBvQ==
+ dependencies:
+ "@injectivelabs/grpc-web" "^0.0.1"
+ google-protobuf "^3.14.0"
+ protobufjs "^7.0.0"
+ rxjs "^7.4.0"
+
"@injectivelabs/dmm-proto-ts@1.0.16":
version "1.0.16"
resolved "https://registry.yarnpkg.com/@injectivelabs/dmm-proto-ts/-/dmm-proto-ts-1.0.16.tgz#7e2d6652cf31700524c1933d40ffa54c213302c5"
@@ -3801,6 +3821,16 @@
protobufjs "^7.0.0"
rxjs "^7.4.0"
+"@injectivelabs/dmm-proto-ts@1.0.19":
+ version "1.0.19"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/dmm-proto-ts/-/dmm-proto-ts-1.0.19.tgz#fbb3432df9a3a6465a19fe68f3ebbfeb532fbd56"
+ integrity sha512-2FCzCziy1RhzmnkAVIU+Asby/GXAVQqKt5/o1s52j0LJXfJMpiCrV6soLfnjTebj61T+1WvJBPFoZCCiVYBpcw==
+ dependencies:
+ "@injectivelabs/grpc-web" "^0.0.1"
+ google-protobuf "^3.14.0"
+ protobufjs "^7.0.0"
+ rxjs "^7.4.0"
+
"@injectivelabs/exceptions@^1.11.0", "@injectivelabs/exceptions@^1.14.5":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@injectivelabs/exceptions/-/exceptions-1.14.5.tgz#3ee2cb89f591c83bd325487511b3b553b19602d8"
@@ -3812,6 +3842,17 @@
link-module-alias "^1.2.0"
shx "^0.3.2"
+"@injectivelabs/exceptions@^1.14.6":
+ version "1.14.6"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/exceptions/-/exceptions-1.14.6.tgz#86f93815eb6bc60902c43072b8e212146d78614e"
+ integrity sha512-A+URJwygeDjFPhulGMNVw70z738NtpIiCr0W8q4Kr4Ggg30i+AaVAjViYLm56pSMXXpomu9CYJ/sY6ijQn48IQ==
+ dependencies:
+ "@injectivelabs/grpc-web" "^0.0.1"
+ "@injectivelabs/ts-types" "^1.14.6"
+ http-status-codes "^2.2.0"
+ link-module-alias "^1.2.0"
+ shx "^0.3.2"
+
"@injectivelabs/grpc-web-node-http-transport@^0.0.2":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@injectivelabs/grpc-web-node-http-transport/-/grpc-web-node-http-transport-0.0.2.tgz#87c9bbd4db1f70cf18d6a55b54b2cf17d3cf30c0"
@@ -3839,6 +3880,16 @@
protobufjs "^7.0.0"
rxjs "^7.4.0"
+"@injectivelabs/indexer-proto-ts@1.11.36":
+ version "1.11.36"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/indexer-proto-ts/-/indexer-proto-ts-1.11.36.tgz#4a1476e52a5003a077b30a22679272eb9dd18d7a"
+ integrity sha512-s7E3Y28JrkylDwRVfF/AvcPy/zPgz52W+XbQ0FOcsqPof78xp8FvnM3ubVZi0Dad39LgDB5eeiMFPmeuLp8Uew==
+ dependencies:
+ "@injectivelabs/grpc-web" "^0.0.1"
+ google-protobuf "^3.14.0"
+ protobufjs "^7.0.0"
+ rxjs "^7.4.0"
+
"@injectivelabs/mito-proto-ts@1.0.17":
version "1.0.17"
resolved "https://registry.yarnpkg.com/@injectivelabs/mito-proto-ts/-/mito-proto-ts-1.0.17.tgz#543e0ca7356b5f7ae6d5c5c8dc01b3a9f097595d"
@@ -3849,6 +3900,16 @@
protobufjs "^7.0.0"
rxjs "^7.4.0"
+"@injectivelabs/mito-proto-ts@1.0.62":
+ version "1.0.62"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/mito-proto-ts/-/mito-proto-ts-1.0.62.tgz#45fc0746af7d1b283625816caeb9fff9887e050f"
+ integrity sha512-WtoO80Y597nZiAuE4H+L208I0i3ByWytR+HqABdCaA26uJ7F1LhXw8YXxh3pP9z0LAeW31T+N7bwtOMlVR4riA==
+ dependencies:
+ "@injectivelabs/grpc-web" "^0.0.1"
+ google-protobuf "^3.14.0"
+ protobufjs "^7.0.0"
+ rxjs "^7.4.0"
+
"@injectivelabs/networks@^1.11.0", "@injectivelabs/networks@^1.14.5":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@injectivelabs/networks/-/networks-1.14.5.tgz#4d7536fede8edcc24ecbd2bceeca11affa7d24e9"
@@ -3860,6 +3921,17 @@
link-module-alias "^1.2.0"
shx "^0.3.2"
+"@injectivelabs/networks@^1.14.6":
+ version "1.14.6"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/networks/-/networks-1.14.6.tgz#29be5e81e60d725a0eef2db2c9b6ba0b4588141b"
+ integrity sha512-O1IkPFJl8ThNL6N+k/9OimrgCYsSWQ8A1FtVMXSQge+0QRZsDKSpRmQRwE601otXXauO31nOUct5AaiWPffXVQ==
+ dependencies:
+ "@injectivelabs/exceptions" "^1.14.6"
+ "@injectivelabs/ts-types" "^1.14.6"
+ "@injectivelabs/utils" "^1.14.6"
+ link-module-alias "^1.2.0"
+ shx "^0.3.2"
+
"@injectivelabs/sdk-ts@1.11.0":
version "1.11.0"
resolved "https://registry.yarnpkg.com/@injectivelabs/sdk-ts/-/sdk-ts-1.11.0.tgz#b347a01769242fa2486f44320b40f1c6522c0fc7"
@@ -3903,6 +3975,49 @@
shx "^0.3.2"
snakecase-keys "^5.4.1"
+"@injectivelabs/sdk-ts@^1.14.7":
+ version "1.14.7"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/sdk-ts/-/sdk-ts-1.14.7.tgz#16e84cecb14fe796314f8f616567511e1030f043"
+ integrity sha512-Qm8y8jKCMyNfYZGZVI+p0SIGJPtP5M9/DPFyPK+JSR2OOU0J4MX2yS/tQB5ViC/3Bt7yQhw/l3Rop93e7pTZEg==
+ dependencies:
+ "@apollo/client" "^3.5.8"
+ "@cosmjs/amino" "^0.32.2"
+ "@cosmjs/proto-signing" "^0.32.2"
+ "@cosmjs/stargate" "^0.32.2"
+ "@ensdomains/ens-validation" "^0.1.0"
+ "@ensdomains/eth-ens-namehash" "^2.0.15"
+ "@ethersproject/bytes" "^5.7.0"
+ "@injectivelabs/core-proto-ts" "^0.0.21"
+ "@injectivelabs/dmm-proto-ts" "1.0.19"
+ "@injectivelabs/exceptions" "^1.14.6"
+ "@injectivelabs/grpc-web" "^0.0.1"
+ "@injectivelabs/grpc-web-node-http-transport" "^0.0.2"
+ "@injectivelabs/grpc-web-react-native-transport" "^0.0.2"
+ "@injectivelabs/indexer-proto-ts" "1.11.36"
+ "@injectivelabs/mito-proto-ts" "1.0.62"
+ "@injectivelabs/networks" "^1.14.6"
+ "@injectivelabs/test-utils" "^1.14.3"
+ "@injectivelabs/token-metadata" "^1.14.7"
+ "@injectivelabs/ts-types" "^1.14.6"
+ "@injectivelabs/utils" "^1.14.6"
+ "@metamask/eth-sig-util" "^4.0.0"
+ axios "^0.27.2"
+ bech32 "^2.0.0"
+ bip39 "^3.0.4"
+ cosmjs-types "^0.9.0"
+ ethereumjs-util "^7.1.4"
+ ethers "^5.7.2"
+ google-protobuf "^3.21.0"
+ graphql "^16.3.0"
+ http-status-codes "^2.2.0"
+ js-sha3 "^0.8.0"
+ jscrypto "^1.0.3"
+ keccak256 "^1.0.6"
+ link-module-alias "^1.2.0"
+ secp256k1 "^4.0.3"
+ shx "^0.3.2"
+ snakecase-keys "^5.4.1"
+
"@injectivelabs/test-utils@^1.11.0":
version "1.14.3"
resolved "https://registry.yarnpkg.com/@injectivelabs/test-utils/-/test-utils-1.14.3.tgz#3c78b5f34669917f484aa8ac4a88df7bbc376f88"
@@ -3915,6 +4030,18 @@
snakecase-keys "^5.1.2"
store2 "^2.12.0"
+"@injectivelabs/test-utils@^1.14.3":
+ version "1.14.4"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/test-utils/-/test-utils-1.14.4.tgz#bf5b8c069eabac875e0c235589132b6166a5d08b"
+ integrity sha512-M7UoB5CIVVN7BtdmU26GwZsWKp0BQg9qV5a+YvcdhlwlSIkvt3gKVKBMq/vKClCakOu2AjhCVGDMZVnagIBogg==
+ dependencies:
+ axios "^0.21.1"
+ bignumber.js "^9.0.1"
+ link-module-alias "^1.2.0"
+ shx "^0.3.2"
+ snakecase-keys "^5.1.2"
+ store2 "^2.12.0"
+
"@injectivelabs/token-metadata@^1.11.0":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@injectivelabs/token-metadata/-/token-metadata-1.14.5.tgz#73552e3e78e5d15f5317a05a5812d0be3647e38d"
@@ -3932,6 +4059,23 @@
lodash.values "^4.3.0"
shx "^0.3.2"
+"@injectivelabs/token-metadata@^1.14.7":
+ version "1.14.7"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/token-metadata/-/token-metadata-1.14.7.tgz#0adba14e76e8882dc13a6a488ced0762fd888ae3"
+ integrity sha512-RRRuyirzoThwQ5P8D3STH2YOavGsdnetQy6ZPQ8yA7VUavt00KBB26M92zSLbiUz5VrxhPHDCEEkuJVWx+xtmw==
+ dependencies:
+ "@injectivelabs/exceptions" "^1.14.6"
+ "@injectivelabs/networks" "^1.14.6"
+ "@injectivelabs/ts-types" "^1.14.6"
+ "@injectivelabs/utils" "^1.14.6"
+ "@types/lodash.values" "^4.3.6"
+ copyfiles "^2.4.1"
+ jsonschema "^1.4.0"
+ link-module-alias "^1.2.0"
+ lodash "^4.17.21"
+ lodash.values "^4.3.0"
+ shx "^0.3.2"
+
"@injectivelabs/ts-types@^1.11.0", "@injectivelabs/ts-types@^1.14.5":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@injectivelabs/ts-types/-/ts-types-1.14.5.tgz#e7ed5fa87052b0763908bd77b132775aa37a097c"
@@ -3940,6 +4084,14 @@
link-module-alias "^1.2.0"
shx "^0.3.2"
+"@injectivelabs/ts-types@^1.14.6":
+ version "1.14.6"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/ts-types/-/ts-types-1.14.6.tgz#917a14c8fed81c683bc7dece3ec254388123a10e"
+ integrity sha512-/Ax5eCSfE9OhcyUc9wZk/LFKTYhIY9RJIaNT/n92rbHjXSfXRLSX+Bvk62vC9Ej+SEBPp77WYngtrePPA1HEgw==
+ dependencies:
+ link-module-alias "^1.2.0"
+ shx "^0.3.2"
+
"@injectivelabs/utils@^1.11.0", "@injectivelabs/utils@^1.14.5":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@injectivelabs/utils/-/utils-1.14.5.tgz#4fe9055c2c36f6f09faed9a95e2d77ae8daaf71f"
@@ -3955,6 +4107,21 @@
snakecase-keys "^5.1.2"
store2 "^2.12.0"
+"@injectivelabs/utils@^1.14.6":
+ version "1.14.6"
+ resolved "https://registry.yarnpkg.com/@injectivelabs/utils/-/utils-1.14.6.tgz#1e5c60973f9b2bb1a0334a0cd5b3f56377904472"
+ integrity sha512-5I0h4GiLB5PPTl+g2lpevRP+WScvEbntdkoUQVtAdHewl4kutd5p1Kcnoi1Nvpq+sz5N/e9qtBIRuyxG38akOg==
+ dependencies:
+ "@injectivelabs/exceptions" "^1.14.6"
+ "@injectivelabs/ts-types" "^1.14.6"
+ axios "^0.21.1"
+ bignumber.js "^9.0.1"
+ http-status-codes "^2.2.0"
+ link-module-alias "^1.2.0"
+ shx "^0.3.2"
+ snakecase-keys "^5.1.2"
+ store2 "^2.12.0"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"