Skip to content

Commit 9444a39

Browse files
fix: deposit token address and amount
1 parent 95c3338 commit 9444a39

File tree

9 files changed

+192
-1196
lines changed

9 files changed

+192
-1196
lines changed

examples/nextjs-app/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"@farcaster/frame-sdk": "^0.0.26",
1414
"@headlessui/react": "^2.2.0",
1515
"@rainbow-me/rainbowkit": "^2.2.8",
16-
"@rozoai/intent-common": "0.1.6-beta.2",
17-
"@rozoai/intent-pay": "0.1.5-beta.3",
16+
"@rozoai/intent-common": "workspace:*",
17+
"@rozoai/intent-pay": "workspace:*",
1818
"@tanstack/react-query": "^5.51.11",
1919
"@types/react-syntax-highlighter": "^15.5.13",
2020
"@wagmi/core": "^2.22.0",

packages/connectkit/bundle-analysis.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/connectkit/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"@albedo-link/intent": "^0.13.0",
4848
"@reown/appkit": "^1.7.0",
4949
"@rollup/plugin-typescript": "^12.1.2",
50-
"@rozoai/intent-common": "0.1.6-beta.2",
50+
"@rozoai/intent-common": "workspace:*",
5151
"@solana/spl-token": "^0.4.14",
5252
"@solana/wallet-adapter-base": "^0.9.27",
5353
"@solana/wallet-adapter-react": "^0.15.39",

packages/connectkit/src/components/Pages/SelectWalletChain/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
Chain,
55
ethereum,
66
polygon,
7-
rozoSolana,
7+
solana,
88
supportedTokens,
99
} from "@rozoai/intent-common";
1010
import React, { useCallback, useMemo } from "react";
@@ -65,9 +65,9 @@ const SelectWalletChain: React.FC = () => {
6565
availableChainIds.has(bsc.chainId) && wallet?.id !== "app.phantom",
6666
},
6767
{
68-
chain: rozoSolana,
68+
chain: solana,
6969
icon: <Solana key="solana" />,
70-
supported: availableChainIds.has(rozoSolana.chainId),
70+
supported: availableChainIds.has(solana.chainId),
7171
},
7272
],
7373
[availableChainIds, wallet?.id]

packages/connectkit/src/components/Pages/WaitingDepositAddress/index.tsx

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ export default function WaitingDepositAddress() {
241241

242242
// If we selected a deposit address option, generate the address...
243243
const generateDepositAddress = async () => {
244+
console.log("selectedDepositAddressOption", selectedDepositAddressOption);
244245
if (selectedDepositAddressOption == null) {
245246
if (order == null || !isHydrated(order)) return;
246247
if (order.sourceTokenAmount == null) return;
@@ -266,15 +267,17 @@ export default function WaitingDepositAddress() {
266267
expirationS = Number(order.expirationTs);
267268
}
268269

270+
console.log("order", order);
271+
269272
const evmDeepLink = generateEVMDeepLink({
270273
amountUnits: order.destFinalCallTokenAmount.amount,
271274
chainId: order.destFinalCallTokenAmount.token.chainId,
272-
recipientAddress: order.destFinalCall.to,
275+
recipientAddress: order.intentAddr,
273276
tokenAddress: order.destFinalCallTokenAmount.token.token,
274277
});
275278

276279
setDepAddr({
277-
address: order.destFinalCall.to,
280+
address: order.intentAddr,
278281
amount: String(order.usdValue),
279282
underpayment: {
280283
unitsPaid: order.destFinalCallTokenAmount.amount,
@@ -287,14 +290,14 @@ export default function WaitingDepositAddress() {
287290
uri: evmDeepLink,
288291
displayToken: order.destFinalCallTokenAmount.token,
289292
logoURI: "", // Not needed for underpaid orders
290-
memo: order.metadata?.memo || "",
293+
memo: order.memo || order.metadata?.memo || undefined,
291294
});
292295
} else {
293296
// Prevent multiple executions for the same deposit option
294297
if (isLoading || hasExecutedDepositCall) return;
295298

296299
const displayToken = getKnownToken(
297-
selectedDepositAddressOption.chainId,
300+
selectedDepositAddressOption.token.chainId,
298301
selectedDepositAddressOption.token.token
299302
);
300303
const logoURI = selectedDepositAddressOption.logoURI;
@@ -321,6 +324,7 @@ export default function WaitingDepositAddress() {
321324
});
322325

323326
try {
327+
let feeData: FeeResponseData | null = null;
324328
// Fetch fee using amount and appId before generating deposit address
325329
if (amount && payParams?.appId) {
326330
try {
@@ -329,10 +333,11 @@ export default function WaitingDepositAddress() {
329333
type: payParams?.feeType ?? FeeType.ExactIn,
330334
toUnits: amount.toString(),
331335
appId: payParams.appId,
332-
toChain: selectedDepositAddressOption.chainId,
336+
toChain: selectedDepositAddressOption.token.chainId,
333337
});
334338

335339
if (feeResponse.data) {
340+
feeData = feeResponse.data;
336341
setFeeData(feeResponse.data);
337342
setFeeError(null);
338343
} else if (feeResponse.error) {
@@ -368,7 +373,9 @@ export default function WaitingDepositAddress() {
368373

369374
const details = await payWithDepositAddress(
370375
selectedDepositAddressOption.id,
371-
store as any
376+
store as any,
377+
feeData,
378+
context.log
372379
);
373380
if (details) {
374381
const shouldShowMemo = ![DepositAddressPaymentOptions.BSC].includes(
@@ -414,10 +421,8 @@ export default function WaitingDepositAddress() {
414421
// Reset payment hash when deposit option changes
415422
useEffect(() => {
416423
setPayinTransactionHash(null);
417-
}, [selectedDepositAddressOption]);
418424

419-
// Reset execution flag when selectedDepositAddressOption changes
420-
useEffect(() => {
425+
// Reset execution flag when selectedDepositAddressOption changes
421426
if (selectedDepositAddressOption) {
422427
setHasExecutedDepositCall(false);
423428
setFailed(false);
@@ -446,13 +451,7 @@ export default function WaitingDepositAddress() {
446451
reset();
447452
createPreviewOrder(payParams);
448453
}
449-
}, [
450-
selectedDepositAddressOption,
451-
rozoPaymentState,
452-
payParams,
453-
reset,
454-
createPreviewOrder,
455-
]);
454+
}, [selectedDepositAddressOption, rozoPaymentState, payParams]);
456455

457456
// Generate deposit address when conditions are met
458457
useEffect(() => {

packages/connectkit/src/hooks/usePaymentState.ts

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ import {
1010
DepositAddressPaymentOptionMetadata,
1111
DepositAddressPaymentOptions,
1212
ethereum,
13+
ethereumUSDC,
14+
ethereumUSDT,
1315
ExternalPaymentOptionMetadata,
1416
ExternalPaymentOptions,
1517
ExternalPaymentOptionsString,
18+
FeeResponseData,
1619
FeeType,
1720
formatPaymentResponseToHydratedOrder,
1821
generateEVMDeepLink,
@@ -22,18 +25,17 @@ import {
2225
mergedMetadata,
2326
PaymentResponse,
2427
PlatformType,
25-
polygonUSDC,
2628
readRozoPayOrderID,
2729
RozoPayHydratedOrderWithOrg,
2830
RozoPayOrder,
2931
rozoSolana,
3032
rozoSolanaUSDC,
33+
rozoSolanaUSDT,
3134
rozoStellar,
3235
rozoStellarUSDC,
3336
solana,
3437
Token,
3538
WalletPaymentOption,
36-
worldchainUSDC,
3739
writeRozoPayOrderID,
3840
} from "@rozoai/intent-common";
3941
import { useConnection, useWallet } from "@solana/wallet-adapter-react";
@@ -167,7 +169,9 @@ export interface PaymentState {
167169
payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;
168170
payWithDepositAddress: (
169171
option: DepositAddressPaymentOptions,
170-
store: Store<PaymentState, PaymentEvent>
172+
store: Store<PaymentState, PaymentEvent>,
173+
fees: FeeResponseData | null,
174+
log?: (message: string) => void
171175
) => Promise<
172176
| (DepositAddressPaymentOptionData & { externalId: string; memo: string })
173177
| null
@@ -1059,46 +1063,53 @@ export function usePaymentState({
10591063

10601064
const payWithDepositAddress = async (
10611065
option: DepositAddressPaymentOptions,
1062-
store: Store<PaymentState, PaymentEvent>
1066+
store: Store<PaymentState, PaymentEvent>,
1067+
fees: FeeResponseData | null,
1068+
log?: (message: string) => void
10631069
) => {
10641070
// Prevent duplicate calls for the same option
10651071
if (depositAddressCallRef.current.has(option)) {
1066-
log(
1072+
log?.(
10671073
`[PAY DEPOSIT ADDRESS] Already processing ${option}, skipping duplicate call`
10681074
);
10691075
return null;
10701076
}
10711077

10721078
// Mark this option as being processed
10731079
depositAddressCallRef.current.add(option);
1074-
log(`[PAY DEPOSIT ADDRESS] Starting processing for ${option}`);
1080+
log?.(`[PAY DEPOSIT ADDRESS] Starting processing for ${option}`);
10751081

10761082
try {
10771083
let token: Token = baseUSDC;
10781084

1079-
if (option === DepositAddressPaymentOptions.SOLANA) {
1085+
// Map option to correct token, mimicking useDepositAddressOptions.ts
1086+
if (option === DepositAddressPaymentOptions.ETHEREUM_USDT) {
1087+
token = ethereumUSDT;
1088+
} else if (option === DepositAddressPaymentOptions.ETHEREUM_USDC) {
1089+
token = ethereumUSDC;
1090+
} else if (option === DepositAddressPaymentOptions.BASE_USDC) {
1091+
token = baseUSDC;
1092+
} else if (option === DepositAddressPaymentOptions.SOLANA_USDT) {
1093+
token = rozoSolanaUSDT;
1094+
} else if (option === DepositAddressPaymentOptions.SOLANA_USDC) {
10801095
token = rozoSolanaUSDC;
1081-
} else if (option === DepositAddressPaymentOptions.STELLAR) {
1082-
token = rozoStellarUSDC;
1083-
} else if (option === DepositAddressPaymentOptions.POLYGON) {
1084-
token = polygonUSDC;
1085-
} else if (option === DepositAddressPaymentOptions.BSC) {
1086-
token = bscUSDT;
1087-
} else if (option === DepositAddressPaymentOptions.WORLD) {
1088-
token = worldchainUSDC;
10891096
}
10901097

1091-
log("[PAY DEPOSIT ADDRESS] hydrating order");
1098+
log?.("[PAY DEPOSIT ADDRESS] hydrating order");
10921099

10931100
const { order } = await pay.hydrateOrder(undefined, {
10941101
required: {
10951102
token: {
10961103
token: token.token,
1104+
chainId: token.chainId,
10971105
} as any,
10981106
} as any,
1107+
fees: {
1108+
usd: fees?.fee ?? 0,
1109+
},
10991110
} as any);
11001111

1101-
log(
1112+
log?.(
11021113
`[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`
11031114
);
11041115

@@ -1109,7 +1120,7 @@ export function usePaymentState({
11091120

11101121
const chain = getChainById(token.chainId);
11111122

1112-
log(order);
1123+
log?.(`[PAY DEPOSIT ADDRESS] order: ${debugJson(order)}`);
11131124

11141125
const evmDeeplink = generateEVMDeepLink({
11151126
amountUnits: order.destFinalCallTokenAmount.amount,
@@ -1138,7 +1149,7 @@ export function usePaymentState({
11381149
} finally {
11391150
// Remove from processing set when done (allow retries after completion/failure)
11401151
depositAddressCallRef.current.delete(option);
1141-
log(`[PAY DEPOSIT ADDRESS] Finished processing for ${option}`);
1152+
log?.(`[PAY DEPOSIT ADDRESS] Finished processing for ${option}`);
11421153
}
11431154
};
11441155

packages/connectkit/src/payment/paymentEffects.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,9 @@ async function runHydratePayParamsEffects(
380380
const payParams = prev.payParamsData;
381381
const walletOption = event.walletPaymentOption;
382382
const feeType = payParams.feeType ?? FeeType.ExactIn;
383+
console.log("walletOption", walletOption);
384+
console.log("order", JSON.stringify(order, null, 2));
385+
console.log("payParams", JSON.stringify(payParams, null, 2));
383386

384387
const toUnits = formatUnits(
385388
BigInt(order.destFinalCallTokenAmount.amount),
@@ -389,7 +392,8 @@ async function runHydratePayParamsEffects(
389392
feeType === FeeType.ExactIn
390393
? Number(toUnits)
391394
: Number(toUnits) - Number(walletOption?.fees.usd ?? 0);
392-
395+
console.log("toUnits", toUnits);
396+
console.log("calculatedToUnits", calculatedToUnits);
393397
const toChain = getOrderDestChainId(order);
394398
const toToken = order.destFinalCallTokenAmount.token.token;
395399

packages/pay-common/src/bridge-utils.ts

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { parseUnits } from "viem";
22
import {
3-
baseUSDC,
43
getChainById,
54
getKnownToken,
65
isChainSupported,
@@ -316,16 +315,6 @@ export function formatPaymentResponseToHydratedOrder(
316315
);
317316
}
318317

319-
// Determine the chain from metadata or default to the source chain
320-
const requiredChain = order.source?.chainId || baseUSDC.chainId;
321-
322-
const token = getKnownToken(
323-
Number(requiredChain),
324-
Number(requiredChain) === rozoStellarUSDC.chainId
325-
? rozoStellarUSDC.token
326-
: order.source?.tokenAddress || ""
327-
);
328-
329318
return {
330319
id: BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)),
331320
mode: RozoPayOrderMode.HYDRATED,
@@ -335,23 +324,21 @@ export function formatPaymentResponseToHydratedOrder(
335324
preferredTokenAddress: order.source?.tokenAddress ?? null,
336325
destFinalCallTokenAmount: {
337326
token: {
338-
chainId: destToken ? destToken.chainId : baseUSDC.chainId,
339-
token: destToken ? destToken.token : baseUSDC.token,
340-
symbol: destToken ? destToken.symbol : baseUSDC.symbol,
327+
chainId: destToken.chainId,
328+
token: destToken.token,
329+
symbol: destToken.symbol,
341330
usd: Number(sourceAmountUnits),
342331
priceFromUsd: 1,
343-
decimals: destToken ? destToken.decimals : baseUSDC.decimals,
332+
decimals: destToken.decimals,
344333
displayDecimals: 2,
345-
logoSourceURI: destToken
346-
? destToken.logoSourceURI
347-
: baseUSDC.logoSourceURI,
348-
logoURI: destToken ? destToken.logoURI : baseUSDC.logoURI,
334+
logoSourceURI: destToken.logoSourceURI,
335+
logoURI: destToken.logoURI,
349336
maxAcceptUsd: 100000,
350337
maxSendUsd: 0,
351338
},
352339
amount: parseUnits(
353340
sourceAmountUnits,
354-
destToken ? destToken.decimals : baseUSDC.decimals
341+
destToken.decimals
355342
).toString() as `${bigint}`,
356343
usd: Number(sourceAmountUnits),
357344
},

0 commit comments

Comments
 (0)