thirdweb 5.93.4 → 5.93.5-nightly-e0e31826a8ed11041372f66b3b75fda293a2a05d-20250326035818

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 (87) hide show
  1. package/dist/cjs/contract/deployment/utils/bootstrap.js +4 -1
  2. package/dist/cjs/contract/deployment/utils/bootstrap.js.map +1 -1
  3. package/dist/cjs/exports/extensions/dynamic-contracts.js +11 -0
  4. package/dist/cjs/exports/extensions/dynamic-contracts.js.map +1 -0
  5. package/dist/cjs/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.js +151 -0
  6. package/dist/cjs/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.js.map +1 -0
  7. package/dist/cjs/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.js +117 -0
  8. package/dist/cjs/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.js.map +1 -0
  9. package/dist/cjs/extensions/dynamic-contracts/write/installPublishedExtension.js +60 -0
  10. package/dist/cjs/extensions/dynamic-contracts/write/installPublishedExtension.js.map +1 -0
  11. package/dist/cjs/extensions/dynamic-contracts/write/uninstallExtension.js +29 -0
  12. package/dist/cjs/extensions/dynamic-contracts/write/uninstallExtension.js.map +1 -0
  13. package/dist/cjs/extensions/prebuilts/deploy-marketplace.js +56 -60
  14. package/dist/cjs/extensions/prebuilts/deploy-marketplace.js.map +1 -1
  15. package/dist/cjs/extensions/prebuilts/deploy-published.js +19 -0
  16. package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
  17. package/dist/cjs/extensions/prebuilts/get-required-transactions.js +90 -0
  18. package/dist/cjs/extensions/prebuilts/get-required-transactions.js.map +1 -1
  19. package/dist/cjs/extensions/thirdweb/write/publish.js +1 -1
  20. package/dist/cjs/react/web/ui/PayEmbed.js +1 -0
  21. package/dist/cjs/react/web/ui/PayEmbed.js.map +1 -1
  22. package/dist/cjs/version.js +1 -1
  23. package/dist/cjs/version.js.map +1 -1
  24. package/dist/esm/contract/deployment/utils/bootstrap.js +4 -1
  25. package/dist/esm/contract/deployment/utils/bootstrap.js.map +1 -1
  26. package/dist/esm/exports/extensions/dynamic-contracts.js +6 -0
  27. package/dist/esm/exports/extensions/dynamic-contracts.js.map +1 -0
  28. package/dist/esm/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.js +144 -0
  29. package/dist/esm/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.js.map +1 -0
  30. package/dist/esm/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.js +110 -0
  31. package/dist/esm/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.js.map +1 -0
  32. package/dist/esm/extensions/dynamic-contracts/write/installPublishedExtension.js +57 -0
  33. package/dist/esm/extensions/dynamic-contracts/write/installPublishedExtension.js.map +1 -0
  34. package/dist/esm/extensions/dynamic-contracts/write/uninstallExtension.js +26 -0
  35. package/dist/esm/extensions/dynamic-contracts/write/uninstallExtension.js.map +1 -0
  36. package/dist/esm/extensions/prebuilts/deploy-marketplace.js +56 -60
  37. package/dist/esm/extensions/prebuilts/deploy-marketplace.js.map +1 -1
  38. package/dist/esm/extensions/prebuilts/deploy-published.js +19 -0
  39. package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
  40. package/dist/esm/extensions/prebuilts/get-required-transactions.js +89 -0
  41. package/dist/esm/extensions/prebuilts/get-required-transactions.js.map +1 -1
  42. package/dist/esm/extensions/thirdweb/write/publish.js +1 -1
  43. package/dist/esm/react/web/ui/PayEmbed.js +1 -0
  44. package/dist/esm/react/web/ui/PayEmbed.js.map +1 -1
  45. package/dist/esm/version.js +1 -1
  46. package/dist/esm/version.js.map +1 -1
  47. package/dist/types/contract/deployment/utils/bootstrap.d.ts.map +1 -1
  48. package/dist/types/exports/extensions/dynamic-contracts.d.ts +6 -0
  49. package/dist/types/exports/extensions/dynamic-contracts.d.ts.map +1 -0
  50. package/dist/types/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.d.ts +113 -0
  51. package/dist/types/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.d.ts.map +1 -0
  52. package/dist/types/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.d.ts +79 -0
  53. package/dist/types/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.d.ts.map +1 -0
  54. package/dist/types/extensions/dynamic-contracts/write/installPublishedExtension.d.ts +30 -0
  55. package/dist/types/extensions/dynamic-contracts/write/installPublishedExtension.d.ts.map +1 -0
  56. package/dist/types/extensions/dynamic-contracts/write/uninstallExtension.d.ts +26 -0
  57. package/dist/types/extensions/dynamic-contracts/write/uninstallExtension.d.ts.map +1 -0
  58. package/dist/types/extensions/prebuilts/deploy-marketplace.d.ts.map +1 -1
  59. package/dist/types/extensions/prebuilts/deploy-published.d.ts.map +1 -1
  60. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts +26 -0
  61. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts.map +1 -1
  62. package/dist/types/extensions/thirdweb/write/publish.d.ts +1 -1
  63. package/dist/types/react/web/ui/PayEmbed.d.ts +1 -0
  64. package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
  65. package/dist/types/version.d.ts +1 -1
  66. package/dist/types/version.d.ts.map +1 -1
  67. package/package.json +7 -7
  68. package/src/bridge/Buy.test.ts +1 -1
  69. package/src/bridge/Routes.test.ts +1 -1
  70. package/src/bridge/Sell.test.ts +1 -1
  71. package/src/bridge/Status.test.ts +1 -1
  72. package/src/contract/deployment/deploy-dynamic.test.ts +52 -0
  73. package/src/contract/deployment/utils/bootstrap.ts +5 -1
  74. package/src/exports/extensions/dynamic-contracts.ts +11 -0
  75. package/src/extensions/dynamic-contracts/__generated__/IExtensionManager/write/addExtension.ts +193 -0
  76. package/src/extensions/dynamic-contracts/__generated__/IExtensionManager/write/removeExtension.ts +140 -0
  77. package/src/extensions/dynamic-contracts/write/installPublishedExtension.test.ts +61 -0
  78. package/src/extensions/dynamic-contracts/write/installPublishedExtension.ts +85 -0
  79. package/src/extensions/dynamic-contracts/write/uninstallExtension.test.ts +64 -0
  80. package/src/extensions/dynamic-contracts/write/uninstallExtension.ts +35 -0
  81. package/src/extensions/prebuilts/deploy-marketplace.ts +78 -81
  82. package/src/extensions/prebuilts/deploy-published.ts +24 -0
  83. package/src/extensions/prebuilts/get-required-transactions.test.ts +14 -0
  84. package/src/extensions/prebuilts/get-required-transactions.ts +138 -0
  85. package/src/extensions/thirdweb/write/publish.ts +1 -1
  86. package/src/react/web/ui/PayEmbed.tsx +1 -0
  87. package/src/version.ts +1 -1
@@ -1,5 +1,8 @@
1
+ import type { Abi, AbiFunction } from "abitype";
2
+ import { toFunctionSelector, toFunctionSignature } from "viem";
1
3
  import type { Chain } from "../../chains/types.js";
2
4
  import type { ThirdwebClient } from "../../client/client.js";
5
+ import { resolveContractAbi } from "../../contract/actions/resolve-abi.js";
3
6
  import { getDeployedCreate2Factory } from "../../contract/deployment/utils/create-2-factory.js";
4
7
  import { getDeployedInfraContract } from "../../contract/deployment/utils/infra.js";
5
8
  import { getDeployedInfraContractFromMetadata } from "../../contract/deployment/utils/infra.js";
@@ -19,6 +22,15 @@ type DeployTransactionType =
19
22
  | "extension"
20
23
  | "proxy";
21
24
 
25
+ /**
26
+ * @internal
27
+ */
28
+ type DynamicContractExtension = {
29
+ extensionName: string;
30
+ extensionVersion: string;
31
+ publisherAddress: string;
32
+ };
33
+
22
34
  /**
23
35
  * @internal
24
36
  */
@@ -131,6 +143,10 @@ async function getTransactionsForImplementation(options: {
131
143
  return getTransactionsForMaketplaceV3(options);
132
144
  }
133
145
 
146
+ if (deployMetadata.routerType === "dynamic") {
147
+ return getTransactionsForDynamicContract(options);
148
+ }
149
+
134
150
  const constructorParams =
135
151
  implementationConstructorParams ??
136
152
  (await getAllDefaultConstructorParamsForImplementation({
@@ -211,6 +227,54 @@ async function getTransactionsForMaketplaceV3(options: {
211
227
  return transactions;
212
228
  }
213
229
 
230
+ async function getTransactionsForDynamicContract(options: {
231
+ chain: Chain;
232
+ client: ThirdwebClient;
233
+ deployMetadata: FetchDeployMetadataResult;
234
+ }): Promise<DeployTransactionResult[]> {
235
+ const { chain, client } = options;
236
+ const WETHAdress = await computePublishedContractAddress({
237
+ chain,
238
+ client,
239
+ contractId: "WETH9",
240
+ });
241
+ const wethTx = await getDeployedInfraContract({
242
+ chain,
243
+ client,
244
+ contractId: "WETH9",
245
+ }).then((c) =>
246
+ c ? null : ({ type: "infra", contractId: "WETH9" } as const),
247
+ );
248
+ const extensions: (DeployTransactionResult | null)[] = options.deployMetadata
249
+ .defaultExtensions
250
+ ? await Promise.all(
251
+ options.deployMetadata.defaultExtensions.map((e) => {
252
+ return getDeployedInfraContract({
253
+ chain,
254
+ client,
255
+ contractId: e.extensionName,
256
+ publisher: e.publisherAddress,
257
+ version: e.extensionVersion || "latest",
258
+ constructorParams: { _nativeTokenWrapper: WETHAdress },
259
+ }).then((c) =>
260
+ c
261
+ ? null
262
+ : ({ type: "extension", contractId: e.extensionName } as const),
263
+ );
264
+ }),
265
+ )
266
+ : [];
267
+ // hacky assumption: if we need to deploy any of the extensions, we also need to deploy the implementation
268
+ const transactions = [...extensions, wethTx].filter((e) => e !== null);
269
+ if (transactions.length) {
270
+ transactions.push({
271
+ type: "implementation",
272
+ contractId: options.deployMetadata.name,
273
+ });
274
+ }
275
+ return transactions;
276
+ }
277
+
214
278
  /**
215
279
  * Gets the default constructor parameters required for contract implementation deployment
216
280
  * @param args - The arguments object
@@ -226,6 +290,7 @@ export async function getAllDefaultConstructorParamsForImplementation(args: {
226
290
  chain: Chain;
227
291
  client: ThirdwebClient;
228
292
  contractId: string;
293
+ defaultExtensions?: DynamicContractExtension[];
229
294
  }) {
230
295
  const { chain, client } = args;
231
296
  const isZkSync = await isZkSyncChain(chain);
@@ -251,8 +316,81 @@ export async function getAllDefaultConstructorParamsForImplementation(args: {
251
316
  contractId: "WETH9",
252
317
  }),
253
318
  ]);
319
+
320
+ const defaultExtensionInput = args.defaultExtensions
321
+ ? await generateExtensionInput({
322
+ defaultExtensions: args.defaultExtensions,
323
+ chain,
324
+ client,
325
+ forwarder,
326
+ nativeTokenWrapper: weth,
327
+ })
328
+ : [];
329
+
254
330
  return {
255
331
  trustedForwarder: forwarder,
256
332
  nativeTokenWrapper: weth,
333
+ extensions: defaultExtensionInput,
257
334
  };
258
335
  }
336
+
337
+ async function generateExtensionInput(args: {
338
+ defaultExtensions: DynamicContractExtension[];
339
+ chain: Chain;
340
+ client: ThirdwebClient;
341
+ forwarder: string;
342
+ nativeTokenWrapper: string;
343
+ }) {
344
+ const { defaultExtensions, chain, client, forwarder, nativeTokenWrapper } =
345
+ args;
346
+
347
+ const deployedExtensions = await Promise.all(
348
+ defaultExtensions.map((e) =>
349
+ getDeployedInfraContract({
350
+ chain,
351
+ client,
352
+ contractId: e.extensionName,
353
+ publisher: e.publisherAddress,
354
+ version: e.extensionVersion || "latest",
355
+ constructorParams: { forwarder, nativeTokenWrapper },
356
+ }).then((c) => ({
357
+ name: e.extensionName,
358
+ metadataURI: "",
359
+ implementation: c,
360
+ })),
361
+ ),
362
+ );
363
+
364
+ const extensionInput = await Promise.all(
365
+ deployedExtensions.map(async (e) => {
366
+ if (!e.implementation) {
367
+ throw new Error("Extension not deployed");
368
+ }
369
+ return resolveContractAbi(e.implementation)
370
+ .then(generateExtensionFunctionsFromAbi)
371
+ .then((c) => ({
372
+ metadata: {
373
+ ...e,
374
+ implementation: e.implementation?.address,
375
+ },
376
+ functions: c,
377
+ }));
378
+ }),
379
+ );
380
+
381
+ return extensionInput;
382
+ }
383
+
384
+ export function generateExtensionFunctionsFromAbi(abi: Abi): Array<{
385
+ functionSelector: `0x${string}`;
386
+ functionSignature: string;
387
+ }> {
388
+ const functions = abi.filter(
389
+ (item) => item.type === "function" && !item.name.startsWith("_"),
390
+ ) as AbiFunction[];
391
+
392
+ return functions.map((fn) => ({
393
+ functionSelector: toFunctionSelector(fn),
394
+ functionSignature: toFunctionSignature(fn),
395
+ }));
396
+ }
@@ -39,7 +39,7 @@ export type PublishContractParams = {
39
39
  * metadata,
40
40
  * });
41
41
  * ```
42
- * @extension thirdweb
42
+ * @extension THIRDWEB
43
43
  */
44
44
  export function publishContract(
45
45
  options: BaseTransactionOptions<PublishContractParams>,
@@ -256,6 +256,7 @@ export type PayEmbedProps = {
256
256
  * buyWithFiat: false,
257
257
  * }}
258
258
  * />
259
+ * ```
259
260
  *
260
261
  * ### Customize the UI
261
262
  *
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.93.4";
1
+ export const version = "5.93.5-nightly-e0e31826a8ed11041372f66b3b75fda293a2a05d-20250326035818";