thirdweb 5.67.0-nightly-734707e28b829262a1b40f7db8c005d2adeaeaf9-20241107000509 → 5.67.1-nightly-a9375ce5939db3ddfe382b646a5c907b8f975b65-20241109000328

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/cjs/analytics/track/connect.js +2 -1
  2. package/dist/cjs/analytics/track/connect.js.map +1 -1
  3. package/dist/cjs/client/client.js +1 -1
  4. package/dist/cjs/contract/deployment/zksync/zkDeployContract.js +1 -1
  5. package/dist/cjs/contract/deployment/zksync/zkDeployContract.js.map +1 -1
  6. package/dist/cjs/contract/deployment/zksync/zkDeployCreate2Factory.js +5 -1
  7. package/dist/cjs/contract/deployment/zksync/zkDeployCreate2Factory.js.map +1 -1
  8. package/dist/cjs/contract/deployment/zksync/zkDeployProxy.js +4 -3
  9. package/dist/cjs/contract/deployment/zksync/zkDeployProxy.js.map +1 -1
  10. package/dist/cjs/exports/transaction.js +3 -1
  11. package/dist/cjs/exports/transaction.js.map +1 -1
  12. package/dist/cjs/exports/utils.js +5 -1
  13. package/dist/cjs/exports/utils.js.map +1 -1
  14. package/dist/cjs/exports/wallets/smart.js +3 -1
  15. package/dist/cjs/exports/wallets/smart.js.map +1 -1
  16. package/dist/cjs/extensions/prebuilts/get-required-transactions.js +28 -24
  17. package/dist/cjs/extensions/prebuilts/get-required-transactions.js.map +1 -1
  18. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +1 -1
  19. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +1 -1
  20. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  21. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +1 -1
  22. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +1 -1
  23. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js +1 -1
  24. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js.map +1 -1
  25. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +1 -1
  26. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  27. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js +1 -0
  28. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  29. package/dist/cjs/transaction/actions/estimate-gas-cost.js +6 -5
  30. package/dist/cjs/transaction/actions/estimate-gas-cost.js.map +1 -1
  31. package/dist/cjs/transaction/actions/send-transaction.js +9 -2
  32. package/dist/cjs/transaction/actions/send-transaction.js.map +1 -1
  33. package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js +2 -1
  34. package/dist/cjs/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
  35. package/dist/cjs/utils/config.js +16 -0
  36. package/dist/cjs/utils/config.js.map +1 -0
  37. package/dist/cjs/utils/fetch.js +15 -2
  38. package/dist/cjs/utils/fetch.js.map +1 -1
  39. package/dist/cjs/version.js +1 -1
  40. package/dist/cjs/wallets/coinbase/coinbase-wallet.js +2 -0
  41. package/dist/cjs/wallets/coinbase/coinbase-wallet.js.map +1 -1
  42. package/dist/cjs/wallets/create-wallet.js +4 -0
  43. package/dist/cjs/wallets/create-wallet.js.map +1 -1
  44. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js +2 -0
  45. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  46. package/dist/cjs/wallets/native/create-wallet.js +2 -0
  47. package/dist/cjs/wallets/native/create-wallet.js.map +1 -1
  48. package/dist/cjs/wallets/smart/index.js +2 -1
  49. package/dist/cjs/wallets/smart/index.js.map +1 -1
  50. package/dist/cjs/wallets/smart/smart-wallet.js +2 -0
  51. package/dist/cjs/wallets/smart/smart-wallet.js.map +1 -1
  52. package/dist/esm/analytics/track/connect.js +2 -1
  53. package/dist/esm/analytics/track/connect.js.map +1 -1
  54. package/dist/esm/client/client.js +1 -1
  55. package/dist/esm/contract/deployment/zksync/zkDeployContract.js +1 -1
  56. package/dist/esm/contract/deployment/zksync/zkDeployContract.js.map +1 -1
  57. package/dist/esm/contract/deployment/zksync/zkDeployCreate2Factory.js +5 -1
  58. package/dist/esm/contract/deployment/zksync/zkDeployCreate2Factory.js.map +1 -1
  59. package/dist/esm/contract/deployment/zksync/zkDeployProxy.js +4 -3
  60. package/dist/esm/contract/deployment/zksync/zkDeployProxy.js.map +1 -1
  61. package/dist/esm/exports/transaction.js +1 -0
  62. package/dist/esm/exports/transaction.js.map +1 -1
  63. package/dist/esm/exports/utils.js +1 -0
  64. package/dist/esm/exports/utils.js.map +1 -1
  65. package/dist/esm/exports/wallets/smart.js +1 -0
  66. package/dist/esm/exports/wallets/smart.js.map +1 -1
  67. package/dist/esm/extensions/prebuilts/get-required-transactions.js +28 -24
  68. package/dist/esm/extensions/prebuilts/get-required-transactions.js.map +1 -1
  69. package/dist/esm/react/web/ui/ConnectWallet/Details.js +1 -1
  70. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +1 -1
  71. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  72. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +1 -1
  73. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +1 -1
  74. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js +1 -1
  75. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js.map +1 -1
  76. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +1 -1
  77. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
  78. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js +1 -0
  79. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  80. package/dist/esm/transaction/actions/estimate-gas-cost.js +6 -5
  81. package/dist/esm/transaction/actions/estimate-gas-cost.js.map +1 -1
  82. package/dist/esm/transaction/actions/send-transaction.js +9 -2
  83. package/dist/esm/transaction/actions/send-transaction.js.map +1 -1
  84. package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js +2 -1
  85. package/dist/esm/utils/any-evm/zksync/isZkSyncChain.js.map +1 -1
  86. package/dist/esm/utils/config.js +11 -0
  87. package/dist/esm/utils/config.js.map +1 -0
  88. package/dist/esm/utils/fetch.js +15 -2
  89. package/dist/esm/utils/fetch.js.map +1 -1
  90. package/dist/esm/version.js +1 -1
  91. package/dist/esm/wallets/coinbase/coinbase-wallet.js +2 -0
  92. package/dist/esm/wallets/coinbase/coinbase-wallet.js.map +1 -1
  93. package/dist/esm/wallets/create-wallet.js +4 -0
  94. package/dist/esm/wallets/create-wallet.js.map +1 -1
  95. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js +2 -0
  96. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  97. package/dist/esm/wallets/native/create-wallet.js +2 -0
  98. package/dist/esm/wallets/native/create-wallet.js.map +1 -1
  99. package/dist/esm/wallets/smart/index.js +2 -1
  100. package/dist/esm/wallets/smart/index.js.map +1 -1
  101. package/dist/esm/wallets/smart/smart-wallet.js +2 -0
  102. package/dist/esm/wallets/smart/smart-wallet.js.map +1 -1
  103. package/dist/types/analytics/track/connect.d.ts +1 -0
  104. package/dist/types/analytics/track/connect.d.ts.map +1 -1
  105. package/dist/types/client/client.d.ts +1 -1
  106. package/dist/types/contract/deployment/zksync/zkDeployContract.d.ts +1 -0
  107. package/dist/types/contract/deployment/zksync/zkDeployContract.d.ts.map +1 -1
  108. package/dist/types/contract/deployment/zksync/zkDeployCreate2Factory.d.ts.map +1 -1
  109. package/dist/types/contract/deployment/zksync/zkDeployProxy.d.ts.map +1 -1
  110. package/dist/types/exports/transaction.d.ts +1 -0
  111. package/dist/types/exports/transaction.d.ts.map +1 -1
  112. package/dist/types/exports/utils.d.ts +1 -0
  113. package/dist/types/exports/utils.d.ts.map +1 -1
  114. package/dist/types/exports/wallets/smart.d.ts +1 -0
  115. package/dist/types/exports/wallets/smart.d.ts.map +1 -1
  116. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts.map +1 -1
  117. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts.map +1 -1
  118. package/dist/types/transaction/actions/estimate-gas-cost.d.ts.map +1 -1
  119. package/dist/types/transaction/actions/send-transaction.d.ts.map +1 -1
  120. package/dist/types/utils/any-evm/zksync/isZkSyncChain.d.ts.map +1 -1
  121. package/dist/types/utils/config.d.ts +18 -0
  122. package/dist/types/utils/config.d.ts.map +1 -0
  123. package/dist/types/utils/fetch.d.ts.map +1 -1
  124. package/dist/types/version.d.ts +1 -1
  125. package/dist/types/wallets/coinbase/coinbase-wallet.d.ts.map +1 -1
  126. package/dist/types/wallets/create-wallet.d.ts.map +1 -1
  127. package/dist/types/wallets/in-app/core/authentication/types.d.ts +2 -2
  128. package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
  129. package/dist/types/wallets/in-app/core/wallet/in-app-core.d.ts.map +1 -1
  130. package/dist/types/wallets/in-app/web/types.d.ts +1 -1
  131. package/dist/types/wallets/interfaces/wallet.d.ts +2 -1
  132. package/dist/types/wallets/interfaces/wallet.d.ts.map +1 -1
  133. package/dist/types/wallets/native/create-wallet.d.ts.map +1 -1
  134. package/dist/types/wallets/smart/smart-wallet.d.ts.map +1 -1
  135. package/package.json +11 -11
  136. package/src/analytics/track/connect.ts +3 -1
  137. package/src/client/client.ts +1 -1
  138. package/src/contract/deployment/zksync/zkDeployContract.ts +3 -1
  139. package/src/contract/deployment/zksync/zkDeployCreate2Factory.ts +9 -1
  140. package/src/contract/deployment/zksync/zkDeployProxy.ts +4 -3
  141. package/src/exports/transaction.ts +1 -0
  142. package/src/exports/utils.ts +5 -0
  143. package/src/exports/wallets/smart.ts +1 -0
  144. package/src/extensions/prebuilts/get-required-transactions.ts +34 -30
  145. package/src/react/web/ui/ConnectWallet/Details.tsx +1 -1
  146. package/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx +1 -1
  147. package/src/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.tsx +1 -1
  148. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.tsx +1 -1
  149. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.tsx +1 -1
  150. package/src/react/web/ui/TransactionButton/TransactionModal.tsx +1 -0
  151. package/src/transaction/actions/estimate-gas-cost.test.ts +9 -9
  152. package/src/transaction/actions/estimate-gas-cost.ts +11 -5
  153. package/src/transaction/actions/send-transaction.ts +11 -2
  154. package/src/utils/any-evm/zksync/isZkSyncChain.ts +2 -1
  155. package/src/utils/config.ts +26 -0
  156. package/src/utils/fetch.ts +19 -2
  157. package/src/version.ts +1 -1
  158. package/src/wallets/coinbase/coinbase-wallet.ts +2 -0
  159. package/src/wallets/create-wallet.ts +4 -0
  160. package/src/wallets/in-app/core/authentication/types.ts +2 -2
  161. package/src/wallets/in-app/core/wallet/in-app-core.ts +2 -0
  162. package/src/wallets/in-app/web/types.ts +1 -1
  163. package/src/wallets/interfaces/wallet.ts +5 -1
  164. package/src/wallets/native/create-wallet.ts +2 -0
  165. package/src/wallets/smart/index.ts +2 -1
  166. package/src/wallets/smart/smart-wallet-dev.test.ts +28 -3
  167. package/src/wallets/smart/smart-wallet-integration.test.ts +1 -22
  168. package/src/wallets/smart/smart-wallet.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thirdweb",
3
- "version": "5.67.0-nightly-734707e28b829262a1b40f7db8c005d2adeaeaf9-20241107000509",
3
+ "version": "5.67.1-nightly-a9375ce5939db3ddfe382b646a5c907b8f975b65-20241109000328",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/thirdweb-dev/js.git#main"
@@ -199,7 +199,7 @@
199
199
  "!tsconfig.build.json"
200
200
  ],
201
201
  "dependencies": {
202
- "@coinbase/wallet-sdk": "4.2.0",
202
+ "@coinbase/wallet-sdk": "4.2.2",
203
203
  "@emotion/react": "11.13.3",
204
204
  "@emotion/styled": "11.13.0",
205
205
  "@google/model-viewer": "2.1.1",
@@ -210,7 +210,7 @@
210
210
  "@radix-ui/react-focus-scope": "1.1.0",
211
211
  "@radix-ui/react-icons": "1.3.1",
212
212
  "@radix-ui/react-tooltip": "1.1.3",
213
- "@tanstack/react-query": "5.59.19",
213
+ "@tanstack/react-query": "5.59.20",
214
214
  "@walletconnect/ethereum-provider": "2.17.2",
215
215
  "@walletconnect/sign-client": "2.17.2",
216
216
  "abitype": "1.0.6",
@@ -218,7 +218,7 @@
218
218
  "input-otp": "^1.4.1",
219
219
  "mipd": "0.0.7",
220
220
  "uqr": "0.1.2",
221
- "viem": "2.21.41"
221
+ "viem": "2.21.42"
222
222
  },
223
223
  "peerDependencies": {
224
224
  "@aws-sdk/client-lambda": "^3",
@@ -290,9 +290,9 @@
290
290
  "node": ">=18"
291
291
  },
292
292
  "devDependencies": {
293
- "@aws-sdk/client-kms": "3.682.0",
294
- "@aws-sdk/client-lambda": "3.682.0",
295
- "@aws-sdk/credential-providers": "3.685.0",
293
+ "@aws-sdk/client-kms": "3.687.0",
294
+ "@aws-sdk/client-lambda": "3.687.0",
295
+ "@aws-sdk/credential-providers": "3.687.0",
296
296
  "@biomejs/biome": "1.9.4",
297
297
  "@chromatic-com/storybook": "3.2.2",
298
298
  "@codspeed/vitest-plugin": "3.1.1",
@@ -316,15 +316,15 @@
316
316
  "@vitejs/plugin-react": "^4.3.3",
317
317
  "@vitest/coverage-v8": "2.1.4",
318
318
  "@vitest/ui": "2.1.4",
319
- "cross-spawn": "7.0.3",
319
+ "cross-spawn": "7.0.5",
320
320
  "dotenv-mono": "^1.3.14",
321
321
  "ethers5": "npm:ethers@5",
322
322
  "ethers6": "npm:ethers@6",
323
323
  "expo-linking": "6.3.1",
324
324
  "expo-web-browser": "13.0.3",
325
- "happy-dom": "^15.10.2",
326
- "knip": "5.36.2",
327
- "msw": "^2.6.0",
325
+ "happy-dom": "^15.11.0",
326
+ "knip": "5.36.3",
327
+ "msw": "^2.6.2",
328
328
  "prettier": "^3.3.2",
329
329
  "react": "19.0.0-rc-69d4b800-20241021",
330
330
  "react-native": "0.76.1",
@@ -10,8 +10,9 @@ export async function trackConnect(args: {
10
10
  ecosystem?: Ecosystem;
11
11
  walletType: string;
12
12
  walletAddress: string;
13
+ chainId?: number;
13
14
  }) {
14
- const { client, ecosystem, walletType, walletAddress } = args;
15
+ const { client, ecosystem, walletType, walletAddress, chainId } = args;
15
16
  return track({
16
17
  client,
17
18
  ecosystem,
@@ -20,6 +21,7 @@ export async function trackConnect(args: {
20
21
  action: "connect",
21
22
  walletType,
22
23
  walletAddress,
24
+ chainId,
23
25
  },
24
26
  });
25
27
  }
@@ -73,7 +73,7 @@ export type ThirdwebClient = {
73
73
  /**
74
74
  * Creates a Thirdweb client using the provided client ID (client-side) or secret key (server-side).
75
75
  *
76
- * Get your client ID and secret key from the Thirdweb dashboard [here](https://thirdweb.com/dashboard/settings/api-keys).
76
+ * Get your client ID and secret key from the Thirdweb dashboard [here](https://thirdweb.com/create-api-key).
77
77
  * **Never share your secret key with anyone.
78
78
  *
79
79
  * A client is necessary for most functions in the thirdweb SDK. It provides access to thirdweb APIs including built-in RPC, storage, and more.
@@ -19,6 +19,7 @@ export async function zkDeployContract(
19
19
  bytecode: Hex;
20
20
  params?: Record<string, unknown>;
21
21
  salt?: string;
22
+ deploymentType?: "create" | "create2";
22
23
  },
23
24
  ) {
24
25
  if (options.salt !== undefined) {
@@ -29,7 +30,7 @@ export async function zkDeployContract(
29
30
  const data = encodeDeployData({
30
31
  abi: options.abi,
31
32
  bytecode: options.bytecode,
32
- deploymentType: "create",
33
+ deploymentType: options.deploymentType ?? "create",
33
34
  args: normalizeFunctionParams(
34
35
  options.abi.find((abi) => abi.type === "constructor"),
35
36
  options.params,
@@ -56,6 +57,7 @@ export async function zkDeployContract(
56
57
  });
57
58
 
58
59
  const contractAddress = events[0]?.args.contractAddress;
60
+
59
61
  if (!contractAddress) {
60
62
  throw new Error("Contract creation failed");
61
63
  }
@@ -30,10 +30,17 @@ export async function zkDeployCreate2Factory(
30
30
  return ZKSYNC_SINGLETON_FACTORY;
31
31
  }
32
32
 
33
+ if (!PUBLISHED_PRIVATE_KEY) {
34
+ throw new Error(
35
+ `Unable to deploy create2 factory on chain ${options.chain.id} - please contact us via https://thirdweb.com/support to enable this chain`,
36
+ );
37
+ }
38
+
33
39
  const create2Signer = privateKeyToAccount({
34
40
  client: options.client,
35
41
  privateKey: PUBLISHED_PRIVATE_KEY,
36
42
  });
43
+
37
44
  const valueToSend = toWei("0.01");
38
45
  const balance = await getWalletBalance({
39
46
  address: create2Signer.address,
@@ -56,9 +63,10 @@ export async function zkDeployCreate2Factory(
56
63
  await zkDeployContract({
57
64
  client: options.client,
58
65
  chain: options.chain,
59
- account: options.account,
66
+ account: create2Signer,
60
67
  abi: parseAbi(singletonFactoryAbi),
61
68
  bytecode: singletonFactoryBytecode,
69
+ deploymentType: "create2",
62
70
  });
63
71
 
64
72
  return ZKSYNC_SINGLETON_FACTORY;
@@ -6,9 +6,10 @@ import {
6
6
  } from "../../../utils/any-evm/zksync/constants.js";
7
7
  import { isContractDeployed } from "../../../utils/bytecode/is-contract-deployed.js";
8
8
  import { resolvePromisedValue } from "../../../utils/promise/resolve-promised-value.js";
9
+ import { randomBytesHex } from "../../../utils/random.js";
9
10
  import type { ClientAndChainAndAccount } from "../../../utils/types.js";
10
11
  import type { ThirdwebContract } from "../../contract.js";
11
- import { zkDeployContract } from "./zkDeployContract.js";
12
+ import { zkDeployContractDeterministic } from "./zkDeployDeterministic.js";
12
13
 
13
14
  /**
14
15
  * @internal
@@ -38,7 +39,7 @@ export async function zkDeployProxy(
38
39
  );
39
40
  }
40
41
  // deploy tw proxy of the implementation
41
- const proxyAddress = await zkDeployContract({
42
+ const proxyAddress = await zkDeployContractDeterministic({
42
43
  client: options.client,
43
44
  chain: options.chain,
44
45
  account: options.account,
@@ -48,7 +49,7 @@ export async function zkDeployProxy(
48
49
  _logic: implementationAddress,
49
50
  _data: await encode(options.initializeTransaction),
50
51
  },
51
- salt: options.salt,
52
+ salt: options.salt || randomBytesHex(32),
52
53
  });
53
54
 
54
55
  // return address of proxy
@@ -59,6 +59,7 @@ export {
59
59
  type StoredTransaction,
60
60
  getTransactionStore,
61
61
  } from "../transaction/transaction-store.js";
62
+ export { populateEip712Transaction } from "../transaction/actions/zksync/send-eip712-transaction.js";
62
63
 
63
64
  //types & utils
64
65
  export {
@@ -147,6 +147,11 @@ export { encodePacked } from "viem";
147
147
  // Useful helpers
148
148
  export { setThirdwebDomains } from "../utils/domains.js";
149
149
  export { resolvePromisedValue } from "../utils/promise/resolve-promised-value.js";
150
+ export {
151
+ setTransactionDecorator,
152
+ getTransactionDecorator,
153
+ clearTransactionDecorator,
154
+ } from "../utils/config.js";
150
155
 
151
156
  // ------------------------------------------------
152
157
  // json
@@ -21,6 +21,7 @@ export {
21
21
  } from "../../wallets/smart/lib/calls.js";
22
22
 
23
23
  export { getPaymasterAndData } from "../../wallets/smart/lib/paymaster.js";
24
+ export { getZkPaymasterData } from "../../wallets/smart/lib/bundler.js";
24
25
 
25
26
  export type {
26
27
  SmartWalletConnectionOptions,
@@ -51,39 +51,43 @@ export async function getRequiredTransactions(
51
51
  | DeployTransactionResult[]
52
52
  | null
53
53
  )[] = await Promise.all([
54
- getDeployedCreate2Factory({
55
- chain,
56
- client,
57
- }).then((c) =>
58
- c || isZkSync
59
- ? null
60
- : ({ type: "infra", contractId: "Create2Factory" } as const),
61
- ),
62
- getDeployedInfraContract({
63
- chain,
64
- client,
65
- contractId: "Forwarder",
66
- }).then((c) =>
67
- c || isZkSync
68
- ? null
69
- : ({ type: "infra", contractId: "Forwarder" } as const),
70
- ),
71
- getDeployedInfraContract({
72
- chain,
73
- client,
74
- contractId: "TWCloneFactory",
75
- constructorParams: {
76
- _trustedForwarder: await computePublishedContractAddress({
54
+ isZkSync
55
+ ? null
56
+ : getDeployedCreate2Factory({
57
+ chain,
58
+ client,
59
+ }).then((c) =>
60
+ c
61
+ ? null
62
+ : ({ type: "infra", contractId: "Create2Factory" } as const),
63
+ ),
64
+ isZkSync
65
+ ? null
66
+ : getDeployedInfraContract({
77
67
  chain,
78
68
  client,
79
69
  contractId: "Forwarder",
80
- }),
81
- },
82
- }).then((c) =>
83
- c || isZkSync
84
- ? null
85
- : ({ type: "infra", contractId: "TWCloneFactory" } as const),
86
- ),
70
+ }).then((c) =>
71
+ c ? null : ({ type: "infra", contractId: "Forwarder" } as const),
72
+ ),
73
+ isZkSync
74
+ ? null
75
+ : getDeployedInfraContract({
76
+ chain,
77
+ client,
78
+ contractId: "TWCloneFactory",
79
+ constructorParams: {
80
+ _trustedForwarder: await computePublishedContractAddress({
81
+ chain,
82
+ client,
83
+ contractId: "Forwarder",
84
+ }),
85
+ },
86
+ }).then((c) =>
87
+ c
88
+ ? null
89
+ : ({ type: "infra", contractId: "TWCloneFactory" } as const),
90
+ ),
87
91
  // TODO (deploy): add WETH contract check for implementations that need it (check implementation constructor params)
88
92
  getTransactionsForImplementation({
89
93
  chain,
@@ -363,7 +363,7 @@ function DetailsModal(props: {
363
363
  {chainNameQuery.name || `Unknown chain #${walletChain?.id}`}
364
364
  <Text color="secondaryText" size="xs">
365
365
  {balanceQuery.data ? (
366
- formatNumber(Number(balanceQuery.data.displayValue), 5)
366
+ formatNumber(Number(balanceQuery.data.displayValue), 9)
367
367
  ) : (
368
368
  <Skeleton height="1em" width="100px" />
369
369
  )}{" "}
@@ -125,7 +125,7 @@ export function TransactionModeScreen(props: {
125
125
  {balanceQuery.data ? (
126
126
  <Container flex="row" gap="3xs" center="y">
127
127
  <Text size="xs" color="secondaryText" weight={500}>
128
- {formatTokenBalance(balanceQuery.data, false, 3)}
128
+ {formatTokenBalance(balanceQuery.data, false)}
129
129
  </Text>
130
130
  <TokenSymbol
131
131
  token={transactionCostAndData.token}
@@ -115,7 +115,7 @@ function TokenBalanceRow(props: {
115
115
  <div style={{ flex: 1 }} />
116
116
  <Container flex="row" center="y" gap="3xs">
117
117
  <Text size="xs" color="secondaryText">
118
- {formatTokenBalance(tokenBalance.balance, true, 3)}
118
+ {formatTokenBalance(tokenBalance.balance, true)}
119
119
  </Text>
120
120
  </Container>
121
121
  </StyledButton>
@@ -279,7 +279,7 @@ export function SwapConfirmationScreen(props: {
279
279
  fromAmount: props.quote.swapDetails.fromAmountWei,
280
280
  toToken: props.quote.swapDetails.toToken.tokenAddress,
281
281
  toAmount: props.quote.swapDetails.toAmountWei,
282
- chainId: props.quote.swapDetails.toToken.chainId,
282
+ chainId: props.quote.swapDetails.fromToken.chainId,
283
283
  dstChainId: props.quote.swapDetails.toToken.chainId,
284
284
  });
285
285
 
@@ -74,7 +74,7 @@ export function PayWithCryptoQuoteInfo(props: {
74
74
  {balanceQuery.data ? (
75
75
  <Container flex="row" gap="3xs" center="y">
76
76
  <Text size="xs" color="secondaryText" weight={500}>
77
- {formatTokenBalance(balanceQuery.data, false, 3)}
77
+ {formatTokenBalance(balanceQuery.data, false)}
78
78
  </Text>
79
79
  <TokenSymbol
80
80
  token={props.token}
@@ -42,6 +42,7 @@ export function TransactionModal(props: ModalProps) {
42
42
  client: props.client,
43
43
  walletAddress: account.address,
44
44
  walletType: wallet.id,
45
+ dstChainId: props.tx.chain.id,
45
46
  event: "open_pay_transaction_modal",
46
47
  });
47
48
  },
@@ -22,11 +22,11 @@ describe.runIf(process.env.TW_SECRET_KEY)("estimateGasCost", () => {
22
22
  transaction: tx,
23
23
  });
24
24
  expect(result).toMatchInlineSnapshot(`
25
- {
26
- "ether": "0.001196638702568277",
27
- "wei": 1196638702568277n,
28
- }
29
- `);
25
+ {
26
+ "ether": "0.002468675264234022",
27
+ "wei": 2468675264234022n,
28
+ }
29
+ `);
30
30
  });
31
31
 
32
32
  it("should estimateGasCost native token", async () => {
@@ -41,8 +41,8 @@ describe.runIf(process.env.TW_SECRET_KEY)("estimateGasCost", () => {
41
41
  });
42
42
  expect(result).toMatchInlineSnapshot(`
43
43
  {
44
- "ether": "0.00052179661420146",
45
- "wei": 521796614201460n,
44
+ "ether": "0.00107647061028156",
45
+ "wei": 1076470610281560n,
46
46
  }
47
47
  `);
48
48
  });
@@ -61,8 +61,8 @@ describe.runIf(process.env.TW_SECRET_KEY)("estimateGasCost", () => {
61
61
  });
62
62
  expect(result).toMatchInlineSnapshot(`
63
63
  {
64
- "ether": "0.000021198198952138",
65
- "wei": 21198198952138n,
64
+ "ether": "0.000023420415571618",
65
+ "wei": 23420415571618n,
66
66
  }
67
67
  `);
68
68
  });
@@ -1,5 +1,5 @@
1
1
  import { isOpStackChain } from "../../chains/constants.js";
2
- import { getGasPrice } from "../../gas/get-gas-price.js";
2
+ import { getDefaultGasOverrides } from "../../gas/fee-data.js";
3
3
  import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
4
4
  import { toEther } from "../../utils/units.js";
5
5
  import { type EstimateGasOptions, estimateGas } from "./estimate-gas.js";
@@ -33,10 +33,16 @@ export async function estimateGasCost(
33
33
  const gasLimit =
34
34
  (await resolvePromisedValue(transaction.gas)) ||
35
35
  (await estimateGas({ transaction, from }));
36
- const gasPrice = await getGasPrice({
37
- client: transaction.client,
38
- chain: transaction.chain,
39
- });
36
+ const fees = await getDefaultGasOverrides(
37
+ transaction.client,
38
+ transaction.chain,
39
+ );
40
+ const gasPrice = fees.maxFeePerGas || fees.gasPrice;
41
+ if (!gasPrice) {
42
+ throw new Error(
43
+ `Unable to determine gas price for chain ${transaction.chain.id}`,
44
+ );
45
+ }
40
46
  let l1Fee: bigint;
41
47
  if (isOpStackChain(transaction.chain)) {
42
48
  const { estimateL1Fee } = await import("../../gas/estimate-l1-fee.js");
@@ -1,3 +1,4 @@
1
+ import { getTransactionDecorator } from "../../utils/config.js";
1
2
  import type { Account } from "../../wallets/interfaces/wallet.js";
2
3
  import type { PreparedTransaction } from "../prepare-transaction.js";
3
4
  import { addTransactionToStore } from "../transaction-store.js";
@@ -138,14 +139,22 @@ export interface SendTransactionOptions {
138
139
  export async function sendTransaction(
139
140
  options: SendTransactionOptions,
140
141
  ): Promise<WaitForReceiptOptions> {
141
- const { account, transaction, gasless } = options;
142
+ let { account, transaction, gasless } = options;
143
+
144
+ const decorator = getTransactionDecorator();
145
+ if (decorator) {
146
+ const { account: decoratedAccount, transaction: decoratedTransaction } =
147
+ await decorator({ account, transaction });
148
+ account = decoratedAccount;
149
+ transaction = decoratedTransaction;
150
+ }
142
151
 
143
152
  if (account.onTransactionRequested) {
144
153
  await account.onTransactionRequested(transaction);
145
154
  }
146
155
 
147
156
  // if zksync transaction params are set, send with eip712
148
- if (options.transaction.eip712) {
157
+ if (transaction.eip712) {
149
158
  const { sendEip712Transaction } = await import(
150
159
  "./zksync/send-eip712-transaction.js"
151
160
  );
@@ -18,7 +18,8 @@ export async function isZkSyncChain(chain: Chain) {
18
18
  chain.id === 37111 ||
19
19
  chain.id === 978658 ||
20
20
  chain.id === 531050104 ||
21
- chain.id === 4457845
21
+ chain.id === 4457845 ||
22
+ chain.id === 2741
22
23
  ) {
23
24
  return true;
24
25
  }
@@ -0,0 +1,26 @@
1
+ import type { PreparedTransaction } from "../transaction/prepare-transaction.js";
2
+ import type { Account } from "../wallets/interfaces/wallet.js";
3
+
4
+ let transactionDecorator:
5
+ | ((args: {
6
+ account: Account;
7
+ transaction: PreparedTransaction;
8
+ }) => Promise<{ account: Account; transaction: PreparedTransaction }>)
9
+ | null = null;
10
+
11
+ export function setTransactionDecorator(
12
+ decoratorFunction: (args: {
13
+ account: Account;
14
+ transaction: PreparedTransaction;
15
+ }) => Promise<{ account: Account; transaction: PreparedTransaction }>,
16
+ ) {
17
+ transactionDecorator = decoratorFunction;
18
+ }
19
+
20
+ export function clearTransactionDecorator() {
21
+ transactionDecorator = null;
22
+ }
23
+
24
+ export function getTransactionDecorator() {
25
+ return transactionDecorator;
26
+ }
@@ -45,9 +45,14 @@ export function getClientFetch(client: ThirdwebClient, ecosystem?: Ecosystem) {
45
45
  : undefined;
46
46
  const clientId = client.clientId;
47
47
 
48
- // if we have an auth token set, use that (thirdweb.com/dashboard sets this for the user)
48
+ // if we have an auth token set, use that (thirdweb dashboard sets this for the user)
49
49
  // pay urls should never send the auth token, because we always want the "developer" to be the one making the request, not the "end user"
50
- if (authToken && !isPayUrl(url) && !isInAppWalletUrl(url)) {
50
+ if (
51
+ authToken &&
52
+ !isPayUrl(url) &&
53
+ !isInAppWalletUrl(url) &&
54
+ !isBundlerUrl(url)
55
+ ) {
51
56
  headers.set("authorization", `Bearer ${authToken}`);
52
57
  } else if (secretKey) {
53
58
  headers.set("x-secret-key", secretKey);
@@ -153,6 +158,18 @@ function isInAppWalletUrl(url: string): boolean {
153
158
  }
154
159
  }
155
160
 
161
+ function isBundlerUrl(url: string): boolean {
162
+ try {
163
+ const { hostname } = new URL(url);
164
+ return (
165
+ hostname.endsWith(".bundler.thirdweb.com") ||
166
+ hostname.endsWith(".bundler.thirdweb-dev.com")
167
+ );
168
+ } catch {
169
+ return false;
170
+ }
171
+ }
172
+
156
173
  const SDK_NAME = "unified-sdk";
157
174
 
158
175
  let previousPlatform: [string, string][] | undefined;
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.67.0-nightly-734707e28b829262a1b40f7db8c005d2adeaeaf9-20241107000509";
1
+ export const version = "5.67.1-nightly-a9375ce5939db3ddfe382b646a5c907b8f975b65-20241109000328";
@@ -81,6 +81,7 @@ export function coinbaseWalletSDK(args: {
81
81
  client: options.client,
82
82
  walletType: COINBASE,
83
83
  walletAddress: account.address,
84
+ chainId: chain.id,
84
85
  });
85
86
  // return account
86
87
  return account;
@@ -100,6 +101,7 @@ export function coinbaseWalletSDK(args: {
100
101
  client: options.client,
101
102
  walletType: COINBASE,
102
103
  walletAddress: account.address,
104
+ chainId: chain.id,
103
105
  });
104
106
  // return account
105
107
  return account;
@@ -250,6 +250,7 @@ export function createWallet<const ID extends WalletId>(
250
250
  client: options.client,
251
251
  walletType: id,
252
252
  walletAddress: account.address,
253
+ chainId: chain.id,
253
254
  });
254
255
  // return account
255
256
  return account;
@@ -281,6 +282,7 @@ export function createWallet<const ID extends WalletId>(
281
282
  client: options.client,
282
283
  walletType: id,
283
284
  walletAddress: account.address,
285
+ chainId: chain.id,
284
286
  });
285
287
  // return account
286
288
  return account;
@@ -314,6 +316,7 @@ export function createWallet<const ID extends WalletId>(
314
316
  client: wcOptions.client,
315
317
  walletType: id,
316
318
  walletAddress: account.address,
319
+ chainId: chain.id,
317
320
  });
318
321
  return account;
319
322
  }
@@ -359,6 +362,7 @@ export function createWallet<const ID extends WalletId>(
359
362
  client: options.client,
360
363
  walletType: id,
361
364
  walletAddress: account.address,
365
+ chainId: chain.id,
362
366
  });
363
367
  // return account
364
368
  return account;
@@ -34,8 +34,8 @@ export type SocialAuthArgsType = {
34
34
 
35
35
  export type SingleStepAuthArgsType =
36
36
  | SocialAuthArgsType
37
- | { strategy: "jwt"; jwt: string; encryptionKey: string }
38
- | { strategy: "auth_endpoint"; payload: string; encryptionKey: string }
37
+ | { strategy: "jwt"; jwt: string; encryptionKey?: string }
38
+ | { strategy: "auth_endpoint"; payload: string; encryptionKey?: string }
39
39
  | {
40
40
  /**
41
41
  * @deprecated
@@ -106,6 +106,7 @@ export function createInAppWallet(args: {
106
106
  ecosystem,
107
107
  walletType: walletId,
108
108
  walletAddress: account.address,
109
+ chainId: chain.id,
109
110
  });
110
111
  // return only the account
111
112
  return account;
@@ -153,6 +154,7 @@ export function createInAppWallet(args: {
153
154
  ecosystem,
154
155
  walletType: walletId,
155
156
  walletAddress: account.address,
157
+ chainId: chain.id,
156
158
  });
157
159
  // return only the account
158
160
  return account;
@@ -9,7 +9,7 @@ import type { InAppWalletIframeCommunicator } from "./utils/iFrameCommunication/
9
9
  // Open to PRs from whoever sees this and knows of a cleaner way to handle things
10
10
  type ClientIdConstructorType = {
11
11
  /**
12
- * the clientId found on the dashboard settings {@link https://thirdweb.com/dashboard/settings}
12
+ * the clientId of your API Key. You can create an API key by creating a project on thirdweb dashboard.
13
13
  */
14
14
  client: ThirdwebClient;
15
15
  };
@@ -7,7 +7,10 @@ import type {
7
7
  TypedDataDefinition,
8
8
  } from "viem";
9
9
  import type { Chain } from "../../chains/types.js";
10
- import type { PreparedTransaction } from "../../transaction/prepare-transaction.js";
10
+ import type {
11
+ EIP712TransactionOptions,
12
+ PreparedTransaction,
13
+ } from "../../transaction/prepare-transaction.js";
11
14
  import type { SendTransactionResult } from "../../transaction/types.js";
12
15
  import type { WalletEmitter } from "../wallet-emitter.js";
13
16
  import type {
@@ -19,6 +22,7 @@ import type {
19
22
 
20
23
  export type SendTransactionOption = TransactionSerializable & {
21
24
  chainId: number;
25
+ eip712?: EIP712TransactionOptions;
22
26
  };
23
27
 
24
28
  type SendRawTransactionOptions = {
@@ -169,6 +169,7 @@ export function createWallet<const ID extends WalletId>(
169
169
  client: options.client,
170
170
  walletType: id,
171
171
  walletAddress: account.address,
172
+ chainId: chain.id,
172
173
  });
173
174
  // return account
174
175
  return account;
@@ -202,6 +203,7 @@ export function createWallet<const ID extends WalletId>(
202
203
  client: wcOptions.client,
203
204
  walletType: id,
204
205
  walletAddress: account.address,
206
+ chainId: chain.id,
205
207
  });
206
208
  return account;
207
209
  }