Skip to content

Commit 454f063

Browse files
refactor: optimize zksync chain detection and add Creator Testnet test (#4883)
## Problem solved Short description of the bug fixed or feature added <!-- start pr-codex --> --- ## PR-Codex overview This PR focuses on refactoring code related to the handling of contract metadata, specifically around bytecode fetching and the integration of `zksync` support. It enhances the clarity and functionality of contract deployment processes. ### Detailed summary - Removed checks for `compilerType` in multiple files. - Simplified bytecode fetching by introducing `fetchBytecodeFromCompilerMetadata`. - Updated contract metadata handling in `fetchDeployMetadata`. - Adjusted UI components to reflect new metadata structure. - Added a test for sending transactions on the Creator Testnet. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` <!-- end pr-codex -->
1 parent 78cbc41 commit 454f063

File tree

14 files changed

+132
-87
lines changed

14 files changed

+132
-87
lines changed

.changeset/green-books-drop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
Auto resolve zksync bytecode

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import {
3737
} from "thirdweb/deploys";
3838
import { useActiveAccount, useActiveWalletChain } from "thirdweb/react";
3939
import { upload } from "thirdweb/storage";
40-
import { isZkSyncChain } from "thirdweb/utils";
4140
import { FormHelperText, FormLabel, Heading, Text } from "tw-components";
4241
import { useCustomFactoryAbi, useFunctionParamsFromABI } from "../hooks";
4342
import { addContractToMultiChainRegistry } from "../utils";
@@ -386,10 +385,6 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
386385
throw new Error("no chain");
387386
}
388387

389-
const compilerType = (await isZkSyncChain(walletChain))
390-
? "zksolc"
391-
: "solc";
392-
393388
let _contractURI = "";
394389

395390
if (hasContractURI && params.contractMetadata) {
@@ -454,7 +449,6 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
454449
deployMetadata: m,
455450
initializeParams: params.moduleData[m.name],
456451
})),
457-
compilerType,
458452
});
459453
},
460454
});

apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ export function ContractPublishForm(props: {
9292
customFactoryAddresses:
9393
props.publishMetadata.factoryDeploymentData?.customFactoryInput
9494
?.customFactoryAddresses || {},
95-
params: props.publishMetadata.customFactoryInput?.params || [],
95+
params:
96+
props.publishMetadata.factoryDeploymentData?.customFactoryInput
97+
?.params || [],
9698
},
9799
},
98100
constructorParams: props.publishMetadata.constructorParams || {},

apps/dashboard/src/components/contract-components/contract-table/cells/description.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ export const ContractDescriptionCell: React.FC<
1717
}
1818
>
1919
<Text size="body.md" noOfLines={1}>
20-
{deployMetadataResultQuery.data?.latestPublishedContractMetadata
21-
?.publishedMetadata.description ||
20+
{deployMetadataResultQuery.data?.description ||
2221
(!deployMetadataResultQuery.isFetching ? "First Version" : "None")}
2322
</Text>
2423
</Skeleton>

apps/dashboard/src/components/contract-components/shared/contract-id-image.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ export const ContractIdImage: React.FC<ContractIdImageProps> = ({
1818
}) => {
1919
const deployMetadataResultQuery = useFetchDeployMetadata(contractId);
2020

21-
const logo =
22-
deployMetadataResultQuery.data?.latestPublishedContractMetadata
23-
?.publishedMetadata.logo;
21+
const logo = deployMetadataResultQuery.data?.logo;
2422

2523
const img =
2624
deployMetadataResultQuery.data?.image !== "custom"

packages/thirdweb/src/contract/actions/compiler-metadata.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ export type CompilerMetadata = {
3030
export function formatCompilerMetadata(
3131
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix later
3232
metadata: any,
33-
compilerType?: "solc" | "zksolc",
3433
): CompilerMetadata {
3534
let meta = metadata;
36-
if (compilerType === "zksolc") {
37-
meta = metadata.source_metadata || meta;
35+
if ("source_metadata" in metadata) {
36+
meta = metadata.source_metadata;
3837
}
3938
const compilationTarget = meta.settings.compilationTarget;
4039
const targets = Object.keys(compilationTarget);

packages/thirdweb/src/contract/deployment/publisher.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ export async function fetchPublishedContractMetadata(options: {
2424
contractId: string;
2525
publisher?: string;
2626
version?: string;
27-
compilerType?: "solc" | "zksolc";
2827
}): Promise<FetchDeployMetadataResult> {
2928
const cacheKey = `${options.contractId}-${options.publisher}-${options.version}`;
3029
return withCache(
@@ -34,7 +33,6 @@ export async function fetchPublishedContractMetadata(options: {
3433
publisherAddress: options.publisher || THIRDWEB_DEPLOYER,
3534
contractId: options.contractId,
3635
version: options.version,
37-
compilerType: options.compilerType,
3836
});
3937
if (!publishedContract.publishMetadataUri) {
4038
throw new Error(
@@ -44,7 +42,6 @@ export async function fetchPublishedContractMetadata(options: {
4442
const data = await fetchDeployMetadata({
4543
client: options.client,
4644
uri: publishedContract.publishMetadataUri,
47-
compilerType: options.compilerType,
4845
});
4946
return data;
5047
},
@@ -214,7 +211,6 @@ type FetchPublishedContractOptions = {
214211
contractId: string;
215212
version?: string;
216213
client: ThirdwebClient;
217-
compilerType?: "solc" | "zksolc";
218214
};
219215

220216
/**

packages/thirdweb/src/contract/deployment/utils/bootstrap.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { sendAndConfirmTransaction } from "../../../transaction/actions/send-and-confirm-transaction.js";
2-
import type { FetchDeployMetadataResult } from "../../../utils/any-evm/deploy-metadata.js";
2+
import {
3+
type FetchDeployMetadataResult,
4+
fetchBytecodeFromCompilerMetadata,
5+
} from "../../../utils/any-evm/deploy-metadata.js";
36
import { isZkSyncChain } from "../../../utils/any-evm/zksync/isZkSyncChain.js";
47
import type { ClientAndChainAndAccount } from "../../../utils/types.js";
58
import { type ThirdwebContract, getContract } from "../../contract.js";
@@ -27,7 +30,6 @@ export async function getOrDeployInfraForPublishedContract(
2730
constructorParams?: Record<string, unknown>;
2831
publisher?: string;
2932
version?: string;
30-
compilerType?: "solc" | "zksolc";
3133
},
3234
): Promise<{
3335
cloneFactoryContract: ThirdwebContract;
@@ -41,7 +43,6 @@ export async function getOrDeployInfraForPublishedContract(
4143
constructorParams,
4244
publisher,
4345
version,
44-
compilerType,
4546
} = args;
4647

4748
if (await isZkSyncChain(chain)) {
@@ -55,14 +56,17 @@ export async function getOrDeployInfraForPublishedContract(
5556
contractId,
5657
publisher,
5758
version,
58-
compilerType,
5959
});
6060
const implementationContract = await zkDeployContractDeterministic({
6161
chain,
6262
client,
6363
account,
6464
abi: compilerMetadata.abi,
65-
bytecode: compilerMetadata.bytecode,
65+
bytecode: await fetchBytecodeFromCompilerMetadata({
66+
compilerMetadata,
67+
client,
68+
chain,
69+
}),
6670
params: constructorParams,
6771
});
6872
return {

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import { resolveMethod } from "../../transaction/resolve-method.js";
1313
import { encodeAbiParameters } from "../../utils/abi/encodeAbiParameters.js";
1414
import { normalizeFunctionParams } from "../../utils/abi/normalizeFunctionParams.js";
1515
import { getAddress } from "../../utils/address.js";
16-
import type { CompilerMetadata } from "../../utils/any-evm/deploy-metadata.js";
16+
import {
17+
type CompilerMetadata,
18+
fetchBytecodeFromCompilerMetadata,
19+
} from "../../utils/any-evm/deploy-metadata.js";
1720
import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
1821
import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
1922
import type { Hex } from "../../utils/encoding/hex.js";
@@ -33,7 +36,6 @@ export type DeployPublishedContractOptions = {
3336
version?: string;
3437
implementationConstructorParams?: Record<string, unknown>;
3538
salt?: string;
36-
compilerType?: "solc" | "zksolc";
3739
};
3840

3941
/**
@@ -93,14 +95,12 @@ export async function deployPublishedContract(
9395
version,
9496
implementationConstructorParams,
9597
salt,
96-
compilerType,
9798
} = options;
9899
const deployMetadata = await fetchPublishedContractMetadata({
99100
client,
100101
contractId,
101102
publisher,
102103
version,
103-
compilerType,
104104
});
105105

106106
return deployContractfromDeployMetadata({
@@ -111,7 +111,6 @@ export async function deployPublishedContract(
111111
initializeParams: contractParams,
112112
implementationConstructorParams,
113113
salt,
114-
compilerType,
115114
});
116115
}
117116

@@ -130,7 +129,6 @@ export type DeployContractfromDeployMetadataOptions = {
130129
initializeParams?: Record<string, unknown>;
131130
}[];
132131
salt?: string;
133-
compilerType?: "solc" | "zksolc";
134132
};
135133

136134
/**
@@ -148,7 +146,6 @@ export async function deployContractfromDeployMetadata(
148146
implementationConstructorParams,
149147
modules,
150148
salt,
151-
compilerType,
152149
} = options;
153150
switch (deployMetadata?.deployType) {
154151
case "standard": {
@@ -182,7 +179,6 @@ export async function deployContractfromDeployMetadata(
182179
client,
183180
})),
184181
publisher: deployMetadata.publisher,
185-
compilerType,
186182
});
187183

188184
const initializeTransaction = await getInitializeTransaction({
@@ -272,7 +268,11 @@ async function directDeploy(options: {
272268
account,
273269
client,
274270
chain,
275-
bytecode: compilerMetadata.bytecode,
271+
bytecode: await fetchBytecodeFromCompilerMetadata({
272+
compilerMetadata,
273+
client,
274+
chain,
275+
}),
276276
abi: compilerMetadata.abi,
277277
params: contractParams,
278278
salt,
@@ -286,7 +286,11 @@ async function directDeploy(options: {
286286
account,
287287
client,
288288
chain,
289-
bytecode: compilerMetadata.bytecode,
289+
bytecode: await fetchBytecodeFromCompilerMetadata({
290+
compilerMetadata,
291+
client,
292+
chain,
293+
}),
290294
abi: compilerMetadata.abi,
291295
constructorParams: contractParams,
292296
salt,

packages/thirdweb/src/extensions/thirdweb/write/publish.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ describe.runIf(process.env.TW_SECRET_KEY)("publishContract", () => {
8585
uri: logs?.[0]?.args.publishedContract.publishMetadataUri ?? "",
8686
});
8787
expect(publishedData.abi).toBeDefined();
88-
expect(publishedData.bytecode).toBeDefined();
8988
expect(publishedData.version).toBe("0.0.1");
9089
expect(publishedData.changelog).toBe("Initial release");
9190
expect(publishedData.name).toBe("CatAttackNFT");

0 commit comments

Comments
 (0)