From d8cdd63c8d218591462feee21e692be2060ec4cd Mon Sep 17 00:00:00 2001 From: Sam Gibbs <34915414+iamsamgibbs@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:59:08 +0000 Subject: [PATCH 1/4] Feat: Proxy colony balance validation --- .../function/fetchColonyBalances/src/index.js | 12 ++++++++++-- .../partials/AmountField/AmountField.tsx | 1 + src/utils/validation/hasEnoughFundsValidation.ts | 15 +++++++-------- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/amplify/backend/function/fetchColonyBalances/src/index.js b/amplify/backend/function/fetchColonyBalances/src/index.js index 09964cab60..bb2d557e40 100644 --- a/amplify/backend/function/fetchColonyBalances/src/index.js +++ b/amplify/backend/function/fetchColonyBalances/src/index.js @@ -128,7 +128,11 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { }; }); - tokens.map(async ({ token }) => { + const mainChainTokens = tokens.filter( + (token) => token.token.chainMetadata.chainId === chainId, + ); + + mainChainTokens.map(async ({ token }) => { const { id: tokenAddress } = token; balances.push(async () => { @@ -201,7 +205,11 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { }; }); - tokens.map(async ({ token }) => { + const proxyChainTokens = tokens.filter( + (token) => token.token.chainMetadata.chainId === proxyChainId, + ); + + proxyChainTokens.map(async ({ token }) => { const { id: tokenAddress } = token; balances.push(async () => { diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx b/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx index 8b4ab996e5..e0c68c2a48 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx @@ -105,6 +105,7 @@ const AmountField: FC = ({ if (selectedToken?.tokenAddress) { tokenAddressController.onChange(selectedToken.tokenAddress); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- tokenAddressController deliberately omitted }, [selectedToken?.tokenAddress]); const handleTokenSelect = (selectedTokenAddress: string) => { diff --git a/src/utils/validation/hasEnoughFundsValidation.ts b/src/utils/validation/hasEnoughFundsValidation.ts index 5886a214c8..25876a9ac8 100644 --- a/src/utils/validation/hasEnoughFundsValidation.ts +++ b/src/utils/validation/hasEnoughFundsValidation.ts @@ -3,7 +3,6 @@ import { BigNumber } from 'ethers'; import moveDecimal from 'move-decimal-point'; import { type TestContext } from 'yup'; -import { DEFAULT_NETWORK_INFO } from '~constants'; import { type Colony } from '~types/graphql.ts'; import { notNull } from '~utils/arrays/index.ts'; import { @@ -35,20 +34,20 @@ export const hasEnoughFundsValidation = ({ return false; } const { parent } = context; - const { tokenAddress: tokenAddressFieldValue, chainId } = parent || {}; + const { tokenAddress: tokenAddressFieldValue, chain: chainId } = parent || {}; - // @TODO hook this up with actual balances - if (chainId !== DEFAULT_NETWORK_INFO.chainId) { - return true; - } const colonyTokens = colony.tokens?.items .filter(notNull) .map((colonyToken) => colonyToken.token) || []; const selectedToken = colonyTokens.find( - ({ tokenAddress: selectedTokenAddress }) => - selectedTokenAddress === tokenAddressFieldValue || tokenAddress, + ({ + tokenAddress: selectedTokenAddress, + chainMetadata: { chainId: selectedChainId }, + }) => + (selectedTokenAddress === tokenAddressFieldValue || tokenAddress) && + selectedChainId === chainId, ); if (!selectedToken) { From 2024aaf0264f74cdee5447919a2836e36c13157a Mon Sep 17 00:00:00 2001 From: Sam Gibbs <34915414+iamsamgibbs@users.noreply.github.com> Date: Thu, 6 Feb 2025 09:48:31 +0000 Subject: [PATCH 2/4] fix: resolve amountField token error --- .../v5/common/ActionSidebar/partials/AmountField/hooks.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts index f45f7cb60a..ff87549de9 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts @@ -2,6 +2,7 @@ import { type FormatNumeralOptions } from 'cleave-zen'; import { useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; +import { DEFAULT_NETWORK_INFO } from '~constants'; import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import { notNull } from '~utils/arrays/index.ts'; import { getTokenDecimalsWithFallback } from '~utils/tokens.ts'; @@ -10,7 +11,7 @@ import { CHAIN_FIELD_NAME } from '~v5/common/ActionSidebar/consts.ts'; export const useAmountField = (selectedTokenAddress: string | undefined) => { const { colony } = useColonyContext(); const { watch } = useFormContext(); - const chainId = watch(CHAIN_FIELD_NAME); + const chainId = watch(CHAIN_FIELD_NAME) ?? DEFAULT_NETWORK_INFO.chainId; const colonyTokens = colony.tokens?.items From 405be04b6aa12f4135e0f2dd44da7274aba2ad65 Mon Sep 17 00:00:00 2001 From: Sam Gibbs <34915414+iamsamgibbs@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:47:15 +0000 Subject: [PATCH 3/4] Feat: Select colony native token by default --- .../ActionSidebar/partials/AmountField/hooks.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts index ff87549de9..89b6799c50 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts @@ -9,7 +9,10 @@ import { getTokenDecimalsWithFallback } from '~utils/tokens.ts'; import { CHAIN_FIELD_NAME } from '~v5/common/ActionSidebar/consts.ts'; export const useAmountField = (selectedTokenAddress: string | undefined) => { - const { colony } = useColonyContext(); + const { + colony, + colony: { nativeToken }, + } = useColonyContext(); const { watch } = useFormContext(); const chainId = watch(CHAIN_FIELD_NAME) ?? DEFAULT_NETWORK_INFO.chainId; @@ -22,7 +25,11 @@ export const useAmountField = (selectedTokenAddress: string | undefined) => { const selectedToken = colonyTokens.find( (token) => token?.tokenAddress === selectedTokenAddress, - ) || colonyTokens[0]; + ) || + colonyTokens.find( + (token) => token?.tokenAddress === nativeToken.tokenAddress, + ) || + colonyTokens[0]; const formattingOptions: FormatNumeralOptions = useMemo( () => ({ From 3ae3485bd4b1e7d3b90e2d95cffb12096c3c0471 Mon Sep 17 00:00:00 2001 From: Sam Gibbs <34915414+iamsamgibbs@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:47:29 +0000 Subject: [PATCH 4/4] Fix: fetchTokenFromChain lambda --- amplify/backend/function/fetchTokenFromChain/src/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/amplify/backend/function/fetchTokenFromChain/src/index.js b/amplify/backend/function/fetchTokenFromChain/src/index.js index 332ac788f3..69fbc6e77f 100644 --- a/amplify/backend/function/fetchTokenFromChain/src/index.js +++ b/amplify/backend/function/fetchTokenFromChain/src/index.js @@ -32,6 +32,9 @@ const baseToken = { decimals: null, type: null, colonies: null, + chainMetadata: { + chainId: '', + }, }; const setEnvVariables = async (network) => {