From 457aa45cde8995311e8297fe10ef335edad18d7d Mon Sep 17 00:00:00 2001 From: Finnian Jacobson-Schulte <140328381+finnian0826@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:35:15 -0700 Subject: [PATCH 1/4] feat(hack): Add CTA for live links rewards --- src/dappsExplorer/DappFeaturedActions.tsx | 2 +- src/home/TabHome.tsx | 17 +++++++++++++++++ src/transactions/feed/TransactionFeedV2.tsx | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/dappsExplorer/DappFeaturedActions.tsx b/src/dappsExplorer/DappFeaturedActions.tsx index 54ea472c15d..9b0ab2644f6 100644 --- a/src/dappsExplorer/DappFeaturedActions.tsx +++ b/src/dappsExplorer/DappFeaturedActions.tsx @@ -23,7 +23,7 @@ interface Props { style?: StyleProp } -function FeaturedAction({ title, description, Image, style, onPress }: Props) { +export function FeaturedAction({ title, description, Image, style, onPress }: Props) { return ( , }, + { + key: 'ReferralCTA', + component: ( + } + onPress={() => navigate(Screens.JumpstartEnterAmount)} + /> + ), + }, { key: 'TransactionFeed', component: , diff --git a/src/transactions/feed/TransactionFeedV2.tsx b/src/transactions/feed/TransactionFeedV2.tsx index e97affa562e..ed0eda5b5dc 100644 --- a/src/transactions/feed/TransactionFeedV2.tsx +++ b/src/transactions/feed/TransactionFeedV2.tsx @@ -10,15 +10,20 @@ import { Text, View, } from 'react-native' +import { Colors } from 'react-native/Libraries/NewAppScreen' import AppAnalytics from 'src/analytics/AppAnalytics' import { SwapEvents } from 'src/analytics/Events' import { NotificationVariant } from 'src/components/InLineNotification' import SectionHead from 'src/components/SectionHead' import Toast from 'src/components/Toast' +import { FeaturedAction } from 'src/dappsExplorer/DappFeaturedActions' import ActionsCarousel from 'src/home/ActionsCarousel' import GetStarted from 'src/home/GetStarted' import NotificationBox from 'src/home/NotificationBox' +import Trophy from 'src/icons/Trophy' import { getLocalCurrencyCode } from 'src/localCurrency/selectors' +import { navigate } from 'src/navigator/NavigationService' +import { Screens } from 'src/navigator/Screens' import { useDispatch, useSelector } from 'src/redux/hooks' import { store } from 'src/redux/store' import { getFeatureGate, getMultichainFeatures } from 'src/statsig' @@ -515,6 +520,15 @@ export default function TransactionFeedV2() { <> + } + onPress={() => navigate(Screens.JumpstartEnterAmount)} + style={{ marginLeft: 16, marginVertical: 16 }} + /> } ListEmptyComponent={!showUKCompliantVariant ? : } From 89abd961d8613c1cdeb41a5dcc23382db06dc20b Mon Sep 17 00:00:00 2001 From: Finnian Jacobson-Schulte <140328381+finnian0826@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:06:19 -0700 Subject: [PATCH 2/4] add referrer to swap call --- src/swap/useSwapQuote.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/swap/useSwapQuote.ts b/src/swap/useSwapQuote.ts index dcd8da25362..7239c0b04af 100644 --- a/src/swap/useSwapQuote.ts +++ b/src/swap/useSwapQuote.ts @@ -193,6 +193,8 @@ function useSwapQuote({ return null } + const referrer = '' // TODO: Add logic to get referrer from https://github.com/valora-labs/peer2peer-funding-layer/blob/main/contracts/WalletJumpstartHack.sol#L33 using walletAddress + const swapAmountParam = updatedField === Field.FROM ? 'sellAmount' : 'buyAmount' const params = { ...(toToken.address && { buyToken: toToken.address }), @@ -205,6 +207,7 @@ function useSwapQuote({ userAddress: walletAddress ?? '', slippagePercentage, ...(enableAppFee === true && { enableAppFee: enableAppFee.toString() }), + referrer, } const queryParams = new URLSearchParams({ ...params }).toString() const requestUrl = `${networkConfig.getSwapQuoteUrl}?${queryParams}` From 6b1436e791a620a8bb05001917db23aafe9c7f73 Mon Sep 17 00:00:00 2001 From: Finnian Jacobson-Schulte <140328381+finnian0826@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:16:14 -0700 Subject: [PATCH 3/4] add referrer --- src/abis/IWalletJumpstart.ts | 19 +++++++++++++++++++ src/swap/useSwapQuote.ts | 10 +++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/abis/IWalletJumpstart.ts b/src/abis/IWalletJumpstart.ts index 698fe935d4f..c3c1acf6aa0 100644 --- a/src/abis/IWalletJumpstart.ts +++ b/src/abis/IWalletJumpstart.ts @@ -391,6 +391,25 @@ const jumpstart = { stateMutability: 'view', type: 'function', }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + name: 'referrer', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, { inputs: [ { diff --git a/src/swap/useSwapQuote.ts b/src/swap/useSwapQuote.ts index 7239c0b04af..274a17a4375 100644 --- a/src/swap/useSwapQuote.ts +++ b/src/swap/useSwapQuote.ts @@ -1,5 +1,6 @@ import BigNumber from 'bignumber.js' import { useAsyncCallback } from 'react-async-hook' +import walletJumpstart from 'src/abis/IWalletJumpstart' import { useSelector } from 'src/redux/hooks' import { FetchQuoteResponse, @@ -193,7 +194,14 @@ function useSwapQuote({ return null } - const referrer = '' // TODO: Add logic to get referrer from https://github.com/valora-labs/peer2peer-funding-layer/blob/main/contracts/WalletJumpstartHack.sol#L33 using walletAddress + const client = publicClient[networkIdToNetwork[networkId]] + + const referrer = await client.readContract({ + address: '' as Address, // Add the new WalletJumpstartHack address here + abi: walletJumpstart.abi, + functionName: 'referrer', + args: [walletAddress as Address], + }) const swapAmountParam = updatedField === Field.FROM ? 'sellAmount' : 'buyAmount' const params = { From 39357956abf7b8d60a2c48e245cf7c4ab1a35531 Mon Sep 17 00:00:00 2001 From: jh2oman Date: Thu, 19 Dec 2024 17:12:48 -0800 Subject: [PATCH 4/4] jumpstart working --- src/app/reducers.ts | 2 +- src/jumpstart/saga.ts | 4 +--- src/jumpstart/usePrepareJumpstartTransactions.ts | 2 +- src/navigator/selectors.ts | 2 +- src/swap/useSwapQuote.ts | 2 +- src/transactions/feed/TransferFeedItem.tsx | 11 +---------- src/web3/networkConfig.ts | 6 +++--- 7 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/app/reducers.ts b/src/app/reducers.ts index c250f9b26b7..154d7419373 100644 --- a/src/app/reducers.ts +++ b/src/app/reducers.ts @@ -77,7 +77,7 @@ const initialState = { fiatConnectCashInEnabled: REMOTE_CONFIG_VALUES_DEFAULTS.fiatConnectCashInEnabled, fiatConnectCashOutEnabled: REMOTE_CONFIG_VALUES_DEFAULTS.fiatConnectCashOutEnabled, coinbasePayEnabled: REMOTE_CONFIG_VALUES_DEFAULTS.coinbasePayEnabled, - showSwapMenuInDrawerMenu: REMOTE_CONFIG_VALUES_DEFAULTS.showSwapMenuInDrawerMenu, + showSwapMenuInDrawerMenu: true, maxSwapSlippagePercentage: REMOTE_CONFIG_VALUES_DEFAULTS.maxSwapSlippagePercentage, inviterAddress: null, networkTimeoutSeconds: REMOTE_CONFIG_VALUES_DEFAULTS.networkTimeoutSeconds, diff --git a/src/jumpstart/saga.ts b/src/jumpstart/saga.ts index ede7b233e69..a6f135c9af3 100644 --- a/src/jumpstart/saga.ts +++ b/src/jumpstart/saga.ts @@ -46,9 +46,7 @@ export function* jumpstartClaim(privateKey: Hex, networkId: NetworkId, walletAdd try { yield* put(jumpstartClaimStarted()) - const contractAddress = getDynamicConfigParams( - DynamicConfigs[StatsigDynamicConfigs.WALLET_JUMPSTART_CONFIG] - ).jumpstartContracts?.[networkId]?.contractAddress + const contractAddress = '0x4BefF9F9965aca255bF21407169744AbDba853A7' if (!contractAddress) { throw new Error(`Contract address for ${networkId} is not provided in dynamic config`) diff --git a/src/jumpstart/usePrepareJumpstartTransactions.ts b/src/jumpstart/usePrepareJumpstartTransactions.ts index ead2c33b3c8..0b94985acb0 100644 --- a/src/jumpstart/usePrepareJumpstartTransactions.ts +++ b/src/jumpstart/usePrepareJumpstartTransactions.ts @@ -101,7 +101,7 @@ export function usePrepareJumpstartTransactions() { } const baseTransactions = await createBaseJumpstartTransactions( - jumpstartContractConfig.contractAddress, + '0x4BefF9F9965aca255bF21407169744AbDba853A7', sendTokenAmountInSmallestUnit, address, networkId, diff --git a/src/navigator/selectors.ts b/src/navigator/selectors.ts index 11da8a976ad..804429c9a1c 100644 --- a/src/navigator/selectors.ts +++ b/src/navigator/selectors.ts @@ -1,3 +1,3 @@ import { RootState } from 'src/redux/reducers' -export const isAppSwapsEnabledSelector = (state: RootState) => state.app.showSwapMenuInDrawerMenu +export const isAppSwapsEnabledSelector = (state: RootState) => true diff --git a/src/swap/useSwapQuote.ts b/src/swap/useSwapQuote.ts index 274a17a4375..355c0757766 100644 --- a/src/swap/useSwapQuote.ts +++ b/src/swap/useSwapQuote.ts @@ -197,7 +197,7 @@ function useSwapQuote({ const client = publicClient[networkIdToNetwork[networkId]] const referrer = await client.readContract({ - address: '' as Address, // Add the new WalletJumpstartHack address here + address: '0x4BefF9F9965aca255bF21407169744AbDba853A7' as Address, // Add the new WalletJumpstartHack address here abi: walletJumpstart.abi, functionName: 'referrer', args: [walletAddress as Address], diff --git a/src/transactions/feed/TransferFeedItem.tsx b/src/transactions/feed/TransferFeedItem.tsx index a637cd35c04..6cc2ca0f365 100644 --- a/src/transactions/feed/TransferFeedItem.tsx +++ b/src/transactions/feed/TransferFeedItem.tsx @@ -9,9 +9,6 @@ import { jumpstartReclaimFlowStarted } from 'src/jumpstart/slice' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { useDispatch } from 'src/redux/hooks' -import { getDynamicConfigParams } from 'src/statsig' -import { DynamicConfigs } from 'src/statsig/constants' -import { StatsigDynamicConfigs } from 'src/statsig/types' import colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' @@ -99,13 +96,7 @@ function TransferFeedItem({ transfer }: Props) { } function isJumpstartTransaction(tx: TokenTransfer) { - const jumpstartConfig = getDynamicConfigParams( - DynamicConfigs[StatsigDynamicConfigs.WALLET_JUMPSTART_CONFIG] - ).jumpstartContracts[tx.networkId] - const jumpstartAddresses = [ - jumpstartConfig?.contractAddress, - ...(jumpstartConfig?.retiredContractAddresses ?? []), - ].filter(isPresent) + const jumpstartAddresses = ['0x4BefF9F9965aca255bF21407169744AbDba853A7'].filter(isPresent) return jumpstartAddresses.includes(tx.address) } diff --git a/src/web3/networkConfig.ts b/src/web3/networkConfig.ts index aa6d86ef6f5..18ed0747d59 100644 --- a/src/web3/networkConfig.ts +++ b/src/web3/networkConfig.ts @@ -186,13 +186,13 @@ const RESOLVE_ID_MAINNET = `${CLOUD_FUNCTIONS_MAINNET}/resolveId` const NFTS_APP_URL = 'https://nfts.valoraapp.com/' -const GET_SWAP_QUOTE_URL = `${CLOUD_FUNCTIONS_MAINNET}/getSwapQuote` +const GET_SWAP_QUOTE_URL = `https://us-central1-celo-mobile-mainnet.cloudfunctions.net/getSwapQuoteHack` const HOOKS_API_URL_MAINNET = `${CLOUD_FUNCTIONS_MAINNET}/hooks-api` const HOOKS_API_URL_ALFAJORES = `${CLOUD_FUNCTIONS_STAGING}/hooks-api` -const JUMPSTART_CLAIM_URL_ALFAJORES = `${CLOUD_FUNCTIONS_STAGING}/walletJumpstart` -const JUMPSTART_CLAIM_URL_MAINNET = `${CLOUD_FUNCTIONS_MAINNET}/walletJumpstart` +const JUMPSTART_CLAIM_URL_ALFAJORES = `${CLOUD_FUNCTIONS_STAGING}/walletJumpstartHack` +const JUMPSTART_CLAIM_URL_MAINNET = `https://us-central1-celo-mobile-mainnet.cloudfunctions.net/walletJumpstartHack` const GET_NFTS_BY_OWNER_ADDRESS_ALFAJORES = `${CLOUD_FUNCTIONS_STAGING}/getNfts` const GET_NFTS_BY_OWNER_ADDRESS_MAINNET = `${CLOUD_FUNCTIONS_MAINNET}/getNfts`