diff --git a/apps/dashboard/src/@/constants/thirdweb.server.ts b/apps/dashboard/src/@/constants/thirdweb.server.ts index 67e151e4c92..5686e5d1acc 100644 --- a/apps/dashboard/src/@/constants/thirdweb.server.ts +++ b/apps/dashboard/src/@/constants/thirdweb.server.ts @@ -12,9 +12,11 @@ import { THIRDWEB_STORAGE_DOMAIN, } from "constants/urls"; import { createThirdwebClient } from "thirdweb"; +import { getChainMetadata } from "thirdweb/chains"; import { populateEip712Transaction } from "thirdweb/transaction"; import { getTransactionDecorator, + isZkSyncChain, setThirdwebDomains, setTransactionDecorator, } from "thirdweb/utils"; @@ -37,32 +39,43 @@ export function getThirdwebClient(jwt?: string) { if (!getTransactionDecorator()) { setTransactionDecorator(async ({ account, transaction }) => { - // special override for sophon testnet (zk chain) - // sophon only allows transactions through their paymaster - // so always use eip712 tx + paymaster - if (transaction.chain.id === 531050104) { - const serializedTx = await populateEip712Transaction({ - transaction, - account, - }); - const pmData = await getZkPaymasterData({ - options: { - client: transaction.client, - chain: transaction.chain, - }, - transaction: serializedTx, - }); - return { - account, - transaction: { - ...transaction, - eip712: { - ...transaction.eip712, - paymaster: pmData.paymaster, - paymasterInput: pmData.paymasterInput, + // use paymaster for zk chains on testnets + const chainMeta = await getChainMetadata(transaction.chain); + if (chainMeta.testnet) { + const isZkChain = await isZkSyncChain(transaction.chain); + if (isZkChain) { + const serializedTx = await populateEip712Transaction({ + transaction, + account, + }); + const pmData = await getZkPaymasterData({ + options: { + client: transaction.client, + chain: transaction.chain, }, - }, - }; + transaction: serializedTx, + }).catch((e) => { + console.warn( + "No zk paymaster data available on chain ", + transaction.chain.id, + e, + ); + return undefined; + }); + return { + account, + transaction: { + ...transaction, + eip712: pmData + ? { + ...transaction.eip712, + paymaster: pmData.paymaster, + paymasterInput: pmData.paymasterInput, + } + : transaction.eip712, + }, + }; + } } return { account, transaction }; }); diff --git a/packages/thirdweb/src/utils/any-evm/zksync/isZkSyncChain.ts b/packages/thirdweb/src/utils/any-evm/zksync/isZkSyncChain.ts index 922bfffc3de..7799be6a31c 100644 --- a/packages/thirdweb/src/utils/any-evm/zksync/isZkSyncChain.ts +++ b/packages/thirdweb/src/utils/any-evm/zksync/isZkSyncChain.ts @@ -18,7 +18,8 @@ export async function isZkSyncChain(chain: Chain) { chain.id === 37111 || chain.id === 978658 || chain.id === 531050104 || - chain.id === 4457845 + chain.id === 4457845 || + chain.id === 2741 ) { return true; }