Skip to content

Commit a0bd7ef

Browse files
committed
change Ref to DynamicParams, add decodedBytes setting
1 parent 7bdaabc commit a0bd7ef

File tree

9 files changed

+75
-55
lines changed

9 files changed

+75
-55
lines changed

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ type CustomContractDeploymentFormData = {
7171
deployDeterministic: boolean;
7272
saltForCreate2: string;
7373
signerAsSalt: boolean;
74-
deployParams: Record<string, string | ContractRef>;
74+
deployParams: Record<string, string | DynamicValue>;
7575
moduleData: Record<string, Record<string, string>>;
7676
contractMetadata?: {
7777
name: string;
@@ -82,12 +82,15 @@ type CustomContractDeploymentFormData = {
8282
recipients?: Recipient[];
8383
};
8484

85-
interface ContractRef {
86-
ref: {
87-
publisherAddress: string;
88-
version: string;
89-
contractId: string;
90-
}[];
85+
interface DynamicValue {
86+
dynamicValue: {
87+
type: string;
88+
refContracts?: {
89+
publisherAddress: string;
90+
version: string;
91+
contractId: string;
92+
}[];
93+
};
9194
}
9295

9396
export type CustomContractDeploymentForm =
@@ -219,14 +222,15 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
219222
}
220223

221224
// specify refs if present
222-
const ref = metadata?.constructorParams?.[param.name]?.ref;
223-
if (ref && acc[param.name] === "") {
224-
acc[param.name] = { ref };
225+
const dynamicValue =
226+
metadata?.constructorParams?.[param.name]?.dynamicValue;
227+
if (dynamicValue && acc[param.name] === "") {
228+
acc[param.name] = { dynamicValue };
225229
}
226230

227231
return acc;
228232
},
229-
{} as Record<string, string | ContractRef>,
233+
{} as Record<string, string | DynamicValue>,
230234
),
231235
}),
232236
[deployParams, metadata?.constructorParams, activeAccount, walletChain?.id],
@@ -374,7 +378,7 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
374378
if (
375379
shouldHide(paramKey) ||
376380
!extraMetadataParam?.hidden ||
377-
extraMetadataParam?.ref
381+
extraMetadataParam?.dynamicValue
378382
) {
379383
return null;
380384
}
@@ -776,7 +780,7 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
776780
if (
777781
shouldHide(paramKey) ||
778782
extraMetadataParam?.hidden ||
779-
extraMetadataParam?.ref
783+
extraMetadataParam?.dynamicValue
780784
) {
781785
return null;
782786
}

apps/dashboard/src/components/contract-components/contract-publish-form/contract-params-fieldset.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const ContractParamsFieldset: React.FC<ContractParamsFieldsetProps> = ({
4949
// Clear values accordingly when toggling between input types
5050
if (updated[index]) {
5151
form.setValue(
52-
`constructorParams.${deployParams[index]?.name || "*"}.ref.refType`,
52+
`constructorParams.${deployParams[index]?.name || "*"}.dynamicValue.type`,
5353
deployParams[index]?.type,
5454
);
5555

@@ -62,11 +62,11 @@ export const ContractParamsFieldset: React.FC<ContractParamsFieldsetProps> = ({
6262
);
6363
} else {
6464
form.setValue(
65-
`constructorParams.${deployParams[index]?.name || "*"}.ref.refType`,
65+
`constructorParams.${deployParams[index]?.name || "*"}.dynamicValue.type`,
6666
"",
6767
);
6868
form.setValue(
69-
`constructorParams.${deployParams[index]?.name || "*"}.ref`,
69+
`constructorParams.${deployParams[index]?.name || "*"}.dynamicValue`,
7070
"",
7171
{
7272
shouldDirty: true,
@@ -180,12 +180,14 @@ export const ContractParamsFieldset: React.FC<ContractParamsFieldsetProps> = ({
180180
)}
181181

182182
{(param.type === "address" ||
183-
param.type === "address[]") && (
183+
param.type === "address[]" ||
184+
param.type === "bytes" ||
185+
param.type === "bytes[]") && (
184186
<Checkbox
185187
isChecked={isCustomInputEnabled[idx]}
186188
onChange={() => handleToggleCustomInput(idx)}
187189
>
188-
Use Custom Input
190+
Use Dynamic Input
189191
</Checkbox>
190192
)}
191193
</Flex>

apps/dashboard/src/components/contract-components/contract-publish-form/impl-params-fieldset.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const ImplementationParamsFieldset: React.FC<
4545
// Clear or set values accordingly when toggling between input types
4646
if (updated[index]) {
4747
form.setValue(
48-
`implConstructorParams.${implParams[index]?.name || "*"}.ref.refType`,
48+
`implConstructorParams.${implParams[index]?.name || "*"}.dynamicValue.type`,
4949
implParams[index]?.type,
5050
);
5151
form.setValue(
@@ -57,11 +57,11 @@ export const ImplementationParamsFieldset: React.FC<
5757
);
5858
} else {
5959
form.setValue(
60-
`implConstructorParams.${implParams[index]?.name || "*"}.ref.refType`,
60+
`implConstructorParams.${implParams[index]?.name || "*"}.dynamicValue.type`,
6161
"",
6262
);
6363
form.setValue(
64-
`implConstructorParams.${implParams[index]?.name || "*"}.ref`,
64+
`implConstructorParams.${implParams[index]?.name || "*"}.dynamicValue`,
6565
"",
6666
{
6767
shouldDirty: true,
@@ -116,9 +116,7 @@ export const ImplementationParamsFieldset: React.FC<
116116
{!isCustomInputEnabled[idx] ? (
117117
<>
118118
<SolidityInput
119-
solidityType={
120-
param.type === "address" ? "string" : param.type
121-
}
119+
solidityType={param.type}
122120
placeholder={
123121
isMobile ||
124122
paramTemplateValues?.[0]?.value ===
@@ -137,7 +135,10 @@ export const ImplementationParamsFieldset: React.FC<
137135
<RefInputImplFieldset param={param} />
138136
)}
139137

140-
{param.type === "address" && (
138+
{(param.type === "address" ||
139+
param.type === "address[]" ||
140+
param.type === "bytes" ||
141+
param.type === "bytes[]") && (
141142
<Checkbox
142143
isChecked={isCustomInputEnabled[idx]}
143144
onChange={() => handleToggleCustomInput(idx)}

apps/dashboard/src/components/contract-components/contract-publish-form/ref-input-fieldset.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const RefInputFieldset: React.FC<RefInputFieldsetProps> = ({
1515
const form = useFormContext();
1616

1717
const { fields, append, remove } = useFieldArray({
18-
name: `constructorParams.${param.name ? param.name : "*"}.ref.contracts`,
18+
name: `constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts`,
1919
control: form.control,
2020
});
2121

apps/dashboard/src/components/contract-components/contract-publish-form/ref-input-impl-fieldset.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const RefInputImplFieldset: React.FC<RefInputImplFieldsetProps> = ({
1515
const form = useFormContext();
1616

1717
const { fields, append, remove } = useFieldArray({
18-
name: `implConstructorParams.${param.name ? param.name : "*"}.ref.contracts`,
18+
name: `implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts`,
1919
control: form.control,
2020
});
2121

apps/dashboard/src/components/contract-components/contract-publish-form/ref-input-impl.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ export const RefContractImplInput: React.FC<RefContractImplInputProps> = ({
2929

3030
const publishedContractsQuery = usePublishedContractsQuery(
3131
form.watch(
32-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
32+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
3333
),
3434
);
3535

3636
const allVersions = useAllVersions(
3737
form.watch(
38-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
38+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
3939
),
4040
form.watch(
41-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.contractId`,
41+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.contractId`,
4242
),
4343
);
4444

@@ -55,7 +55,7 @@ export const RefContractImplInput: React.FC<RefContractImplInputProps> = ({
5555
gap={1}
5656
isInvalid={
5757
!!form.getFieldState(
58-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
58+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
5959
form.formState,
6060
).error
6161
}
@@ -64,7 +64,7 @@ export const RefContractImplInput: React.FC<RefContractImplInputProps> = ({
6464
<Input
6565
placeholder="Address or ENS"
6666
{...form.register(
67-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
67+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
6868
)}
6969
/>
7070
</FormControl>
@@ -80,7 +80,7 @@ export const RefContractImplInput: React.FC<RefContractImplInputProps> = ({
8080
<Select
8181
isDisabled={(publishedContractsQuery?.data || []).length === 0}
8282
{...form.register(
83-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.contractId`,
83+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.contractId`,
8484
)}
8585
placeholder={
8686
publishedContractsQuery.isFetched &&
@@ -108,7 +108,7 @@ export const RefContractImplInput: React.FC<RefContractImplInputProps> = ({
108108
w="full"
109109
isDisabled={!allVersions.data}
110110
{...form.register(
111-
`implConstructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.version`,
111+
`implConstructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.version`,
112112
)}
113113
borderRadius="lg"
114114
>

apps/dashboard/src/components/contract-components/contract-publish-form/ref-input.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ export const RefContractInput: React.FC<RefContractInputProps> = ({
2929

3030
const publishedContractsQuery = usePublishedContractsQuery(
3131
form.watch(
32-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
32+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
3333
),
3434
);
3535

3636
const allVersions = useAllVersions(
3737
form.watch(
38-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
38+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
3939
),
4040
form.watch(
41-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.contractId`,
41+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.contractId`,
4242
),
4343
);
4444

@@ -55,7 +55,7 @@ export const RefContractInput: React.FC<RefContractInputProps> = ({
5555
gap={1}
5656
isInvalid={
5757
!!form.getFieldState(
58-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
58+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
5959
form.formState,
6060
).error
6161
}
@@ -64,7 +64,7 @@ export const RefContractInput: React.FC<RefContractInputProps> = ({
6464
<Input
6565
placeholder="Address or ENS"
6666
{...form.register(
67-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.publisherAddress`,
67+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.publisherAddress`,
6868
)}
6969
/>
7070
</FormControl>
@@ -80,7 +80,7 @@ export const RefContractInput: React.FC<RefContractInputProps> = ({
8080
<Select
8181
isDisabled={(publishedContractsQuery?.data || []).length === 0}
8282
{...form.register(
83-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.contractId`,
83+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.contractId`,
8484
)}
8585
placeholder={
8686
publishedContractsQuery.isFetched &&
@@ -108,7 +108,7 @@ export const RefContractInput: React.FC<RefContractInputProps> = ({
108108
w="full"
109109
isDisabled={!allVersions.data}
110110
{...form.register(
111-
`constructorParams.${param.name ? param.name : "*"}.ref.contracts.${index}.version`,
111+
`constructorParams.${param.name ? param.name : "*"}.dynamicValue.refContracts.${index}.version`,
112112
)}
113113
borderRadius="lg"
114114
>

packages/thirdweb/src/extensions/prebuilts/deploy-published.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@ export type DeployContractfromDeployMetadataOptions = {
129129
salt?: string;
130130
};
131131

132-
interface Ref {
133-
refType: "address" | "address[]";
134-
contracts: {
132+
interface DynamicParams {
133+
type: "address" | "address[]" | "bytes" | "bytes[]";
134+
refContracts: {
135135
publisherAddress: string;
136136
version: string;
137137
contractId: string;
@@ -140,7 +140,7 @@ interface Ref {
140140

141141
interface ImplementationConstructorParam {
142142
defaultValue?: string;
143-
ref?: Ref;
143+
dynamicValue?: DynamicParams;
144144
}
145145

146146
type ProcessRefDeploymentsOptions = {
@@ -164,11 +164,11 @@ async function processRefDeployments(
164164
return paramValue.defaultValue;
165165
}
166166

167-
if ("ref" in paramValue && paramValue.ref) {
168-
const ref = paramValue.ref;
169-
const contracts = ref.contracts;
167+
if ("dynamicValue" in paramValue && paramValue.dynamicValue) {
168+
const dynamicValue = paramValue.dynamicValue;
169+
const contracts = dynamicValue.refContracts;
170170

171-
if (ref.refType === "address") {
171+
if (dynamicValue.type === "address") {
172172
// Call the fetchAndDeployContract function with the ref data
173173
const addr = await deployPublishedContract({
174174
client,
@@ -182,7 +182,7 @@ async function processRefDeployments(
182182
return addr;
183183
}
184184

185-
if (ref.refType === "address[]") {
185+
if (dynamicValue.type === "address[]") {
186186
const addressArray = [];
187187

188188
for (const c of contracts) {

packages/thirdweb/src/utils/any-evm/deploy-metadata.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,26 @@ type ParsedCompilerMetadata = {
159159
zk_version?: string;
160160
};
161161

162-
type Ref = {
163-
refType: "address" | "address[]";
164-
contracts: Array<{
162+
type DynamicParams = {
163+
type: "address" | "address[]" | "bytes" | "bytes[]";
164+
165+
// use for address types
166+
refContracts?: Array<{
165167
contractId: string;
166168
publisherAddress: string;
167169
version: string;
168170
}>;
171+
172+
// use for bytes
173+
decodedBytes?: Array<
174+
Record<
175+
string,
176+
{
177+
defaultValue?: string;
178+
dynamicValue?: DynamicParams; // can have address type which may need ref
179+
}
180+
>
181+
>;
169182
};
170183

171184
export type CompilerMetadata = Prettify<
@@ -229,14 +242,14 @@ export type ExtendedMetadata = {
229242
description?: string;
230243
defaultValue?: string;
231244
hidden?: boolean;
232-
ref?: Ref;
245+
dynamicValue?: DynamicParams;
233246
}
234247
>;
235248
implConstructorParams?: Record<
236249
string,
237250
{
238251
defaultValue?: string;
239-
ref?: Ref;
252+
dynamicValue?: DynamicParams;
240253
}
241254
>;
242255
compositeAbi?: Abi;

0 commit comments

Comments
 (0)