Skip to content

Commit 2032f18

Browse files
authored
Merge pull request #837 from relayprotocol/feature/improve-sponsored-token-logic
Improve sponsored token logic
2 parents 213a135 + 8ca6ff5 commit 2032f18

File tree

4 files changed

+50
-51
lines changed

4 files changed

+50
-51
lines changed

.changeset/long-jokes-move.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@relayprotocol/relay-kit-ui': patch
3+
---
4+
5+
Improve sponsored tokens logic by switching to more flexible useSecureApi method

demo/pages/ui/swap.tsx

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -231,16 +231,41 @@ const SwapWidgetPage: NextPage = () => {
231231
lockChainId={singleChainMode ? 8453 : undefined}
232232
singleChainMode={singleChainMode}
233233
supportedWalletVMs={supportedWalletVMs}
234-
sponsoredTokens={[
235-
'792703809:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
236-
'130:0x078d782b760474a361dda0af3839290b0ef57ad6',
237-
'103665049:0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
238-
'8453:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
239-
'43114:0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
240-
'137:0x3c499c542cef5e3811e1192ce70d8cc03d5c3359',
241-
'42161:0xaf88d065e77c8cc2239327c5edb3a432268e5831',
242-
'10:0x0b2c639c533813f4aa9d7837caf62653d097ff85'
243-
]}
234+
useSecureBaseUrl={(parameters) => {
235+
const evmChains = [137, 42161, 43114, 8453, 10]
236+
const usdcSponsoredTokens = [
237+
'792703809:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
238+
'130:0x078d782b760474a361dda0af3839290b0ef57ad6',
239+
'103665049:0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
240+
'8453:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
241+
'43114:0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
242+
'137:0x3c499c542cef5e3811e1192ce70d8cc03d5c3359',
243+
'42161:0xaf88d065e77c8cc2239327c5edb3a432268e5831',
244+
'10:0x0b2c639c533813f4aa9d7837caf62653d097ff85'
245+
]
246+
const normalizedOriginCurrency =
247+
parameters?.originCurrency &&
248+
parameters.originChainId &&
249+
evmChains.includes(parameters.originChainId)
250+
? `${parameters.originChainId}:${parameters.originCurrency.toLowerCase()}`
251+
: `${parameters?.originChainId ?? ''}:${parameters?.originCurrency ?? ''}`
252+
const normalizedDestinationCurrency =
253+
parameters?.destinationCurrency &&
254+
parameters.destinationChainId &&
255+
evmChains.includes(parameters.destinationChainId)
256+
? `${parameters.destinationChainId}:${parameters.destinationCurrency.toLowerCase()}`
257+
: `${parameters?.destinationChainId ?? ''}:${parameters?.destinationCurrency ?? ''}`
258+
//USDC Campaign - Only allow USDC to be sponsored
259+
if (
260+
normalizedDestinationCurrency &&
261+
normalizedOriginCurrency &&
262+
usdcSponsoredTokens.includes(normalizedDestinationCurrency) &&
263+
usdcSponsoredTokens.includes(normalizedOriginCurrency)
264+
) {
265+
return true
266+
}
267+
return false
268+
}}
244269
// popularChainIds={[]}
245270
// disableInputAutoFocus={true}
246271
toToken={toToken}

packages/ui/src/components/widgets/SwapWidget/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { alreadyAcceptedToken } from '../../../utils/localStorage.js'
4646
import GasTopUpSection from './GasTopUpSection.js'
4747
import { calculateUsdValue, getSwapEventData } from '../../../utils/quote.js'
4848
import { PriceImpact } from './PriceImpact.js'
49+
import type { useQuote } from '@relayprotocol/relay-kit-hooks'
4950

5051
type BaseSwapWidgetProps = {
5152
fromToken?: Token
@@ -65,7 +66,7 @@ type BaseSwapWidgetProps = {
6566
disableInputAutoFocus?: boolean
6667
popularChainIds?: number[]
6768
disablePasteWalletAddressOption?: boolean
68-
sponsoredTokens?: string[]
69+
useSecureBaseUrl?: (parameters: Parameters<typeof useQuote>['2']) => boolean
6970
onOpenSlippageConfig?: () => void
7071
onFromTokenChange?: (token?: Token) => void
7172
onToTokenChange?: (token?: Token) => void
@@ -116,7 +117,7 @@ const SwapWidget: FC<SwapWidgetProps> = ({
116117
disableInputAutoFocus = false,
117118
popularChainIds,
118119
disablePasteWalletAddressOption,
119-
sponsoredTokens,
120+
useSecureBaseUrl,
120121
onSetPrimaryWallet,
121122
onLinkNewWallet,
122123
onFromTokenChange,
@@ -192,7 +193,7 @@ const SwapWidget: FC<SwapWidgetProps> = ({
192193
onSwapError={onSwapError}
193194
onAnalyticEvent={onAnalyticEvent}
194195
supportedWalletVMs={supportedWalletVMs}
195-
sponsoredTokens={sponsoredTokens}
196+
useSecureBaseUrl={useSecureBaseUrl}
196197
>
197198
{({
198199
quote,

packages/ui/src/components/widgets/SwapWidgetRenderer.tsx

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type SwapWidgetRendererProps = {
7070
onConnectWallet?: () => void
7171
onAnalyticEvent?: (eventName: string, data?: any) => void
7272
onSwapError?: (error: string, data?: Execute) => void
73-
sponsoredTokens?: string[]
73+
useSecureBaseUrl?: (parameters: Parameters<typeof useQuote>['2']) => boolean
7474
}
7575

7676
export type ChildrenProps = {
@@ -155,7 +155,7 @@ export type ChildrenProps = {
155155
isLoadingFromTokenPrice: boolean
156156
toTokenPriceData: ReturnType<typeof useTokenPrice>['data']
157157
isLoadingToTokenPrice: boolean
158-
sponsoredTokens?: string[]
158+
useSecureBaseUrl?: (parameters: Parameters<typeof useQuote>['2']) => boolean
159159
}
160160

161161
// shared query options for useTokenPrice
@@ -182,7 +182,7 @@ const SwapWidgetRenderer: FC<SwapWidgetRendererProps> = ({
182182
multiWalletSupportEnabled = false,
183183
linkedWallets,
184184
supportedWalletVMs,
185-
sponsoredTokens,
185+
useSecureBaseUrl,
186186
children,
187187
onAnalyticEvent,
188188
onSwapError
@@ -543,40 +543,6 @@ const SwapWidgetRenderer: FC<SwapWidgetRendererProps> = ({
543543
isFromNative
544544
)
545545

546-
const normalizedSponsoredTokens = useMemo(() => {
547-
const chainVms = relayClient?.chains.reduce(
548-
(chains, chain) => {
549-
chains[chain.id] = chain.vmType as ChainVM
550-
return chains
551-
},
552-
{} as Record<number, ChainVM>
553-
)
554-
return sponsoredTokens?.map((token) => {
555-
const [chainId, address] = token.match(/^([^:]*):?(.*)$/)?.slice(1) ?? []
556-
const chainVm = chainVms?.[Number(chainId)]
557-
const normalizedAddress =
558-
chainVm && chainVm === 'evm' ? address.toLowerCase() : address
559-
return `${chainId}:${normalizedAddress}`
560-
})
561-
}, [sponsoredTokens, relayClient?.chains])
562-
563-
const normalizedToToken =
564-
toChain?.vmType === 'evm'
565-
? `${toToken?.chainId}:${toToken?.address.toLowerCase()}`
566-
: `${toToken?.chainId}:${toToken?.address}`
567-
const normalizedFromToken =
568-
fromChain?.vmType === 'evm'
569-
? `${fromToken?.chainId}:${fromToken?.address.toLowerCase()}`
570-
: `${fromToken?.chainId}:${fromToken?.address}`
571-
572-
const isGasSponsorshipEnabled =
573-
normalizedSponsoredTokens &&
574-
normalizedSponsoredTokens.length > 0 &&
575-
toToken &&
576-
fromToken &&
577-
normalizedSponsoredTokens.includes(normalizedToToken) &&
578-
normalizedSponsoredTokens.includes(normalizedFromToken)
579-
580546
const shouldSetQuoteParameters =
581547
fromToken &&
582548
toToken &&
@@ -724,7 +690,9 @@ const SwapWidgetRenderer: FC<SwapWidgetRendererProps> = ({
724690
})
725691
},
726692
undefined,
727-
isGasSponsorshipEnabled ? providerOptionsContext?.secureBaseUrl : undefined
693+
useSecureBaseUrl?.(quoteParameters)
694+
? providerOptionsContext?.secureBaseUrl
695+
: undefined
728696
)
729697

730698
const invalidateQuoteQuery = useCallback(() => {

0 commit comments

Comments
 (0)