Skip to content

Commit 6056554

Browse files
committed
Modular contracts - rename extensions to modules (#3969)
<!-- start pr-codex --> ## PR-Codex overview This PR focuses on refactoring the codebase to replace `ModularExtension` with `ModularModule` and update related components and schemas. ### Detailed summary - Replaced `ModularExtension` with `ModularModule` in various files - Updated component names and paths accordingly - Updated schemas and JSON files related to `ModularModule` > The following files were skipped due to too many changes: `apps/dashboard/src/components/contract-components/contract-publish-form/factory-fieldset.tsx`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/ExtensionInstalled.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/ExtensionUninstalled.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/modular-contract-fieldset.tsx`, `packages/thirdweb/src/contract/actions/resolve-abi.ts`, `apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts`, `packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallModuleByProxy.ts`, `packages/thirdweb/scripts/generate/abis/modular/IModularCore.json`, `apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx`, `legacy_packages/sdk/src/evm/common/any-evm-utils/getModularDeploymentInfo.ts`, `legacy_packages/sdk/src/evm/core/sdk.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/default-factory.tsx`, `apps/dashboard/src/contract-ui/tabs/manage/components/install-extension-params.tsx`, `packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallPublishedExtension.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx`, `packages/thirdweb/src/extensions/modular/ModularCore/write/installPublishedExtension.ts`, `packages/thirdweb/src/exports/extensions/modular.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC20/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/DelayedRevealBatchMetadataERC721/read/getModuleConfig.ts`, `legacy_packages/sdk/test/evm/modular-publish-deploy.test.ts`, `packages/thirdweb/scripts/generate/abis/modular/SimpleMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/SimpleMetadataERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/ModularCore.json`, `apps/dashboard/src/contract-ui/tabs/manage/page.tsx`, `packages/thirdweb/src/extensions/modular/__generated__/ModularExtension/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularExtension/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC20/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC1155/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC721/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC1155/read/getExtensionConfig.ts`, `legacy_packages/sdk/test/evm/mock/mockModuleWithInterface.ts`, `legacy_packages/sdk/src/evm/common/modular/compatibleExtensions.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/read/getInstalledExtensions.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/read/getInstalledExtensions.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx`, `apps/dashboard/src/contract-ui/tabs/manage/components/InstalledExtensionsTable.tsx`, `legacy_packages/sdk/src/evm/constants/thirdweb-features.ts`, `packages/thirdweb/scripts/generate/abis/modular/OpenEditionMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/OpenEditionMetadataERC1155.json`, `packages/thirdweb/src/extensions/prebuilts/deploy-modular-core.test.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/installExtension.ts`, `packages/thirdweb/scripts/generate/abis/modular/BatchMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/BatchMetadataERC1155.json`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/uninstallExtension.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/installExtension.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/uninstallExtension.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-extensions-fieldset.tsx`, `packages/thirdweb/scripts/generate/abis/modular/RoyaltyERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/RoyaltyERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/DelayedRevealBatchMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC1155.json`, `apps/dashboard/src/contract-ui/tabs/manage/components/ExtensionForm.tsx`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC20.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC20.json`, `legacy_packages/sdk/test/evm/mock/mockExtensionWithFunctionsMetadata.ts`, `legacy_packages/sdk/test/evm/mock/mockCoreMetadata.ts` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` <!-- end pr-codex -->
1 parent 874ef7a commit 6056554

File tree

98 files changed

+6272
-6340
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+6272
-6340
lines changed

apps/dashboard/src/@/components/ui/alert.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const alertVariants = cva(
1010
variant: {
1111
default: "bg-background text-foreground",
1212
destructive:
13-
"bg-destructive/10 border-destructive/50 dark:border-destructive [&>svg]:text-destructive",
13+
"bg-destructive/30 border-destructive/50 dark:border-destructive [&>svg]:text-destructive",
1414
info: "bg-primary/10 border-primary/50 dark:border-primary [&>svg]:text-primary",
1515
warning:
1616
"bg-warning/10 border-warning/50 dark:border-warning [&>svg]:text-warning",

apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ import {
4949
useDeployStatusModal,
5050
} from "./deploy-context-modal";
5151
import {
52-
ModularContractDefaultExtensionsFieldset,
52+
ModularContractDefaultModulesFieldset,
5353
showPrimarySaleFiedset,
5454
showRoyaltyFieldset,
55-
useModularContractsDefaultExtensionsInstallParams,
56-
} from "./modular-contract-default-extensions-fieldset";
55+
useModularContractsDefaultModulesInstallParams,
56+
} from "./modular-contract-default-modules-fieldset";
5757
import { Param } from "./param";
5858
import { PlatformFeeFieldset } from "./platform-fee-fieldset";
5959
import { PrimarySaleFieldset } from "./primary-sale-fieldset";
@@ -77,7 +77,7 @@ export type CustomContractDeploymentFormData = {
7777
saltForCreate2: string;
7878
signerAsSalt: boolean;
7979
deployParams: Record<string, string>;
80-
modularContractDefaultExtensionsInstallParams: Record<string, string>[];
80+
modularContractDefaultModulesInstallParams: Record<string, string>[];
8181
contractMetadata?: {
8282
name: string;
8383
description: string;
@@ -160,11 +160,11 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
160160
fullPublishMetadata.data?.deployType === "customFactory";
161161

162162
const isModular = fullPublishMetadata.data?.routerType === "modular";
163-
const defaultExtensions = fullPublishMetadata.data?.defaultExtensions;
163+
const defaultModules = fullPublishMetadata.data?.defaultModules;
164164

165-
const modularContractDefaultExtensionsInstallParams =
166-
useModularContractsDefaultExtensionsInstallParams({
167-
defaultExtensions,
165+
const modularContractDefaultModulesInstallParams =
166+
useModularContractsDefaultModulesInstallParams({
167+
defaultModules,
168168
isQueryEnabled: isModular,
169169
});
170170

@@ -219,11 +219,11 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
219219
signerAsSalt: true,
220220
deployParams: parsedDeployParams,
221221
recipients: [{ address: connectedWallet || "", sharesBps: 10000 }],
222-
// set default values for modular contract extensions with custom components
223-
modularContractDefaultExtensionsInstallParams:
222+
// set default values for modular contract modules with custom components
223+
modularContractDefaultModulesInstallParams:
224224
(activeAccount &&
225225
isTWPublisher &&
226-
modularContractDefaultExtensionsInstallParams.data?.map((ext) => {
226+
modularContractDefaultModulesInstallParams.data?.map((ext) => {
227227
const paramNames = ext.params.map((param) => param.name);
228228
const returnVal: Record<string, string> = {};
229229

@@ -245,7 +245,7 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
245245
parsedDeployParams,
246246
isAccountFactory,
247247
connectedWallet,
248-
modularContractDefaultExtensionsInstallParams.data,
248+
modularContractDefaultModulesInstallParams.data,
249249
isTWPublisher,
250250
activeAccount,
251251
],
@@ -413,26 +413,25 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
413413

414414
const deployParams = { ...formData.deployParams };
415415

416-
// if Modular contract has extensions
417-
if (isModular && modularContractDefaultExtensionsInstallParams.data) {
418-
const extensionInstallData: string[] =
419-
modularContractDefaultExtensionsInstallParams.data.map(
416+
// if Modular contract has modules
417+
if (isModular && modularContractDefaultModulesInstallParams.data) {
418+
const moduleInstallData: string[] =
419+
modularContractDefaultModulesInstallParams.data.map(
420420
(ext, extIndex) => {
421421
return encodeAbiParameters(
422422
// param name+type []
423423
ext.params.map((p) => ({ name: p.name, type: p.type })),
424424
// value []
425425
Object.values(
426-
formData.modularContractDefaultExtensionsInstallParams[
426+
formData.modularContractDefaultModulesInstallParams[
427427
extIndex
428428
] || {},
429429
),
430430
);
431431
},
432432
);
433433

434-
deployParams._extensionInstallData =
435-
JSON.stringify(extensionInstallData);
434+
deployParams._moduleInstallData = JSON.stringify(moduleInstallData);
436435
}
437436

438437
deploy.mutate(
@@ -649,8 +648,8 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
649648
.filter((paramName) => {
650649
if (
651650
isModular &&
652-
(paramName === "_extensionInstallData" ||
653-
paramName === "_extensions")
651+
(paramName === "_moduleInstallData" ||
652+
paramName === "_modules")
654653
) {
655654
return false;
656655
}
@@ -681,12 +680,10 @@ const CustomContractForm: React.FC<CustomContractFormProps> = ({
681680

682681
{isModular && (
683682
<>
684-
{modularContractDefaultExtensionsInstallParams.data ? (
685-
<ModularContractDefaultExtensionsFieldset
683+
{modularContractDefaultModulesInstallParams.data ? (
684+
<ModularContractDefaultModulesFieldset
686685
form={form}
687-
extensions={
688-
modularContractDefaultExtensionsInstallParams.data
689-
}
686+
modules={modularContractDefaultModulesInstallParams.data}
690687
isTWPublisher={isTWPublisher}
691688
/>
692689
) : (
Lines changed: 43 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,72 @@
11
import { FormControl } from "@chakra-ui/react";
22
import { useQuery } from "@tanstack/react-query";
33
import { SolidityInput } from "contract-ui/components/solidity-inputs";
4-
import { getExtensionInstalledParams } from "contract-ui/tabs/manage/components/getExtensionInstalledParams";
4+
import { getModuleInstalledParams } from "contract-ui/tabs/manage/components/getModuleInstalledParams";
55
import invariant from "tiny-invariant";
66
import { FormErrorMessage, FormLabel } from "tw-components";
77
import type { CustomContractDeploymentForm } from "./custom-contract";
88
import { PrimarySaleFieldset } from "./primary-sale-fieldset";
99
import { RoyaltyFieldset } from "./royalty-fieldset";
1010

11-
type ExtensionMeta = {
12-
extensionName: string;
13-
extensionVersion: string;
11+
type ModuleMeta = {
12+
moduleName: string;
13+
moduleVersion: string;
1414
publisherAddress: string;
1515
};
1616

1717
/**
18-
* Get the install params for all given extensions
18+
* Get the install params for all given modules
1919
*/
20-
export function useModularContractsDefaultExtensionsInstallParams(props: {
21-
defaultExtensions?: ExtensionMeta[];
20+
export function useModularContractsDefaultModulesInstallParams(props: {
21+
defaultModules?: ModuleMeta[];
2222
isQueryEnabled: boolean;
2323
}) {
24-
const { defaultExtensions, isQueryEnabled } = props;
24+
const { defaultModules, isQueryEnabled } = props;
2525
return useQuery({
2626
queryKey: [
27-
"useModularContractsDefaultExtensionsInstallParams",
28-
defaultExtensions,
27+
"useModularContractsDefaultModulesInstallParams",
28+
defaultModules,
2929
],
3030
queryFn: async () => {
31-
invariant(defaultExtensions, "defaultExtensions must be defined");
32-
return Promise.all(defaultExtensions.map(getExtensionInstalledParams));
31+
invariant(defaultModules, "defaultModules must be defined");
32+
return Promise.all(defaultModules.map(getModuleInstalledParams));
3333
},
34-
enabled: !!(isQueryEnabled && defaultExtensions),
34+
enabled: !!(isQueryEnabled && defaultModules),
3535
refetchOnWindowFocus: false,
3636
});
3737
}
3838

39-
export type UseModularContractsDefaultExtensionsInstallParams = ReturnType<
40-
typeof useModularContractsDefaultExtensionsInstallParams
39+
export type UseModularContractsDefaultModulesInstallParams = ReturnType<
40+
typeof useModularContractsDefaultModulesInstallParams
4141
>;
4242

43-
type Extensions = NonNullable<
44-
UseModularContractsDefaultExtensionsInstallParams["data"]
43+
type Modules = NonNullable<
44+
UseModularContractsDefaultModulesInstallParams["data"]
4545
>;
4646

47-
type ExtensionWithIndex = Extensions[number] & { extensionIndex: number };
47+
type ModuleWithIndex = Modules[number] & { moduleIndex: number };
4848

49-
export function ModularContractDefaultExtensionsFieldset(props: {
50-
extensions: Extensions;
49+
export function ModularContractDefaultModulesFieldset(props: {
50+
modules: Modules;
5151
form: CustomContractDeploymentForm;
5252
isTWPublisher: boolean;
5353
}) {
54-
// save the index of the extension before filtering out
55-
const extensionsWithIndex: ExtensionWithIndex[] = props.extensions
54+
// save the index of the module before filtering out
55+
const modulesWithIndex: ModuleWithIndex[] = props.modules
5656
.map((v, i) => ({
5757
...v,
58-
extensionIndex: i,
58+
moduleIndex: i,
5959
}))
6060
.filter((v) => v.params.length > 0);
6161

6262
return (
6363
<div className="py-4">
6464
<div className="flex flex-col gap-4">
65-
{extensionsWithIndex.map((ext) => {
65+
{modulesWithIndex.map((ext) => {
6666
return (
67-
<RenderExtension
68-
key={ext.extensionName}
69-
extension={ext}
67+
<RenderModule
68+
key={ext.moduleName}
69+
module={ext}
7070
isTWPublisher={props.isTWPublisher}
7171
form={props.form}
7272
/>
@@ -77,47 +77,39 @@ export function ModularContractDefaultExtensionsFieldset(props: {
7777
);
7878
}
7979

80-
function RenderExtension(props: {
81-
extension: ExtensionWithIndex;
80+
function RenderModule(props: {
81+
module: ModuleWithIndex;
8282
form: CustomContractDeploymentForm;
8383
isTWPublisher: boolean;
8484
}) {
85-
const { extension, form } = props;
85+
const { module, form } = props;
8686

8787
// only consider mapping if published by thirdweb, else show the generic form
8888
if (props.isTWPublisher) {
89-
const paramNames = extension.params.map((param) => param.name);
89+
const paramNames = module.params.map((param) => param.name);
9090

9191
if (showRoyaltyFieldset(paramNames)) {
9292
return (
93-
<RenderRoyaltyFieldset
94-
extension={extension}
95-
form={form}
96-
isTWPublisher
97-
/>
93+
<RenderRoyaltyFieldset module={module} form={form} isTWPublisher />
9894
);
9995
}
10096

10197
if (showPrimarySaleFiedset(paramNames)) {
10298
return (
103-
<RenderPrimarySaleFieldset
104-
extension={extension}
105-
form={form}
106-
isTWPublisher
107-
/>
99+
<RenderPrimarySaleFieldset module={module} form={form} isTWPublisher />
108100
);
109101
}
110102
}
111103

112104
return (
113105
<div>
114106
<h3 className="text-lg mb-2 text-secondary-foreground font-medium">
115-
{extension.extensionName}
107+
{module.moduleName}
116108
</h3>
117109
<div className="flex flex-col gap-3">
118-
{extension.params.map((param) => {
110+
{module.params.map((param) => {
119111
const formFieldKey =
120-
`modularContractDefaultExtensionsInstallParams.${extension.extensionIndex}.${param.name}` as const;
112+
`modularContractDefaultModulesInstallParams.${module.moduleIndex}.${param.name}` as const;
121113

122114
return (
123115
<FormControl
@@ -149,14 +141,14 @@ function RenderExtension(props: {
149141
}
150142

151143
function RenderPrimarySaleFieldset(prosp: {
152-
extension: ExtensionWithIndex;
144+
module: ModuleWithIndex;
153145
form: CustomContractDeploymentForm;
154146
isTWPublisher: boolean;
155147
}) {
156-
const { extension, form } = prosp;
148+
const { module, form } = prosp;
157149

158150
const primarySaleRecipientPath =
159-
`modularContractDefaultExtensionsInstallParams.${extension.extensionIndex}.primarySaleRecipient` as const;
151+
`modularContractDefaultModulesInstallParams.${module.moduleIndex}.primarySaleRecipient` as const;
160152

161153
return (
162154
<PrimarySaleFieldset
@@ -173,17 +165,17 @@ function RenderPrimarySaleFieldset(prosp: {
173165
}
174166

175167
function RenderRoyaltyFieldset(props: {
176-
extension: ExtensionWithIndex;
168+
module: ModuleWithIndex;
177169
form: CustomContractDeploymentForm;
178170
isTWPublisher: boolean;
179171
}) {
180-
const { extension: ext, form } = props;
172+
const { module: ext, form } = props;
181173

182174
const royaltyRecipientPath =
183-
`modularContractDefaultExtensionsInstallParams.${ext.extensionIndex}.royaltyRecipient` as const;
175+
`modularContractDefaultModulesInstallParams.${ext.moduleIndex}.royaltyRecipient` as const;
184176

185177
const royaltyBpsPath =
186-
`modularContractDefaultExtensionsInstallParams.${ext.extensionIndex}.royaltyBps` as const;
178+
`modularContractDefaultModulesInstallParams.${ext.moduleIndex}.royaltyBps` as const;
187179

188180
return (
189181
<RoyaltyFieldset

0 commit comments

Comments
 (0)