thirdweb 5.53.1-nightly-865c5e3b16af70c3660f30ba8cffc5d6e360a389-20240911000352 → 5.54.0-nightly-c3800d6c0765a9a0b69ac0a4a390d20cec932419-20240912000413

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 (300) hide show
  1. package/dist/cjs/analytics/track.js +18 -0
  2. package/dist/cjs/analytics/track.js.map +1 -1
  3. package/dist/cjs/chains/chain-definitions/polygon.js +1 -1
  4. package/dist/cjs/chains/chain-definitions/polygon.js.map +1 -1
  5. package/dist/cjs/contract/deployment/deploy-deterministic.js +19 -0
  6. package/dist/cjs/contract/deployment/deploy-deterministic.js.map +1 -1
  7. package/dist/cjs/contract/deployment/deploy-via-autofactory.js +3 -1
  8. package/dist/cjs/contract/deployment/deploy-via-autofactory.js.map +1 -1
  9. package/dist/cjs/contract/deployment/deploy-with-abi.js +50 -6
  10. package/dist/cjs/contract/deployment/deploy-with-abi.js.map +1 -1
  11. package/dist/cjs/contract/deployment/utils/bootstrap.js +22 -7
  12. package/dist/cjs/contract/deployment/utils/bootstrap.js.map +1 -1
  13. package/dist/cjs/contract/deployment/utils/clone-factory.js +1 -2
  14. package/dist/cjs/contract/deployment/utils/clone-factory.js.map +1 -1
  15. package/dist/cjs/contract/deployment/utils/infra.js +38 -2
  16. package/dist/cjs/contract/deployment/utils/infra.js.map +1 -1
  17. package/dist/cjs/contract/deployment/zksync/zkDeployContract.js +7 -1
  18. package/dist/cjs/contract/deployment/zksync/zkDeployContract.js.map +1 -1
  19. package/dist/cjs/contract/deployment/zksync/zkDeployDeterministic.js +2 -1
  20. package/dist/cjs/contract/deployment/zksync/zkDeployDeterministic.js.map +1 -1
  21. package/dist/cjs/contract/deployment/zksync/zkDeployProxy.js +5 -4
  22. package/dist/cjs/contract/deployment/zksync/zkDeployProxy.js.map +1 -1
  23. package/dist/cjs/exports/deploys.js +7 -3
  24. package/dist/cjs/exports/deploys.js.map +1 -1
  25. package/dist/cjs/exports/utils.js +3 -1
  26. package/dist/cjs/exports/utils.js.map +1 -1
  27. package/dist/cjs/extensions/erc721/write/updateTokenURI.js +3 -0
  28. package/dist/cjs/extensions/erc721/write/updateTokenURI.js.map +1 -1
  29. package/dist/cjs/extensions/marketplace/offers/write/makeOffer.js +0 -1
  30. package/dist/cjs/extensions/marketplace/offers/write/makeOffer.js.map +1 -1
  31. package/dist/cjs/extensions/modules/common/getOrDeployModule.js +2 -4
  32. package/dist/cjs/extensions/modules/common/getOrDeployModule.js.map +1 -1
  33. package/dist/cjs/extensions/modules/common/installPublishedModule.js +1 -1
  34. package/dist/cjs/extensions/modules/common/installPublishedModule.js.map +1 -1
  35. package/dist/cjs/extensions/modules/common/uninstallPublishedModule.js +1 -2
  36. package/dist/cjs/extensions/modules/common/uninstallPublishedModule.js.map +1 -1
  37. package/dist/cjs/extensions/prebuilts/deploy-erc1155.js +0 -1
  38. package/dist/cjs/extensions/prebuilts/deploy-erc1155.js.map +1 -1
  39. package/dist/cjs/extensions/prebuilts/deploy-erc20.js +0 -1
  40. package/dist/cjs/extensions/prebuilts/deploy-erc20.js.map +1 -1
  41. package/dist/cjs/extensions/prebuilts/deploy-erc721.js +0 -1
  42. package/dist/cjs/extensions/prebuilts/deploy-erc721.js.map +1 -1
  43. package/dist/cjs/extensions/prebuilts/deploy-marketplace.js +5 -7
  44. package/dist/cjs/extensions/prebuilts/deploy-marketplace.js.map +1 -1
  45. package/dist/cjs/extensions/prebuilts/deploy-modular.js +32 -27
  46. package/dist/cjs/extensions/prebuilts/deploy-modular.js.map +1 -1
  47. package/dist/cjs/extensions/prebuilts/deploy-published.js +98 -28
  48. package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
  49. package/dist/cjs/extensions/prebuilts/deploy-split.js +0 -1
  50. package/dist/cjs/extensions/prebuilts/deploy-split.js.map +1 -1
  51. package/dist/cjs/extensions/prebuilts/deploy-vote.js +0 -1
  52. package/dist/cjs/extensions/prebuilts/deploy-vote.js.map +1 -1
  53. package/dist/cjs/extensions/prebuilts/get-required-transactions.js +66 -0
  54. package/dist/cjs/extensions/prebuilts/get-required-transactions.js.map +1 -0
  55. package/dist/cjs/react/core/social/useSocialProfiles.js +2 -0
  56. package/dist/cjs/react/core/social/useSocialProfiles.js.map +1 -1
  57. package/dist/cjs/react/native/ui/components/Address.js +1 -3
  58. package/dist/cjs/react/native/ui/components/Address.js.map +1 -1
  59. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +7 -0
  60. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  61. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +20 -3
  62. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  63. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.js +7 -0
  64. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.js.map +1 -1
  65. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +7 -0
  66. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  67. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js +7 -0
  68. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js.map +1 -1
  69. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js +49 -0
  70. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js.map +1 -1
  71. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js +20 -0
  72. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  73. package/dist/cjs/social/profiles.js +2 -1
  74. package/dist/cjs/social/profiles.js.map +1 -1
  75. package/dist/cjs/utils/abi/normalizeFunctionParams.js +24 -0
  76. package/dist/cjs/utils/abi/normalizeFunctionParams.js.map +1 -0
  77. package/dist/cjs/utils/any-evm/compute-published-contract-address.js +14 -2
  78. package/dist/cjs/utils/any-evm/compute-published-contract-address.js.map +1 -1
  79. package/dist/cjs/utils/any-evm/compute-published-contract-deploy-info.js +17 -4
  80. package/dist/cjs/utils/any-evm/compute-published-contract-deploy-info.js.map +1 -1
  81. package/dist/cjs/utils/caching/lru.js +15 -14
  82. package/dist/cjs/utils/caching/lru.js.map +1 -1
  83. package/dist/cjs/version.js +1 -1
  84. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-calls.js +3 -13
  85. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +1 -1
  86. package/dist/esm/analytics/track.js +17 -0
  87. package/dist/esm/analytics/track.js.map +1 -1
  88. package/dist/esm/chains/chain-definitions/polygon.js +1 -1
  89. package/dist/esm/chains/chain-definitions/polygon.js.map +1 -1
  90. package/dist/esm/contract/deployment/deploy-deterministic.js +19 -1
  91. package/dist/esm/contract/deployment/deploy-deterministic.js.map +1 -1
  92. package/dist/esm/contract/deployment/deploy-via-autofactory.js +3 -1
  93. package/dist/esm/contract/deployment/deploy-via-autofactory.js.map +1 -1
  94. package/dist/esm/contract/deployment/deploy-with-abi.js +50 -6
  95. package/dist/esm/contract/deployment/deploy-with-abi.js.map +1 -1
  96. package/dist/esm/contract/deployment/utils/bootstrap.js +22 -8
  97. package/dist/esm/contract/deployment/utils/bootstrap.js.map +1 -1
  98. package/dist/esm/contract/deployment/utils/clone-factory.js +1 -2
  99. package/dist/esm/contract/deployment/utils/clone-factory.js.map +1 -1
  100. package/dist/esm/contract/deployment/utils/infra.js +38 -4
  101. package/dist/esm/contract/deployment/utils/infra.js.map +1 -1
  102. package/dist/esm/contract/deployment/zksync/zkDeployContract.js +7 -1
  103. package/dist/esm/contract/deployment/zksync/zkDeployContract.js.map +1 -1
  104. package/dist/esm/contract/deployment/zksync/zkDeployDeterministic.js +2 -1
  105. package/dist/esm/contract/deployment/zksync/zkDeployDeterministic.js.map +1 -1
  106. package/dist/esm/contract/deployment/zksync/zkDeployProxy.js +5 -4
  107. package/dist/esm/contract/deployment/zksync/zkDeployProxy.js.map +1 -1
  108. package/dist/esm/exports/deploys.js +3 -1
  109. package/dist/esm/exports/deploys.js.map +1 -1
  110. package/dist/esm/exports/utils.js +1 -0
  111. package/dist/esm/exports/utils.js.map +1 -1
  112. package/dist/esm/extensions/erc721/write/updateTokenURI.js +3 -0
  113. package/dist/esm/extensions/erc721/write/updateTokenURI.js.map +1 -1
  114. package/dist/esm/extensions/marketplace/offers/write/makeOffer.js +0 -1
  115. package/dist/esm/extensions/marketplace/offers/write/makeOffer.js.map +1 -1
  116. package/dist/esm/extensions/modules/common/getOrDeployModule.js +2 -4
  117. package/dist/esm/extensions/modules/common/getOrDeployModule.js.map +1 -1
  118. package/dist/esm/extensions/modules/common/installPublishedModule.js +1 -1
  119. package/dist/esm/extensions/modules/common/installPublishedModule.js.map +1 -1
  120. package/dist/esm/extensions/modules/common/uninstallPublishedModule.js +1 -2
  121. package/dist/esm/extensions/modules/common/uninstallPublishedModule.js.map +1 -1
  122. package/dist/esm/extensions/prebuilts/deploy-erc1155.js +0 -1
  123. package/dist/esm/extensions/prebuilts/deploy-erc1155.js.map +1 -1
  124. package/dist/esm/extensions/prebuilts/deploy-erc20.js +0 -1
  125. package/dist/esm/extensions/prebuilts/deploy-erc20.js.map +1 -1
  126. package/dist/esm/extensions/prebuilts/deploy-erc721.js +0 -1
  127. package/dist/esm/extensions/prebuilts/deploy-erc721.js.map +1 -1
  128. package/dist/esm/extensions/prebuilts/deploy-marketplace.js +5 -7
  129. package/dist/esm/extensions/prebuilts/deploy-marketplace.js.map +1 -1
  130. package/dist/esm/extensions/prebuilts/deploy-modular.js +33 -28
  131. package/dist/esm/extensions/prebuilts/deploy-modular.js.map +1 -1
  132. package/dist/esm/extensions/prebuilts/deploy-published.js +99 -28
  133. package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
  134. package/dist/esm/extensions/prebuilts/deploy-split.js +0 -1
  135. package/dist/esm/extensions/prebuilts/deploy-split.js.map +1 -1
  136. package/dist/esm/extensions/prebuilts/deploy-vote.js +0 -1
  137. package/dist/esm/extensions/prebuilts/deploy-vote.js.map +1 -1
  138. package/dist/esm/extensions/prebuilts/get-required-transactions.js +63 -0
  139. package/dist/esm/extensions/prebuilts/get-required-transactions.js.map +1 -0
  140. package/dist/esm/react/core/social/useSocialProfiles.js +2 -0
  141. package/dist/esm/react/core/social/useSocialProfiles.js.map +1 -1
  142. package/dist/esm/react/native/ui/components/Address.js +1 -3
  143. package/dist/esm/react/native/ui/components/Address.js.map +1 -1
  144. package/dist/esm/react/web/ui/ConnectWallet/Details.js +7 -0
  145. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  146. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +20 -3
  147. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
  148. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.js +7 -0
  149. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.js.map +1 -1
  150. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +7 -0
  151. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
  152. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js +7 -0
  153. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.js.map +1 -1
  154. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js +49 -0
  155. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.js.map +1 -1
  156. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js +20 -0
  157. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  158. package/dist/esm/social/profiles.js +2 -1
  159. package/dist/esm/social/profiles.js.map +1 -1
  160. package/dist/esm/utils/abi/normalizeFunctionParams.js +21 -0
  161. package/dist/esm/utils/abi/normalizeFunctionParams.js.map +1 -0
  162. package/dist/esm/utils/any-evm/compute-published-contract-address.js +15 -3
  163. package/dist/esm/utils/any-evm/compute-published-contract-address.js.map +1 -1
  164. package/dist/esm/utils/any-evm/compute-published-contract-deploy-info.js +16 -4
  165. package/dist/esm/utils/any-evm/compute-published-contract-deploy-info.js.map +1 -1
  166. package/dist/esm/utils/caching/lru.js +15 -14
  167. package/dist/esm/utils/caching/lru.js.map +1 -1
  168. package/dist/esm/version.js +1 -1
  169. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-calls.js +3 -13
  170. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +1 -1
  171. package/dist/types/analytics/track.d.ts +15 -0
  172. package/dist/types/analytics/track.d.ts.map +1 -1
  173. package/dist/types/contract/deployment/deploy-deterministic.d.ts +12 -1
  174. package/dist/types/contract/deployment/deploy-deterministic.d.ts.map +1 -1
  175. package/dist/types/contract/deployment/deploy-via-autofactory.d.ts.map +1 -1
  176. package/dist/types/contract/deployment/deploy-with-abi.d.ts +33 -10
  177. package/dist/types/contract/deployment/deploy-with-abi.d.ts.map +1 -1
  178. package/dist/types/contract/deployment/utils/bootstrap.d.ts +8 -3
  179. package/dist/types/contract/deployment/utils/bootstrap.d.ts.map +1 -1
  180. package/dist/types/contract/deployment/utils/clone-factory.d.ts.map +1 -1
  181. package/dist/types/contract/deployment/utils/infra.d.ts +24 -1
  182. package/dist/types/contract/deployment/utils/infra.d.ts.map +1 -1
  183. package/dist/types/contract/deployment/zksync/zkDeployContract.d.ts +2 -1
  184. package/dist/types/contract/deployment/zksync/zkDeployContract.d.ts.map +1 -1
  185. package/dist/types/contract/deployment/zksync/zkDeployDeterministic.d.ts +1 -1
  186. package/dist/types/contract/deployment/zksync/zkDeployDeterministic.d.ts.map +1 -1
  187. package/dist/types/contract/deployment/zksync/zkDeployProxy.d.ts.map +1 -1
  188. package/dist/types/exports/deploys.d.ts +3 -1
  189. package/dist/types/exports/deploys.d.ts.map +1 -1
  190. package/dist/types/exports/utils.d.ts +1 -0
  191. package/dist/types/exports/utils.d.ts.map +1 -1
  192. package/dist/types/extensions/erc721/write/updateTokenURI.d.ts +3 -0
  193. package/dist/types/extensions/erc721/write/updateTokenURI.d.ts.map +1 -1
  194. package/dist/types/extensions/marketplace/offers/write/makeOffer.d.ts.map +1 -1
  195. package/dist/types/extensions/modules/common/getOrDeployModule.d.ts +0 -2
  196. package/dist/types/extensions/modules/common/getOrDeployModule.d.ts.map +1 -1
  197. package/dist/types/extensions/modules/common/installPublishedModule.d.ts +1 -1
  198. package/dist/types/extensions/modules/common/installPublishedModule.d.ts.map +1 -1
  199. package/dist/types/extensions/modules/common/uninstallPublishedModule.d.ts +0 -1
  200. package/dist/types/extensions/modules/common/uninstallPublishedModule.d.ts.map +1 -1
  201. package/dist/types/extensions/prebuilts/deploy-erc1155.d.ts.map +1 -1
  202. package/dist/types/extensions/prebuilts/deploy-erc20.d.ts.map +1 -1
  203. package/dist/types/extensions/prebuilts/deploy-erc721.d.ts.map +1 -1
  204. package/dist/types/extensions/prebuilts/deploy-marketplace.d.ts.map +1 -1
  205. package/dist/types/extensions/prebuilts/deploy-modular.d.ts +1 -0
  206. package/dist/types/extensions/prebuilts/deploy-modular.d.ts.map +1 -1
  207. package/dist/types/extensions/prebuilts/deploy-published.d.ts +37 -6
  208. package/dist/types/extensions/prebuilts/deploy-published.d.ts.map +1 -1
  209. package/dist/types/extensions/prebuilts/deploy-split.d.ts.map +1 -1
  210. package/dist/types/extensions/prebuilts/deploy-vote.d.ts.map +1 -1
  211. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts +26 -0
  212. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts.map +1 -0
  213. package/dist/types/react/core/social/useSocialProfiles.d.ts +2 -0
  214. package/dist/types/react/core/social/useSocialProfiles.d.ts.map +1 -1
  215. package/dist/types/react/native/ui/components/Address.d.ts.map +1 -1
  216. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  217. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts.map +1 -1
  218. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.d.ts.map +1 -1
  219. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.d.ts.map +1 -1
  220. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.d.ts.map +1 -1
  221. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.d.ts.map +1 -1
  222. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts.map +1 -1
  223. package/dist/types/social/profiles.d.ts +2 -1
  224. package/dist/types/social/profiles.d.ts.map +1 -1
  225. package/dist/types/utils/abi/normalizeFunctionParams.d.ts +3 -0
  226. package/dist/types/utils/abi/normalizeFunctionParams.d.ts.map +1 -0
  227. package/dist/types/utils/any-evm/compute-published-contract-address.d.ts +2 -2
  228. package/dist/types/utils/any-evm/compute-published-contract-address.d.ts.map +1 -1
  229. package/dist/types/utils/any-evm/compute-published-contract-deploy-info.d.ts +17 -2
  230. package/dist/types/utils/any-evm/compute-published-contract-deploy-info.d.ts.map +1 -1
  231. package/dist/types/utils/caching/lru.d.ts +4 -13
  232. package/dist/types/utils/caching/lru.d.ts.map +1 -1
  233. package/dist/types/version.d.ts +1 -1
  234. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-calls.d.ts.map +1 -1
  235. package/package.json +16 -21
  236. package/src/analytics/track.ts +29 -0
  237. package/src/chains/chain-definitions/polygon.ts +1 -1
  238. package/src/contract/deployment/deploy-deterministic.test.ts +16 -5
  239. package/src/contract/deployment/deploy-deterministic.ts +35 -2
  240. package/src/contract/deployment/deploy-via-autofactory.test.ts +0 -2
  241. package/src/contract/deployment/deploy-via-autofactory.ts +3 -0
  242. package/src/contract/deployment/deploy-with-abi.ts +63 -24
  243. package/src/contract/deployment/utils/bootstrap.test.ts +3 -2
  244. package/src/contract/deployment/utils/bootstrap.ts +35 -11
  245. package/src/contract/deployment/utils/clone-factory.ts +1 -2
  246. package/src/contract/deployment/utils/infra.ts +61 -5
  247. package/src/contract/deployment/zksync/zkDeployContract.ts +13 -2
  248. package/src/contract/deployment/zksync/zkDeployDeterministic.ts +4 -3
  249. package/src/contract/deployment/zksync/zkDeployProxy.ts +5 -4
  250. package/src/exports/deploys.ts +12 -5
  251. package/src/exports/utils.ts +2 -0
  252. package/src/extensions/airdrop/write/airdropERC1155WithSignature.test.ts +4 -1
  253. package/src/extensions/airdrop/write/airdropERC20WithSignature.test.ts +4 -1
  254. package/src/extensions/airdrop/write/airdropERC721WithSignature.test.ts +4 -1
  255. package/src/extensions/airdrop/write/claimERC1155.test.ts +4 -1
  256. package/src/extensions/airdrop/write/claimERC20.test.ts +4 -1
  257. package/src/extensions/airdrop/write/claimERC721.test.ts +4 -1
  258. package/src/extensions/erc1155/write/updateTokenURI.test.ts +54 -0
  259. package/src/extensions/erc20/write/getApprovalForTransaction.test.ts +112 -0
  260. package/src/extensions/erc20/write/transferFrom.test.ts +104 -0
  261. package/src/extensions/erc4337/account/permissions.test.ts +4 -1
  262. package/src/extensions/erc721/drops/write/updateMetadata.test.ts +29 -0
  263. package/src/extensions/erc721/write/updateTokenURI.test.ts +56 -0
  264. package/src/extensions/erc721/write/updateTokenURI.ts +3 -0
  265. package/src/extensions/marketplace/offers/offers.test.ts +0 -1
  266. package/src/extensions/marketplace/offers/write/makeOffer.ts +0 -1
  267. package/src/extensions/modules/common/getOrDeployModule.ts +2 -7
  268. package/src/extensions/modules/common/installPublishedModule.ts +2 -2
  269. package/src/extensions/modules/common/uninstallPublishedModule.ts +1 -9
  270. package/src/extensions/prebuilts/deploy-erc1155.ts +0 -1
  271. package/src/extensions/prebuilts/deploy-erc20.ts +0 -1
  272. package/src/extensions/prebuilts/deploy-erc721.ts +0 -1
  273. package/src/extensions/prebuilts/deploy-marketplace.ts +6 -8
  274. package/src/extensions/prebuilts/deploy-modular-core.test.ts +63 -2
  275. package/src/extensions/prebuilts/deploy-modular.ts +50 -38
  276. package/src/extensions/prebuilts/deploy-published.test.ts +61 -4
  277. package/src/extensions/prebuilts/deploy-published.ts +161 -47
  278. package/src/extensions/prebuilts/deploy-split.ts +0 -1
  279. package/src/extensions/prebuilts/deploy-vote.ts +0 -1
  280. package/src/extensions/prebuilts/get-required-transactions.test.ts +61 -0
  281. package/src/extensions/prebuilts/get-required-transactions.ts +110 -0
  282. package/src/react/core/social/useSocialProfiles.ts +2 -0
  283. package/src/react/native/ui/components/Address.tsx +1 -3
  284. package/src/react/web/ui/ConnectWallet/Details.tsx +7 -0
  285. package/src/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.tsx +31 -3
  286. package/src/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.tsx +7 -0
  287. package/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx +7 -0
  288. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatFlow.tsx +7 -0
  289. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.tsx +53 -0
  290. package/src/react/web/ui/TransactionButton/TransactionModal.tsx +21 -0
  291. package/src/social/profiles.ts +2 -1
  292. package/src/transaction/actions/zksync/send-eip712-transaction.test.ts +13 -13
  293. package/src/utils/abi/normalizeFunctionParams.ts +29 -0
  294. package/src/utils/any-evm/compute-published-contract-address.ts +17 -8
  295. package/src/utils/any-evm/compute-published-contract-deploy-info.ts +31 -11
  296. package/src/utils/bytecode/resolveImplementation.test.ts +7 -5
  297. package/src/utils/caching/lru.test.ts +38 -0
  298. package/src/utils/caching/lru.ts +18 -14
  299. package/src/version.ts +1 -1
  300. package/src/wallets/in-app/core/eip5972/in-app-wallet-calls.ts +3 -14
@@ -1,16 +1,22 @@
1
- import type { AbiConstructor, AbiFunction } from "abitype";
1
+ import type { AbiFunction } from "abitype";
2
2
  import type { Chain } from "../../chains/types.js";
3
3
  import type { ThirdwebClient } from "../../client/client.js";
4
- import { getContract } from "../../contract/contract.js";
4
+ import { type ThirdwebContract, getContract } from "../../contract/contract.js";
5
5
  import { fetchPublishedContractMetadata } from "../../contract/deployment/publisher.js";
6
+ import { getOrDeployInfraContractFromMetadata } from "../../contract/deployment/utils/bootstrap.js";
7
+ import {} from "../../contract/deployment/utils/infra.js";
6
8
  import { zkDeployContract } from "../../contract/deployment/zksync/zkDeployContract.js";
7
9
  import { sendAndConfirmTransaction } from "../../transaction/actions/send-and-confirm-transaction.js";
8
10
  import { simulateTransaction } from "../../transaction/actions/simulate.js";
9
11
  import { prepareContractCall } from "../../transaction/prepare-contract-call.js";
10
12
  import { resolveMethod } from "../../transaction/resolve-method.js";
13
+ import { encodeAbiParameters } from "../../utils/abi/encodeAbiParameters.js";
14
+ import { normalizeFunctionParams } from "../../utils/abi/normalizeFunctionParams.js";
15
+ import { getAddress } from "../../utils/address.js";
11
16
  import type { CompilerMetadata } from "../../utils/any-evm/deploy-metadata.js";
12
17
  import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
13
18
  import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
19
+ import type { Hex } from "../../utils/encoding/hex.js";
14
20
  import type { Account } from "../../wallets/interfaces/wallet.js";
15
21
 
16
22
  /**
@@ -21,10 +27,11 @@ export type DeployPublishedContractOptions = {
21
27
  chain: Chain;
22
28
  account: Account;
23
29
  contractId: string;
24
- contractParams: unknown[];
30
+ contractParams?: Record<string, unknown>;
25
31
  publisher?: string;
26
32
  version?: string;
27
- implementationConstructorParams?: unknown[];
33
+ implementationConstructorParams?: Record<string, unknown>;
34
+ salt?: string;
28
35
  };
29
36
 
30
37
  /**
@@ -32,6 +39,27 @@ export type DeployPublishedContractOptions = {
32
39
  * @param options - the deploy options
33
40
  * @returns a promise that resolves to the deployed contract address
34
41
  * @example
42
+ *
43
+ * ## Deploying a published contract
44
+ *
45
+ * ```ts
46
+ * import { deployPublishedContract } from "thirdweb/deploys";
47
+ *
48
+ * const address = await deployedPublishedContract({
49
+ * client,
50
+ * chain,
51
+ * account,
52
+ * contractId: "MyPublishedContract",
53
+ * contractParams: {
54
+ * param1: "value1",
55
+ * param2: 123,
56
+ * },
57
+ * publisher: "0x...", // optional, defaults to the thirdweb deployer
58
+ * });
59
+ * ```
60
+ *
61
+ * ## Deploying a published contract deterministically
62
+ *
35
63
  * ```ts
36
64
  * import { deployPublishedContract } from "thirdweb/deploys";
37
65
  *
@@ -40,8 +68,12 @@ export type DeployPublishedContractOptions = {
40
68
  * chain,
41
69
  * account,
42
70
  * contractId: "MyPublishedContract",
43
- * contractParams: [...],
71
+ * contractParams: {
72
+ * param1: "value1",
73
+ * param2: 123,
74
+ * },
44
75
  * publisher: "0x...",
76
+ * salt: "your-salt", // this will deterministically deploy the contract at the same address on all chains
45
77
  * });
46
78
  * ```
47
79
  * @extension DEPLOY
@@ -58,6 +90,7 @@ export async function deployPublishedContract(
58
90
  publisher,
59
91
  version,
60
92
  implementationConstructorParams,
93
+ salt,
61
94
  } = options;
62
95
  const deployMetadata = await fetchPublishedContractMetadata({
63
96
  client,
@@ -71,8 +104,9 @@ export async function deployPublishedContract(
71
104
  chain,
72
105
  deployMetadata,
73
106
  client,
74
- contractParams,
107
+ initializeParams: contractParams,
75
108
  implementationConstructorParams,
109
+ salt,
76
110
  });
77
111
  }
78
112
 
@@ -84,8 +118,13 @@ export type DeployContractfromDeployMetadataOptions = {
84
118
  chain: Chain;
85
119
  account: Account;
86
120
  deployMetadata: FetchDeployMetadataResult;
87
- contractParams: unknown[];
88
- implementationConstructorParams?: unknown[];
121
+ initializeParams?: Record<string, unknown>;
122
+ implementationConstructorParams?: Record<string, unknown>;
123
+ modules?: {
124
+ deployMetadata: FetchDeployMetadataResult;
125
+ initializeParams?: Record<string, unknown>;
126
+ }[];
127
+ salt?: string;
89
128
  };
90
129
 
91
130
  /**
@@ -93,14 +132,16 @@ export type DeployContractfromDeployMetadataOptions = {
93
132
  */
94
133
  export async function deployContractfromDeployMetadata(
95
134
  options: DeployContractfromDeployMetadataOptions,
96
- ) {
135
+ ): Promise<string> {
97
136
  const {
98
137
  client,
99
138
  account,
100
139
  chain,
101
- contractParams,
140
+ initializeParams,
102
141
  deployMetadata,
103
142
  implementationConstructorParams,
143
+ modules,
144
+ salt,
104
145
  } = options;
105
146
  switch (deployMetadata?.deployType) {
106
147
  case "standard": {
@@ -109,7 +150,8 @@ export async function deployContractfromDeployMetadata(
109
150
  client,
110
151
  chain,
111
152
  compilerMetadata: deployMetadata,
112
- contractParams,
153
+ contractParams: initializeParams,
154
+ salt,
113
155
  });
114
156
  }
115
157
  case "autoFactory": {
@@ -126,32 +168,18 @@ export async function deployContractfromDeployMetadata(
126
168
  client,
127
169
  account,
128
170
  contractId: deployMetadata.name,
129
- constructorParams: implementationConstructorParams || [],
171
+ constructorParams: implementationConstructorParams,
130
172
  publisher: deployMetadata.publisher,
131
173
  });
132
- const initializeFunction = deployMetadata.abi.find(
133
- (i) =>
134
- i.type === "function" &&
135
- i.name ===
136
- (deployMetadata.factoryDeploymentData
137
- ?.implementationInitializerFunction || "initialize"),
138
- ) as AbiFunction;
139
- if (!initializeFunction) {
140
- throw new Error(
141
- `Could not find initialize function for ${deployMetadata.name}`,
142
- );
143
- }
144
- const initializeTransaction = prepareContractCall({
145
- contract: getContract({
146
- client,
147
- chain,
148
- address: implementationContract.address,
149
- }),
150
- method: resolveMethod(
151
- deployMetadata.factoryDeploymentData
152
- ?.implementationInitializerFunction || "initialize",
153
- ),
154
- params: contractParams,
174
+
175
+ const initializeTransaction = await getInitializeTransaction({
176
+ client,
177
+ chain,
178
+ deployMetadata: deployMetadata,
179
+ implementationContract,
180
+ initializeParams,
181
+ account,
182
+ modules,
155
183
  });
156
184
 
157
185
  return deployViaAutoFactory({
@@ -160,6 +188,7 @@ export async function deployContractfromDeployMetadata(
160
188
  account,
161
189
  cloneFactoryContract,
162
190
  initializeTransaction,
191
+ salt,
163
192
  });
164
193
  }
165
194
  case "customFactory": {
@@ -181,20 +210,21 @@ export async function deployContractfromDeployMetadata(
181
210
  chain,
182
211
  address: factoryAddress,
183
212
  });
213
+ const method = await resolveMethod(factoryFunction)(factory);
184
214
  const deployTx = prepareContractCall({
185
215
  contract: factory,
186
- method: resolveMethod(factoryFunction),
187
- params: contractParams,
216
+ method,
217
+ params: normalizeFunctionParams(method, initializeParams),
188
218
  });
189
219
  // asumption here is that the factory address returns the deployed proxy address
190
- const address = simulateTransaction({
220
+ const address = await simulateTransaction({
191
221
  transaction: deployTx,
192
222
  });
193
223
  await sendAndConfirmTransaction({
194
224
  transaction: deployTx,
195
225
  account,
196
226
  });
197
- return address;
227
+ return address as string;
198
228
  }
199
229
  case undefined: {
200
230
  // Default to standard deployment if none was specified
@@ -203,7 +233,8 @@ export async function deployContractfromDeployMetadata(
203
233
  client,
204
234
  chain,
205
235
  compilerMetadata: deployMetadata,
206
- contractParams,
236
+ contractParams: initializeParams,
237
+ salt,
207
238
  });
208
239
  }
209
240
  default:
@@ -217,9 +248,11 @@ async function directDeploy(options: {
217
248
  client: ThirdwebClient;
218
249
  chain: Chain;
219
250
  compilerMetadata: CompilerMetadata;
220
- contractParams: unknown[];
221
- }) {
222
- const { account, client, chain, compilerMetadata, contractParams } = options;
251
+ contractParams?: Record<string, unknown>;
252
+ salt?: string;
253
+ }): Promise<string> {
254
+ const { account, client, chain, compilerMetadata, contractParams, salt } =
255
+ options;
223
256
 
224
257
  if (isZkSyncChain(chain)) {
225
258
  return zkDeployContract({
@@ -229,6 +262,7 @@ async function directDeploy(options: {
229
262
  bytecode: compilerMetadata.bytecode,
230
263
  abi: compilerMetadata.abi,
231
264
  params: contractParams,
265
+ salt,
232
266
  });
233
267
  }
234
268
 
@@ -240,10 +274,90 @@ async function directDeploy(options: {
240
274
  client,
241
275
  chain,
242
276
  bytecode: compilerMetadata.bytecode,
243
- constructorAbi:
244
- (compilerMetadata.abi.find(
245
- (i) => i.type === "constructor",
246
- ) as AbiConstructor) || [],
277
+ abi: compilerMetadata.abi,
247
278
  constructorParams: contractParams,
279
+ salt,
280
+ });
281
+ }
282
+
283
+ async function getInitializeTransaction(options: {
284
+ client: ThirdwebClient;
285
+ chain: Chain;
286
+ account: Account;
287
+ implementationContract: ThirdwebContract;
288
+ deployMetadata: FetchDeployMetadataResult;
289
+ initializeParams?: Record<string, unknown>;
290
+ modules?: {
291
+ deployMetadata: FetchDeployMetadataResult;
292
+ initializeParams?: Record<string, unknown>;
293
+ }[];
294
+ }) {
295
+ const {
296
+ account,
297
+ client,
298
+ chain,
299
+ deployMetadata: metadata,
300
+ initializeParams = {},
301
+ implementationContract,
302
+ modules = [],
303
+ } = options;
304
+
305
+ const initializeFunction = metadata.abi.find(
306
+ (i) =>
307
+ i.type === "function" &&
308
+ i.name ===
309
+ (metadata.factoryDeploymentData?.implementationInitializerFunction ||
310
+ "initialize"),
311
+ ) as AbiFunction;
312
+ if (!initializeFunction) {
313
+ throw new Error(`Could not find initialize function for ${metadata.name}`);
314
+ }
315
+
316
+ const hasModules =
317
+ initializeFunction.inputs.find(
318
+ (i) => i.name === "modules" || i.name === "_modules",
319
+ ) &&
320
+ initializeFunction.inputs.find(
321
+ (i) => i.name === "moduleInstallData" || i.name === "_moduleInstallData",
322
+ );
323
+ if (hasModules) {
324
+ const moduleAddresses: Hex[] = [];
325
+ const moduleInstallData: Hex[] = [];
326
+ for (const module of modules) {
327
+ // deploy the module if not already deployed
328
+ const contract = await getOrDeployInfraContractFromMetadata({
329
+ client,
330
+ chain,
331
+ account,
332
+ contractMetadata: module.deployMetadata,
333
+ });
334
+
335
+ const installFunction = module.deployMetadata.abi.find(
336
+ (i) => i.type === "function" && i.name === "encodeBytesOnInstall",
337
+ ) as AbiFunction | undefined;
338
+
339
+ moduleAddresses.push(getAddress(contract.address));
340
+ moduleInstallData.push(
341
+ installFunction
342
+ ? encodeAbiParameters(
343
+ installFunction.inputs,
344
+ normalizeFunctionParams(installFunction, module.initializeParams),
345
+ )
346
+ : "0x",
347
+ );
348
+ }
349
+ initializeParams.modules = moduleAddresses;
350
+ initializeParams.moduleInstallData = moduleInstallData;
351
+ }
352
+
353
+ const initializeTransaction = prepareContractCall({
354
+ contract: getContract({
355
+ client,
356
+ chain,
357
+ address: implementationContract.address,
358
+ }),
359
+ method: initializeFunction,
360
+ params: normalizeFunctionParams(initializeFunction, initializeParams),
248
361
  });
362
+ return initializeTransaction;
249
363
  }
@@ -83,7 +83,6 @@ export async function deploySplitContract(options: DeploySplitContractOptions) {
83
83
  client,
84
84
  account,
85
85
  contractId: "Split",
86
- constructorParams: [],
87
86
  });
88
87
  const initializeTransaction = await getInitializeTransaction({
89
88
  client,
@@ -97,7 +97,6 @@ export async function deployVoteContract(options: DeployVoteContractOptions) {
97
97
  client,
98
98
  account,
99
99
  contractId: "VoteERC20",
100
- constructorParams: [],
101
100
  });
102
101
  const initializeTransaction = await getInitializeTransaction({
103
102
  client,
@@ -0,0 +1,61 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { CLEAN_ANVIL_CHAIN } from "../../../test/src/chains.js";
3
+ import { TEST_CLIENT } from "../../../test/src/test-clients.js";
4
+ import { fetchPublishedContractMetadata } from "../../contract/deployment/publisher.js";
5
+ import { getRequiredTransactionCount } from "./get-required-transactions.js";
6
+
7
+ describe.runIf(process.env.TW_SECRET_KEY)(
8
+ "getRequiredTransactions",
9
+ {
10
+ timeout: 120000,
11
+ },
12
+ () => {
13
+ it("should count transactions for a published direct deploy contract", async () => {
14
+ const metadata = await fetchPublishedContractMetadata({
15
+ client: TEST_CLIENT,
16
+ contractId: "AccountFactory",
17
+ });
18
+ const results = await getRequiredTransactionCount({
19
+ client: TEST_CLIENT,
20
+ chain: CLEAN_ANVIL_CHAIN,
21
+ metadata,
22
+ });
23
+ expect(results.length).toBe(1);
24
+ });
25
+
26
+ it("should count transactions for a published autofactory contract", async () => {
27
+ const metadata = await fetchPublishedContractMetadata({
28
+ client: TEST_CLIENT,
29
+ contractId: "Airdrop",
30
+ });
31
+ const results = await getRequiredTransactionCount({
32
+ client: TEST_CLIENT,
33
+ chain: CLEAN_ANVIL_CHAIN,
34
+ metadata,
35
+ });
36
+ expect(results.length).toBe(4);
37
+ });
38
+
39
+ it("should count transactions for a modular contract with modules", async () => {
40
+ const metadata = await fetchPublishedContractMetadata({
41
+ client: TEST_CLIENT,
42
+ contractId: "ERC721CoreInitializable",
43
+ });
44
+ const results = await getRequiredTransactionCount({
45
+ client: TEST_CLIENT,
46
+ chain: CLEAN_ANVIL_CHAIN,
47
+ metadata,
48
+ modules: await Promise.all(
49
+ ["ClaimableERC721", "BatchMetadataERC721", "RoyaltyERC721"].map(
50
+ (contractId) =>
51
+ fetchPublishedContractMetadata({
52
+ client: TEST_CLIENT,
53
+ contractId,
54
+ }),
55
+ ),
56
+ ),
57
+ });
58
+ expect(results.length).toBe(7);
59
+ });
60
+ },
61
+ );
@@ -0,0 +1,110 @@
1
+ import type { Chain } from "../../chains/types.js";
2
+ import type { ThirdwebClient } from "../../client/client.js";
3
+ import { getDeployedCreate2Factory } from "../../contract/deployment/utils/create-2-factory.js";
4
+ import { getDeployedInfraContract } from "../../contract/deployment/utils/infra.js";
5
+ import { getDeployedInfraContractFromMetadata } from "../../contract/deployment/utils/infra.js";
6
+ import { computePublishedContractAddress } from "../../utils/any-evm/compute-published-contract-address.js";
7
+ import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
8
+
9
+ /**
10
+ * @internal
11
+ */
12
+ export type DeployTransactionType =
13
+ | "infra"
14
+ | "implementation"
15
+ | "module"
16
+ | "proxy";
17
+
18
+ /**
19
+ * @internal
20
+ */
21
+ export type DeployTransactionResult = {
22
+ type: DeployTransactionType;
23
+ contractId: string;
24
+ };
25
+
26
+ /**
27
+ * @internal
28
+ */
29
+ export async function getRequiredTransactionCount(options: {
30
+ chain: Chain;
31
+ client: ThirdwebClient;
32
+ metadata: FetchDeployMetadataResult;
33
+ constructorParams?: Record<string, unknown>;
34
+ implementationConstructorParams?: Record<string, unknown>;
35
+ modules?: FetchDeployMetadataResult[];
36
+ }): Promise<DeployTransactionResult[]> {
37
+ const {
38
+ chain,
39
+ client,
40
+ metadata,
41
+ implementationConstructorParams,
42
+ modules = [],
43
+ } = options;
44
+
45
+ if (metadata?.deployType === "autoFactory") {
46
+ const results: (DeployTransactionResult | null)[] = await Promise.all([
47
+ getDeployedCreate2Factory({
48
+ chain,
49
+ client,
50
+ }).then((c) =>
51
+ c ? null : ({ type: "infra", contractId: "Create2Factory" } as const),
52
+ ),
53
+ getDeployedInfraContract({
54
+ chain,
55
+ client,
56
+ contractId: "Forwarder",
57
+ }).then((c) =>
58
+ c ? null : ({ type: "infra", contractId: "Forwarder" } as const),
59
+ ),
60
+ getDeployedInfraContract({
61
+ chain,
62
+ client,
63
+ contractId: "TWCloneFactory",
64
+ constructorParams: {
65
+ _trustedForwarder: await computePublishedContractAddress({
66
+ chain,
67
+ client,
68
+ contractId: "Forwarder",
69
+ }),
70
+ },
71
+ }).then((c) =>
72
+ c ? null : ({ type: "infra", contractId: "TWCloneFactory" } as const),
73
+ ),
74
+ // TODO (deploy): add WETH contract check for implementations that need it (check implementation constructor params)
75
+ getDeployedInfraContract({
76
+ chain,
77
+ client,
78
+ contractId: metadata.name,
79
+ constructorParams: implementationConstructorParams,
80
+ publisher: metadata.publisher,
81
+ version: metadata.version,
82
+ }).then((c) =>
83
+ c
84
+ ? null
85
+ : ({
86
+ type: "implementation",
87
+ contractId: metadata.name,
88
+ } as const),
89
+ ),
90
+ ...modules.map((m) =>
91
+ getDeployedInfraContractFromMetadata({
92
+ chain,
93
+ client,
94
+ contractMetadata: m,
95
+ }).then((c) =>
96
+ c
97
+ ? null
98
+ : ({
99
+ type: "module",
100
+ contractId: m.name,
101
+ } as const),
102
+ ),
103
+ ),
104
+ ]);
105
+ results.push({ type: "proxy", contractId: metadata.name });
106
+ return results.filter((r) => r !== null);
107
+ }
108
+
109
+ return [{ type: "implementation", contractId: metadata.name }];
110
+ }
@@ -17,6 +17,8 @@ import { getSocialProfiles } from "../../../social/profiles.js";
17
17
  * address: "0x...",
18
18
  * });
19
19
  * ```
20
+ *
21
+ * @social
20
22
  * @beta
21
23
  */
22
24
  export function useSocialProfiles(options: {
@@ -1,6 +1,5 @@
1
- import Clipboard from "@react-native-clipboard/clipboard";
2
1
  import { useState } from "react";
3
- import { StyleSheet, TouchableOpacity } from "react-native";
2
+ import { Clipboard, StyleSheet, TouchableOpacity } from "react-native";
4
3
  import type { Account } from "../../../../wallets/interfaces/wallet.js";
5
4
  import type { Theme } from "../../../core/design-system/index.js";
6
5
  import { spacing } from "../../design-system/index.js";
@@ -20,7 +19,6 @@ export const Address = ({ account, theme, addressOrENS }: AddressProps) => {
20
19
  <TouchableOpacity
21
20
  style={styles.addressContainer}
22
21
  onPress={() => {
23
- // @ts-ignore - missing native types
24
22
  Clipboard.setString(account.address);
25
23
  setCopySuccess(true);
26
24
  setTimeout(() => {
@@ -10,6 +10,7 @@ import {
10
10
  } from "@radix-ui/react-icons";
11
11
  import { useQuery } from "@tanstack/react-query";
12
12
  import { useContext, useEffect, useState } from "react";
13
+ import { trackPayEvent } from "../../../../analytics/track.js";
13
14
  import type { Chain } from "../../../../chains/types.js";
14
15
  import type { ThirdwebClient } from "../../../../client/client.js";
15
16
  import { getContract } from "../../../../contract/contract.js";
@@ -568,6 +569,12 @@ function DetailsModal(props: {
568
569
  flex: 1,
569
570
  }}
570
571
  onClick={() => {
572
+ trackPayEvent({
573
+ event: "details_modal_buy_click",
574
+ client: client,
575
+ walletAddress: activeAccount?.address,
576
+ walletType: activeWallet?.id,
577
+ });
571
578
  setScreen("buy");
572
579
  }}
573
580
  >
@@ -1,5 +1,6 @@
1
1
  import { IdCardIcon } from "@radix-ui/react-icons";
2
2
  import { useCallback, useMemo, useState } from "react";
3
+ import { trackPayEvent } from "../../../../../../analytics/track.js";
3
4
  import type { Chain } from "../../../../../../chains/types.js";
4
5
  import type { ThirdwebClient } from "../../../../../../client/client.js";
5
6
  import { NATIVE_TOKEN_ADDRESS } from "../../../../../../constants/addresses.js";
@@ -528,7 +529,13 @@ function BuyScreenContent(props: BuyScreenContentProps) {
528
529
  }}
529
530
  >
530
531
  {screen.id === "select-payment-method" && (
531
- <PaymentMethodSelection setScreen={(id) => setScreen({ id })} />
532
+ <PaymentMethodSelection
533
+ mode={payOptions.mode}
534
+ client={client}
535
+ walletAddress={payer.account.address}
536
+ walletType={payer.wallet.id}
537
+ setScreen={(id) => setScreen({ id })}
538
+ />
532
539
  )}
533
540
 
534
541
  {screen.id === "select-wallet" && (
@@ -891,7 +898,11 @@ function TokenSelectedLayout(props: {
891
898
  }
892
899
 
893
900
  function PaymentMethodSelection(props: {
901
+ client: ThirdwebClient;
902
+ walletAddress: string;
903
+ walletType: string;
894
904
  setScreen: (screenId: "select-wallet" | "buy-with-fiat") => void;
905
+ mode?: "transaction" | "direct_payment" | "fund_wallet";
895
906
  }) {
896
907
  return (
897
908
  <Container animate="fadein">
@@ -900,7 +911,15 @@ function PaymentMethodSelection(props: {
900
911
  <Button
901
912
  variant="outline"
902
913
  bg="tertiaryBg"
903
- onClick={() => props.setScreen("buy-with-fiat")}
914
+ onClick={() => {
915
+ trackPayEvent({
916
+ event: `pay_with_credit_card_${props.mode || "unknown"}_mode`,
917
+ client: props.client,
918
+ walletAddress: props.walletAddress,
919
+ walletType: props.walletType,
920
+ });
921
+ props.setScreen("buy-with-fiat");
922
+ }}
904
923
  gap="sm"
905
924
  style={{
906
925
  justifyContent: "flex-start",
@@ -928,7 +947,16 @@ function PaymentMethodSelection(props: {
928
947
  <Button
929
948
  variant="outline"
930
949
  bg="tertiaryBg"
931
- onClick={() => props.setScreen("select-wallet")}
950
+ onClick={() => {
951
+ trackPayEvent({
952
+ event: `pay_with_crypto_${props.mode || "unknown"}_mode`,
953
+ client: props.client,
954
+ walletAddress: props.walletAddress,
955
+ walletType: props.walletType,
956
+ });
957
+
958
+ props.setScreen("select-wallet");
959
+ }}
932
960
  style={{
933
961
  justifyContent: "flex-start",
934
962
  }}
@@ -1,4 +1,5 @@
1
1
  import { useQuery } from "@tanstack/react-query";
2
+ import { trackPayEvent } from "../../../../../../analytics/track.js";
2
3
  import type { Chain } from "../../../../../../chains/types.js";
3
4
  import type { ThirdwebClient } from "../../../../../../client/client.js";
4
5
  import { NATIVE_TOKEN_ADDRESS } from "../../../../../../constants/addresses.js";
@@ -242,6 +243,12 @@ export function DirectPaymentModeScreen(props: {
242
243
  variant="accent"
243
244
  fullWidth
244
245
  onClick={() => {
246
+ trackPayEvent({
247
+ event: "choose_payment_method_direct_payment_mode",
248
+ client,
249
+ walletAddress: payerAccount.address,
250
+ walletType: activeWallet?.id,
251
+ });
245
252
  onContinue(totalCost, paymentInfo.chain, token);
246
253
  }}
247
254
  >
@@ -1,3 +1,4 @@
1
+ import { trackPayEvent } from "../../../../../../analytics/track.js";
1
2
  import type { Chain } from "../../../../../../chains/types.js";
2
3
  import type { ThirdwebClient } from "../../../../../../client/client.js";
3
4
  import { NATIVE_TOKEN_ADDRESS } from "../../../../../../constants/addresses.js";
@@ -225,6 +226,12 @@ export function TransactionModeScreen(props: {
225
226
  ) {
226
227
  totalCostWei += transactionCostAndData.gasCostWei;
227
228
  }
229
+ trackPayEvent({
230
+ event: "choose_payment_method_transaction_mode",
231
+ client,
232
+ walletAddress: payerAccount.address,
233
+ walletType: activeWallet?.id,
234
+ });
228
235
  onContinue(
229
236
  toTokens(totalCostWei, transactionCostAndData.decimals),
230
237
  payUiOptions.transaction.chain,