Skip to content

Commit 60eec03

Browse files
feat: use paymaster for all zk testnet chains (#5358)
Co-authored-by: 0xFirekeeper <0xFirekeeper@gmail.com>
1 parent 2e641f8 commit 60eec03

File tree

2 files changed

+40
-26
lines changed

2 files changed

+40
-26
lines changed

apps/dashboard/src/@/constants/thirdweb.server.ts

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import {
1212
THIRDWEB_STORAGE_DOMAIN,
1313
} from "constants/urls";
1414
import { createThirdwebClient } from "thirdweb";
15+
import { getChainMetadata } from "thirdweb/chains";
1516
import { populateEip712Transaction } from "thirdweb/transaction";
1617
import {
1718
getTransactionDecorator,
19+
isZkSyncChain,
1820
setThirdwebDomains,
1921
setTransactionDecorator,
2022
} from "thirdweb/utils";
@@ -37,32 +39,43 @@ export function getThirdwebClient(jwt?: string) {
3739

3840
if (!getTransactionDecorator()) {
3941
setTransactionDecorator(async ({ account, transaction }) => {
40-
// special override for sophon testnet (zk chain)
41-
// sophon only allows transactions through their paymaster
42-
// so always use eip712 tx + paymaster
43-
if (transaction.chain.id === 531050104) {
44-
const serializedTx = await populateEip712Transaction({
45-
transaction,
46-
account,
47-
});
48-
const pmData = await getZkPaymasterData({
49-
options: {
50-
client: transaction.client,
51-
chain: transaction.chain,
52-
},
53-
transaction: serializedTx,
54-
});
55-
return {
56-
account,
57-
transaction: {
58-
...transaction,
59-
eip712: {
60-
...transaction.eip712,
61-
paymaster: pmData.paymaster,
62-
paymasterInput: pmData.paymasterInput,
42+
// use paymaster for zk chains on testnets
43+
const chainMeta = await getChainMetadata(transaction.chain);
44+
if (chainMeta.testnet) {
45+
const isZkChain = await isZkSyncChain(transaction.chain);
46+
if (isZkChain) {
47+
const serializedTx = await populateEip712Transaction({
48+
transaction,
49+
account,
50+
});
51+
const pmData = await getZkPaymasterData({
52+
options: {
53+
client: transaction.client,
54+
chain: transaction.chain,
6355
},
64-
},
65-
};
56+
transaction: serializedTx,
57+
}).catch((e) => {
58+
console.warn(
59+
"No zk paymaster data available on chain ",
60+
transaction.chain.id,
61+
e,
62+
);
63+
return undefined;
64+
});
65+
return {
66+
account,
67+
transaction: {
68+
...transaction,
69+
eip712: pmData
70+
? {
71+
...transaction.eip712,
72+
paymaster: pmData.paymaster,
73+
paymasterInput: pmData.paymasterInput,
74+
}
75+
: transaction.eip712,
76+
},
77+
};
78+
}
6679
}
6780
return { account, transaction };
6881
});

packages/thirdweb/src/utils/any-evm/zksync/isZkSyncChain.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export async function isZkSyncChain(chain: Chain) {
1818
chain.id === 37111 ||
1919
chain.id === 978658 ||
2020
chain.id === 531050104 ||
21-
chain.id === 4457845
21+
chain.id === 4457845 ||
22+
chain.id === 2741
2223
) {
2324
return true;
2425
}

0 commit comments

Comments
 (0)