Skip to content

Commit af89836

Browse files
[SDK] Handle sponsored gas on TransactionWidget (#7437)
1 parent d85ee5f commit af89836

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

.changeset/rude-bags-say.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
Handle sponsored gas on TransactionWidget

packages/thirdweb/src/react/core/hooks/useTransactionDetails.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import type { PreparedTransaction } from "../../../transaction/prepare-transacti
1414
import { getTransactionGasCost } from "../../../transaction/utils.js";
1515
import { resolvePromisedValue } from "../../../utils/promise/resolve-promised-value.js";
1616
import { toTokens } from "../../../utils/units.js";
17+
import type { Wallet } from "../../../wallets/interfaces/wallet.js";
18+
import { hasSponsoredTransactionsEnabled } from "../../../wallets/smart/is-smart-wallet.js";
1719
import {
1820
formatCurrencyAmount,
1921
formatTokenAmount,
@@ -40,6 +42,7 @@ interface TransactionDetails {
4042
interface UseTransactionDetailsOptions {
4143
transaction: PreparedTransaction;
4244
client: ThirdwebClient;
45+
wallet: Wallet | undefined;
4346
}
4447

4548
/**
@@ -49,8 +52,10 @@ interface UseTransactionDetailsOptions {
4952
export function useTransactionDetails({
5053
transaction,
5154
client,
55+
wallet,
5256
}: UseTransactionDetailsOptions) {
5357
const chainMetadata = useChainMetadata(transaction.chain);
58+
const hasSponsoredTransactions = hasSponsoredTransactionsEnabled(wallet);
5459

5560
return useQuery({
5661
enabled: !!transaction.to && !!chainMetadata.data,
@@ -76,7 +81,9 @@ export function useTransactionDetails({
7681
erc20Value ? erc20Value.tokenAddress : NATIVE_TOKEN_ADDRESS,
7782
transaction.chain.id,
7883
).catch(() => null),
79-
getTransactionGasCost(transaction).catch(() => null),
84+
hasSponsoredTransactions
85+
? 0n
86+
: getTransactionGasCost(transaction).catch(() => null),
8087
]);
8188

8289
// Process function info from ABI if available
@@ -172,6 +179,7 @@ export function useTransactionDetails({
172179
transaction.to,
173180
transaction.chain.id,
174181
transaction.erc20Value?.toString(),
182+
hasSponsoredTransactions,
175183
],
176184
});
177185
}

packages/thirdweb/src/react/web/ui/Bridge/TransactionPayment.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import { useChainMetadata } from "../../../core/hooks/others/useChainQuery.js";
1616
import { useTransactionDetails } from "../../../core/hooks/useTransactionDetails.js";
1717
import { useActiveAccount } from "../../../core/hooks/wallets/useActiveAccount.js";
18+
import { useActiveWallet } from "../../../core/hooks/wallets/useActiveWallet.js";
1819
import { ConnectButton } from "../ConnectWallet/ConnectButton.js";
1920
import { PoweredByThirdweb } from "../ConnectWallet/PoweredByTW.js";
2021
import { Container, Line } from "../components/basic.js";
@@ -57,6 +58,7 @@ export function TransactionPayment({
5758
}: TransactionPaymentProps) {
5859
const theme = useCustomTheme();
5960
const activeAccount = useActiveAccount();
61+
const wallet = useActiveWallet();
6062

6163
// Get chain metadata for native currency symbol
6264
const chainMetadata = useChainMetadata(uiOptions.transaction.chain);
@@ -65,6 +67,7 @@ export function TransactionPayment({
6567
const transactionDataQuery = useTransactionDetails({
6668
client,
6769
transaction: uiOptions.transaction,
70+
wallet,
6871
});
6972

7073
const contractName =

packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentOverview.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ export function PaymentOverview(props: {
188188
{props.uiOptions.mode === "transaction" && (
189189
<TransactionOverViewCompact
190190
client={props.client}
191+
paymentMethod={props.paymentMethod}
191192
uiOptions={props.uiOptions}
192193
/>
193194
)}
@@ -198,12 +199,14 @@ export function PaymentOverview(props: {
198199

199200
const TransactionOverViewCompact = (props: {
200201
uiOptions: Extract<UIOptions, { mode: "transaction" }>;
202+
paymentMethod: PaymentMethod;
201203
client: ThirdwebClient;
202204
}) => {
203205
const theme = useCustomTheme();
204206
const txInfo = useTransactionDetails({
205207
client: props.client,
206208
transaction: props.uiOptions.transaction,
209+
wallet: props.paymentMethod.payerWallet,
207210
});
208211

209212
if (!txInfo.data) {

0 commit comments

Comments
 (0)