Skip to content

Commit 9e2c32d

Browse files
committed
enable crosschain deployments for non-modular prebuilts
1 parent dc427b2 commit 9e2c32d

File tree

5 files changed

+40
-34
lines changed

5 files changed

+40
-34
lines changed

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/_utils/getContractPageSidebarLinks.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export function getContractPageSidebarLinks(data: {
2727
{
2828
label: "Cross Chain",
2929
href: `${layoutPrefix}/cross-chain`,
30-
hide: !data.metadata.isModularCore,
3130
exactMatch: true,
3231
},
3332
{

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/data-table.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,14 @@ export function DataTable({
9999
coreContract,
100100
modulesMetadata,
101101
initializeData,
102+
inputSalt,
102103
}: {
103104
data: CrossChain[];
104105
coreMetadata: FetchDeployMetadataResult;
105106
coreContract: ThirdwebContract;
106-
modulesMetadata: FetchDeployMetadataResult[];
107+
modulesMetadata?: FetchDeployMetadataResult[];
107108
initializeData?: `0x${string}`;
109+
inputSalt?: `0x${string}`;
108110
}) {
109111
const activeAccount = useActiveAccount();
110112
const switchChain = useSwitchActiveWalletChain();
@@ -263,7 +265,9 @@ export function DataTable({
263265
// eslint-disable-next-line no-restricted-syntax
264266
const chain = defineChain(chainId);
265267
const client = getThirdwebClient();
266-
const salt = concatHex(["0x0101", padHex("0x", { size: 30 })]).toString();
268+
const salt =
269+
inputSalt ||
270+
concatHex(["0x0101", padHex("0x", { size: 30 })]).toString();
267271

268272
await switchChain(chain);
269273

@@ -286,18 +290,18 @@ export function DataTable({
286290
chain,
287291
client,
288292
deployMetadata: coreMetadata,
289-
isCrosschain,
293+
isCrosschain: true,
290294
initializeData,
291295
salt,
292296
});
293297

294-
await verifyContract({
298+
verifyContract({
295299
address: crosschainContractAddress,
296300
chain,
297301
client,
298302
});
299303

300-
if (isCrosschain) {
304+
if (isCrosschain && modulesMetadata) {
301305
const owner = await readContract({
302306
contract: coreContract,
303307
method: "function owner() view returns (address)",

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/page.tsx

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { fetchPublishedContractsFromDeploy } from "components/contract-components/fetchPublishedContractsFromDeploy";
2-
import { notFound, redirect } from "next/navigation";
2+
import { notFound } from "next/navigation";
33
import { getContractEvents, prepareEvent } from "thirdweb";
44
import { defineChain, getChainMetadata, localhost } from "thirdweb/chains";
55
import {
@@ -42,10 +42,6 @@ export default async function Page(props: {
4242

4343
const { isModularCore } = await getContractPageMetadata(contract);
4444

45-
if (!isModularCore) {
46-
redirect(`/${params.chain_id}/${params.contractAddress}`);
47-
}
48-
4945
const originalCode = await eth_getCode(
5046
getRpcClient({
5147
client: contract.client,
@@ -90,32 +86,37 @@ export default async function Page(props: {
9086
}),
9187
);
9288

93-
const modules = await getInstalledModules({ contract });
94-
9589
const coreMetadata = (
9690
await fetchPublishedContractsFromDeploy({
9791
contract,
9892
client: contract.client,
9993
})
10094
).at(-1) as FetchDeployMetadataResult;
101-
const modulesMetadata = (await Promise.all(
102-
modules.map(async (m) =>
103-
(
104-
await fetchPublishedContractsFromDeploy({
105-
contract: getContract({
106-
chain: contract.chain,
95+
96+
let modulesMetadata: FetchDeployMetadataResult[] | undefined;
97+
98+
if (isModularCore) {
99+
const modules = await getInstalledModules({ contract });
100+
101+
modulesMetadata = (await Promise.all(
102+
modules.map(async (m) =>
103+
(
104+
await fetchPublishedContractsFromDeploy({
105+
contract: getContract({
106+
chain: contract.chain,
107+
client: contract.client,
108+
address: m.implementation,
109+
}),
107110
client: contract.client,
108-
address: m.implementation,
109-
}),
110-
client: contract.client,
111-
})
112-
).at(-1),
113-
),
114-
)) as FetchDeployMetadataResult[];
111+
})
112+
).at(-1),
113+
),
114+
)) as FetchDeployMetadataResult[];
115+
}
115116

116117
const ProxyDeployedEvent = prepareEvent({
117118
signature:
118-
"event ProxyDeployed(address indexed implementation, address proxy, address indexed deployer, bytes data)",
119+
"event ProxyDeployed(address indexed implementation, address indexed proxy, address indexed deployer, bytes32 inputSalt, bytes data)",
119120
});
120121

121122
const twCloneFactoryContract = await getDeployedCloneFactoryContract({
@@ -139,6 +140,7 @@ export default async function Page(props: {
139140
coreMetadata={coreMetadata}
140141
modulesMetadata={modulesMetadata}
141142
initializeData={event?.args.data}
143+
inputSalt={event?.args.inputSalt}
142144
data={chainsDeployedOn}
143145
coreContract={contract}
144146
/>

packages/thirdweb/src/contract/deployment/deploy-via-autofactory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ export function prepareAutoFactoryDeployTransaction(
4444
? args.salt.startsWith("0x") && args.salt.length === 66
4545
? (args.salt as `0x${string}`)
4646
: keccakId(args.salt)
47-
: toHex(blockNumber, {
48-
size: 32,
49-
});
47+
: (`0x0101${toHex(blockNumber, {
48+
size: 30,
49+
}).replace(/^0x/, "")}` as `0x${string}`);
5050

5151
if (args.isCrosschain) {
5252
if (!args.initializeData || !args.implementationAddress) {

packages/thirdweb/src/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployed.ts

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)