Skip to content

Commit a90b184

Browse files
committed
support for multiple verifiers [continue]
1 parent 371f7e3 commit a90b184

37 files changed

Lines changed: 849 additions & 681 deletions

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@mui/material": "^5.10.10",
2222
"@orbs-network/ton-access": "^2.3.3",
2323
"@tact-lang/compiler": "^1.1.2",
24-
"@tanstack/react-query": "^4.13.0",
24+
"@tanstack/react-query": "^5.90.12",
2525
"@ton-community/contract-verifier-sdk": "1.4.0",
2626
"@ton-community/func-js": "^0.3.0",
2727
"@tonconnect/ui-react": "^1.0.0-beta.6",

src/components/AddSourcesBlock.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ const ContentBox = styled(Box)({
1717
padding: "15px 24px",
1818
});
1919

20-
export function AddSourcesBlock() {
20+
export function AddSourcesBlock({ contractAddress }: { contractAddress: string }) {
2121
const walletAddress = useTonAddress();
2222
const { hasFiles } = useFileStore();
2323
const { step, proceedToPublish, toggleSection, currentSection } = usePublishStore();
24-
const { mutate, data, error, isLoading, compileStatus } = useSubmitSources();
24+
const { mutate, data, error, isLoading, compileStatus } = useSubmitSources(contractAddress);
2525

2626
const canPublish = !!data?.result?.msgCell;
2727

@@ -40,11 +40,11 @@ export function AddSourcesBlock() {
4040
<>
4141
{hasFiles() && (
4242
<>
43-
<FileTable />
44-
<CompilerSettings />
43+
<FileTable canPublish={canPublish} />
44+
<CompilerSettings canPublish={canPublish} />
4545
</>
4646
)}
47-
{(data || error) && <CompileOutput />}
47+
{(data || error) && <CompileOutput contractAddress={contractAddress} />}
4848
{hasFiles() && (
4949
<CenteringBox sx={{ justifyContent: "center" }} mt={3} mb="9px">
5050
{!walletAddress ? (

src/components/CompileOutput.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ export const ErrorRowValue = styled(DataRowValue)({
5252
fontWeight: 400,
5353
});
5454

55-
export function CompileOutput() {
56-
const { data: submitSourcesData, error } = useSubmitSources();
55+
export function CompileOutput({ contractAddress }: { contractAddress: string }) {
56+
const { data: submitSourcesData, error } = useSubmitSources(contractAddress);
5757
const { data: contractInfoData } = useLoadContractInfo();
5858

5959
const compileResult = submitSourcesData?.result?.compileResult;

src/components/CompilerBlock.tsx

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,90 @@
11
import compilerIcon from "../assets/compiler.svg";
22
import { DataBlock, DataRowItem } from "./DataBlock";
3-
import { useLoadContractProof } from "../lib/useLoadContractProof";
4-
3+
import {
4+
findProofByVerifierName,
5+
getFirstAvailableProof,
6+
useLoadContractProof,
7+
} from "../lib/useLoadContractProof";
58
import TimeAgo from "javascript-time-ago";
69
import en from "javascript-time-ago/locale/en";
7-
import { funcVersionToLink, fiftVersionToLink, tactVersionToLink, tolkVersionToLink, dropPatchVersionZero } from "../utils/linkUtils";
10+
import {
11+
funcVersionToLink,
12+
fiftVersionToLink,
13+
tactVersionToLink,
14+
tolkVersionToLink,
15+
dropPatchVersionZero,
16+
} from "../utils/linkUtils";
817
import {
918
FiftCliCompileSettings,
1019
FuncCompilerSettings,
1120
TactCliCompileSettings,
1221
TolkCliCompileSettings,
1322
} from "@ton-community/contract-verifier-sdk";
23+
import { useLoadVerifierRegistryInfo } from "../lib/useLoadVerifierRegistryInfo";
1424

1525
TimeAgo.addDefaultLocale(en);
1626

1727
export function CompilerBlock() {
18-
const { data } = useLoadContractProof();
28+
const { data: proofs } = useLoadContractProof();
29+
const { data: verifierRegistry } = useLoadVerifierRegistryInfo();
30+
const proof =
31+
findProofByVerifierName(proofs, verifierRegistry, "verifier.ton.org") ??
32+
getFirstAvailableProof(proofs);
1933

20-
const compilerSettings = data!.compilerSettings;
34+
const compilerSettings = proof?.compilerSettings;
2135

2236
const dataRows: DataRowItem[] = [];
2337

24-
if (data) {
38+
if (proof) {
2539
dataRows.push({
2640
title: "Compiler",
27-
value: `${data!.compiler!}`,
41+
value: `${proof.compiler ?? ""}`,
2842
});
2943

30-
if (data.compiler === "func") {
44+
if (proof.compiler === "func") {
3145
const funcVersion = (compilerSettings as FuncCompilerSettings)?.funcVersion;
3246
dataRows.push({
3347
title: "Version",
3448
value: funcVersion,
3549
color: "#0088CC",
3650
customLink: funcVersion && funcVersionToLink(funcVersion),
3751
});
38-
} else if (data.compiler === "fift") {
52+
} else if (proof.compiler === "fift") {
3953
const fiftVersion = (compilerSettings as FiftCliCompileSettings)?.fiftVersion;
4054
dataRows.push({
4155
title: "Version",
4256
value: fiftVersion,
4357
color: "#0088CC",
4458
customLink: fiftVersionToLink(fiftVersion),
4559
});
46-
} else if (data.compiler === "tact") {
60+
} else if (proof.compiler === "tact") {
4761
const tactVersion = (compilerSettings as TactCliCompileSettings)?.tactVersion;
4862
dataRows.push({
4963
title: "Version",
5064
value: tactVersion,
5165
color: "#0088CC",
5266
customLink: tactVersionToLink(tactVersion),
5367
});
54-
} else if (data.compiler === "tolk") {
55-
const tolkVersion = (compilerSettings as TolkCliCompileSettings)?.tolkVersion;
56-
dataRows.push({
57-
title: "Version",
58-
value: dropPatchVersionZero(tolkVersion),
59-
color: "#0088CC",
60-
customLink: tolkVersionToLink(tolkVersion),
61-
});
68+
} else if (proof.compiler === "tolk") {
69+
const tolkVersion = (compilerSettings as TolkCliCompileSettings)?.tolkVersion;
70+
dataRows.push({
71+
title: "Version",
72+
value: dropPatchVersionZero(tolkVersion),
73+
color: "#0088CC",
74+
customLink: tolkVersionToLink(tolkVersion),
75+
});
6276
}
63-
if (data.compiler == "func") {
77+
if (proof.compiler === "func") {
6478
dataRows.push({
6579
title: "Command",
66-
// @ts-ignore
67-
value: compilerSettings?.commandLine,
80+
value: (compilerSettings as FuncCompilerSettings)?.commandLine,
6881
showIcon: true,
6982
tooltip: true,
7083
});
7184
}
7285
dataRows.push({
7386
title: "Verified on",
74-
value: data.verificationDate?.toLocaleDateString() ?? "",
87+
value: proof.verificationDate?.toLocaleDateString() ?? "",
7588
});
7689
}
7790

src/components/CompilerSettings.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import { useRemoteConfig } from "../lib/useRemoteConfig";
2121
import { tactVersionToLink } from "../utils/linkUtils";
2222

23-
function CompilerSettings() {
23+
function CompilerSettings({ canPublish }: { canPublish: boolean }) {
2424
const {
2525
compilerSettings,
2626
setOverrideCommandLine,
@@ -30,15 +30,13 @@ function CompilerSettings() {
3030
compiler,
3131
setCompiler,
3232
} = useCompilerSettingsStore();
33-
const { data } = useSubmitSources();
3433
const theme = useTheme();
3534
const isSmallScreen = useMediaQuery(theme.breakpoints.down("md"));
3635

37-
const canPublish = !!data?.result?.msgCell;
38-
39-
const {
40-
data: { funcVersions, tactVersions, tolkVersions },
41-
} = useRemoteConfig();
36+
const { data: remoteConfig } = useRemoteConfig();
37+
const funcVersions = remoteConfig?.funcVersions ?? [];
38+
const tactVersions = remoteConfig?.tactVersions ?? [];
39+
const tolkVersions = remoteConfig?.tolkVersions ?? [];
4240

4341
return (
4442
<Box mt={4}>

src/components/ContractBlock.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useContractAddress } from "../lib/useContractAddress";
33
import { useLoadContractInfo } from "../lib/useLoadContractInfo";
44
import contractIcon from "../assets/contract.svg";
55
import { DataBlock, DataRowItem } from "./DataBlock";
6-
import { useLoadContractProof } from "../lib/useLoadContractProof";
6+
import { hasAnyOnchainProof, useLoadContractProof } from "../lib/useLoadContractProof";
77
import { workchainForAddress } from "../lib/workchainForAddress";
88
import { formatBalance } from "../utils/numberUtils";
99
import { useEffect } from "react";
@@ -102,7 +102,7 @@ export function ContractBlock() {
102102
icon={contractIcon}
103103
dataRows={dataRows}
104104
isLoading={isLoading}
105-
isFlexibleWrapper={!!proofData?.hasOnchainProof}
105+
isFlexibleWrapper={hasAnyOnchainProof(proofData)}
106106
/>
107107
);
108108
}

src/components/ContractSourceCode.tsx

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,9 @@ import useNotification from "../lib/useNotification";
1414
import { Getters } from "./Getters";
1515
import { useLoadVerifierRegistryInfo } from "../lib/useLoadVerifierRegistryInfo";
1616
import { useContractAddress } from "../lib/useContractAddress";
17-
import { useLoadContractInfo } from "../lib/useLoadContractInfo";
18-
import { useQueries } from "@tanstack/react-query";
19-
import { loadProofData } from "../lib/useLoadContractProof";
20-
import { useIsTestnet } from "./TestnetBar";
2117
import { useSyncGetters } from "../lib/getter/useGetters";
2218
import { SourcesData } from "@ton-community/contract-verifier-sdk";
19+
import { ContractProofData, useLoadContractProof } from "../lib/useLoadContractProof";
2320

2421
const TitleWrapper = styled(CenteringBox)({
2522
justifyContent: "space-between",
@@ -49,8 +46,6 @@ const SourceCodeTabs = styled(Tabs)({
4946
},
5047
});
5148

52-
type ProofData = Partial<SourcesData> & { hasOnchainProof: boolean };
53-
5449
type DomIds = {
5550
containerId: string;
5651
filesId: string;
@@ -63,41 +58,32 @@ type TabConfig =
6358
id: string;
6459
label: string;
6560
type: "sources";
66-
proof: ProofData;
61+
proof: ContractProofData;
6762
domIds: DomIds;
6863
getterKey: string;
6964
}
7065
| {
7166
id: string;
7267
label: string;
7368
type: "getters";
74-
proof: ProofData;
69+
proof: ContractProofData;
7570
getterKey: string;
7671
};
7772

7873
function ContractSourceCode() {
7974
const { contractAddress } = useContractAddress();
80-
const { data: contractInfo } = useLoadContractInfo(contractAddress);
8175
const { data: verifierRegistry } = useLoadVerifierRegistryInfo();
76+
const { data: proofMap } = useLoadContractProof();
8277
const [value, setValue] = useState(0);
8378
const isExtraSmallScreen = useMediaQuery("(max-width: 450px)");
8479
const modifiedCodeBlock = useMediaQuery("(max-width: 600px)");
8580
const { showNotification } = useNotification();
86-
const isTestnet = useIsTestnet();
8781

8882
const verifierEntries = useMemo(() => Object.entries(verifierRegistry ?? {}), [verifierRegistry]);
8983

90-
const proofQueries = useQueries({
91-
queries: verifierEntries.map(([id, config]) => ({
92-
queryKey: ["verifierProof", contractAddress, id, isTestnet],
93-
enabled: !!contractAddress && !!contractInfo?.codeCellToCompileBase64,
94-
queryFn: () => loadProofData(contractInfo!.codeCellToCompileBase64, config.name, isTestnet),
95-
})),
96-
});
97-
9884
const verifierProofs = useMemo(
9985
() =>
100-
verifierEntries.map(([id, config], index) => {
86+
verifierEntries.map(([id, config]) => {
10187
const safeKey = `${contractAddress ?? "unknown"}-${id}`.replace(/[^a-zA-Z0-9]/g, "-");
10288
return {
10389
id,
@@ -108,10 +94,10 @@ function ContractSourceCode() {
10894
filesId: `${safeKey}-files`,
10995
contentId: `${safeKey}-content`,
11096
},
111-
proof: proofQueries[index]?.data as ProofData | undefined,
97+
proof: proofMap?.get(id),
11298
};
11399
}),
114-
[verifierEntries, proofQueries, contractAddress],
100+
[verifierEntries, proofMap, contractAddress],
115101
);
116102

117103
const tabs = useMemo<TabConfig[]>(() => {
@@ -265,7 +251,7 @@ function VerifierGettersPanel({
265251
isVisible,
266252
}: {
267253
getterKey: string;
268-
proof: ProofData;
254+
proof: ContractProofData;
269255
isVisible: boolean;
270256
}) {
271257
useSyncGetters(getterKey, proof?.files);

0 commit comments

Comments
 (0)