From 514a2d3ab3ba2cc9e51618885edb06f736a482e5 Mon Sep 17 00:00:00 2001 From: Bill He Date: Mon, 6 Nov 2023 17:35:57 -0800 Subject: [PATCH] use decimals: --- src/hooks/useSubaccount.tsx | 130 ++++++++++++++++++++--------------- src/hooks/useTokenConfigs.ts | 4 ++ 2 files changed, 77 insertions(+), 57 deletions(-) diff --git a/src/hooks/useSubaccount.tsx b/src/hooks/useSubaccount.tsx index d2162a1..28ea2d4 100644 --- a/src/hooks/useSubaccount.tsx +++ b/src/hooks/useSubaccount.tsx @@ -48,7 +48,7 @@ export const useSubaccount = () => useContext(SubaccountContext); export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: LocalWallet }) => { const dispatch = useDispatch(); - const { usdcDenom } = useTokenConfigs(); + const { usdcDenom, usdcDecimals } = useTokenConfigs(); const { compositeClient, faucetClient } = useDydxClient(); const { getFaucetFunds } = useMemo( @@ -81,9 +81,9 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo amount: number; }) => { try { - await compositeClient?.depositToSubaccount( + return await compositeClient?.depositToSubaccount( subaccountClient, - amount.toFixed(QUANTUM_MULTIPLIER) + amount.toFixed(usdcDecimals) ); } catch (error) { log('useSubaccount/depositToSubaccount', error); @@ -98,9 +98,9 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo amount: number; }) => { try { - await compositeClient?.withdrawFromSubaccount( + return await compositeClient?.withdrawFromSubaccount( subaccountClient, - amount.toFixed(QUANTUM_MULTIPLIER) + amount.toFixed(usdcDecimals) ); } catch (error) { log('useSubaccount/withdrawFromSubaccount', error); @@ -117,27 +117,33 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo assetId?: number; amount: number; recipient: string; - }) => - await compositeClient?.validatorClient.post.send( - subaccountClient?.wallet, - () => - new Promise((resolve) => { - const msg = - compositeClient?.validatorClient.post.composer.composeMsgWithdrawFromSubaccount( - subaccountClient.address, - subaccountClient.subaccountNumber, - assetId, - Long.fromNumber(amount * QUANTUM_MULTIPLIER), - recipient - ); + }) => { + try { + return await compositeClient?.validatorClient.post.send( + subaccountClient?.wallet, + () => + new Promise((resolve) => { + const msg = + compositeClient?.validatorClient.post.composer.composeMsgWithdrawFromSubaccount( + subaccountClient.address, + subaccountClient.subaccountNumber, + assetId, + Long.fromNumber(amount * QUANTUM_MULTIPLIER), + recipient + ); - resolve([msg]); - }), - false, - undefined, - undefined, - Method.BroadcastTxCommit - ), + resolve([msg]); + }), + false, + undefined, + undefined, + Method.BroadcastTxCommit + ); + } catch (error) { + log('useSubaccount/transferFromSubaccountToAddress', error); + throw error; + } + }, transferNativeToken: async ({ subaccountClient, @@ -147,24 +153,30 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo subaccountClient: SubaccountClient; amount: number; recipient: string; - }) => - await compositeClient?.validatorClient.post.send( - subaccountClient.wallet, - () => - new Promise((resolve) => { - const msg = compositeClient?.sendTokenMessage( - subaccountClient.wallet, - amount.toString(), - recipient - ); + }) => { + try { + return await compositeClient?.validatorClient.post.send( + subaccountClient.wallet, + () => + new Promise((resolve) => { + const msg = compositeClient?.sendTokenMessage( + subaccountClient.wallet, + amount.toString(), + recipient + ); - resolve([msg]); - }), - false, - compositeClient?.validatorClient?.post.defaultDydxGasPrice, - undefined, - Method.BroadcastTxCommit - ), + resolve([msg]); + }), + false, + compositeClient?.validatorClient?.post.defaultDydxGasPrice, + undefined, + Method.BroadcastTxCommit + ); + } catch (error) { + log('useSubaccount/transferNativeToken', error); + throw error; + } + }, sendSquidWithdrawFromSubaccount: async ({ subaccountClient, @@ -176,23 +188,27 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo payload: string; }) => { if (!compositeClient) throw new Error('client not initialized'); + try { + const transaction = JSON.parse(payload); - const transaction = JSON.parse(payload); + const msg = compositeClient.withdrawFromSubaccountMessage( + subaccountClient, + amount.toFixed(usdcDecimals) + ); + const ibcMsg: EncodeObject = { + typeUrl: transaction.msgTypeUrl, + value: transaction.msg, + }; - const msg = compositeClient.withdrawFromSubaccountMessage( - subaccountClient, - amount.toFixed(6) - ); - const ibcMsg: EncodeObject = { - typeUrl: transaction.msgTypeUrl, - value: transaction.msg, - }; - - return await compositeClient.send( - subaccountClient.wallet, - () => Promise.resolve([msg, ibcMsg]), - false - ); + return await compositeClient.send( + subaccountClient.wallet, + () => Promise.resolve([msg, ibcMsg]), + false + ); + } catch (error) { + log('useSubaccount/sendSquidWithdrawFromSubaccount', error); + throw error; + } }, }), [compositeClient] diff --git a/src/hooks/useTokenConfigs.ts b/src/hooks/useTokenConfigs.ts index 2a2b728..2bbe155 100644 --- a/src/hooks/useTokenConfigs.ts +++ b/src/hooks/useTokenConfigs.ts @@ -19,8 +19,10 @@ export const useTokenConfigs = (): { }, }; usdcDenom: string; + usdcDecimals: number; usdcLabel: string; chainTokenDenom: string; + chainTokenDecimals: number; chainTokenLabel: string; } => { const { selectedNetwork } = useSelectedNetwork(); @@ -29,8 +31,10 @@ export const useTokenConfigs = (): { return { tokensConfigs, usdcDenom: tokensConfigs[DydxChainAsset.USDC].denom, + usdcDecimals: tokensConfigs[DydxChainAsset.USDC].decimals, usdcLabel: tokensConfigs[DydxChainAsset.USDC].name, chainTokenDenom: tokensConfigs[DydxChainAsset.CHAINTOKEN].denom, + chainTokenDecimals: tokensConfigs[DydxChainAsset.CHAINTOKEN].decimals, chainTokenLabel: tokensConfigs[DydxChainAsset.CHAINTOKEN].name, }; };