diff --git a/.changeset/smart-donkeys-jam.md b/.changeset/smart-donkeys-jam.md new file mode 100644 index 00000000000..f95f1eee00e --- /dev/null +++ b/.changeset/smart-donkeys-jam.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix custom paymaster callback not being respected diff --git a/packages/thirdweb/src/wallets/smart/index.ts b/packages/thirdweb/src/wallets/smart/index.ts index ff99d153c09..f4d860c23d9 100644 --- a/packages/thirdweb/src/wallets/smart/index.ts +++ b/packages/thirdweb/src/wallets/smart/index.ts @@ -225,6 +225,8 @@ async function createSmartAccount( }; }; paymasterOverride = options.overrides?.paymaster || paymasterCallback; + } else { + paymasterOverride = options.overrides?.paymaster; } const executeTx = prepareExecute({ accountContract, diff --git a/packages/thirdweb/src/wallets/smart/smart-wallet-integration.test.ts b/packages/thirdweb/src/wallets/smart/smart-wallet-integration.test.ts index 5a731ce71c1..895d7a93405 100644 --- a/packages/thirdweb/src/wallets/smart/smart-wallet-integration.test.ts +++ b/packages/thirdweb/src/wallets/smart/smart-wallet-integration.test.ts @@ -18,7 +18,9 @@ import { setContractURI } from "../../extensions/marketplace/__generated__/IMark import { estimateGasCost } from "../../transaction/actions/estimate-gas-cost.js"; import { sendAndConfirmTransaction } from "../../transaction/actions/send-and-confirm-transaction.js"; import { sendBatchTransaction } from "../../transaction/actions/send-batch-transaction.js"; +import { sendTransaction } from "../../transaction/actions/send-transaction.js"; import { waitForReceipt } from "../../transaction/actions/wait-for-tx-receipt.js"; +import { prepareTransaction } from "../../transaction/prepare-transaction.js"; import { isContractDeployed } from "../../utils/bytecode/is-contract-deployed.js"; import { sleep } from "../../utils/sleep.js"; import type { Account, Wallet } from "../interfaces/wallet.js"; @@ -364,5 +366,36 @@ describe.runIf(process.env.TW_SECRET_KEY).sequential( }); expect(balance).toEqual(2n); }); + + it("can use a different paymaster", async () => { + const wallet = smartWallet({ + chain, + factoryAddress: factoryAddress, + gasless: true, + overrides: { + paymaster: async () => { + return { + paymaster: "0x", + paymasterData: "0x", + }; + }, + }, + }); + const newSmartAccount = await wallet.connect({ + client: TEST_CLIENT, + personalAccount, + }); + const transaction = prepareTransaction({ + client: TEST_CLIENT, + chain, + value: 0n, + }); + await expect( + sendTransaction({ + transaction, + account: newSmartAccount, + }), + ).rejects.toThrowError(/AA21 didn't pay prefund/); + }); }, );