Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 19 additions & 14 deletions src/lib/useLoadLatestVerified.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
import { useQuery } from "@tanstack/react-query";

import { randomFromArray, backends } from "./useSubmitSources";
import { randomFromArray, useBackends } from "./useSubmitSources";

export function useLoadLatestVerified() {
const backends = useBackends();
const backend = randomFromArray(backends);

const { isLoading, error, data } = useQuery(["latestVerifiedContracts"], async () => {
const response = await fetch(`${backend}/latestVerified`, {
method: "GET",
});
const { isLoading, error, data } = useQuery(
["latestVerifiedContracts"],
async () => {
const response = await fetch(`${backend}/latestVerified`, {
method: "GET",
});

const latestVerified = (
(await response.json()) as {
address: string;
mainFile: string;
compiler: string;
}[]
).slice(0, 100);
const latestVerified = (
(await response.json()) as {
address: string;
mainFile: string;
compiler: string;
}[]
).slice(0, 100);

return latestVerified;
});
return latestVerified;
},
{ enabled: backends.length > 0 },
);

return { isLoading, error, data };
}
5 changes: 5 additions & 0 deletions src/lib/useOverride.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ export function useOverride() {
(async () => {
if (!walletAddress || !contractAddress) return;
if (urlParams.get("override") !== null) {
if (!!import.meta.env.VITE_OVERRIDE) {
setCanOverride(true);
return;
}

const tc = await getClient();
const admin = await getAdmin(Address.parse(window.sourcesRegistryAddress), tc);
if (admin === walletAddress) {
Expand Down
25 changes: 18 additions & 7 deletions src/lib/useRemoteConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,27 @@ export function useRemoteConfig() {
return useQuery(
["remoteConfig"],
async () => {
const { funcVersions, tactVersions, tolkVersions } = await (await fetch(configURL)).json();
const config: {
funcVersions: string[];
tactVersions: string[];
tolkVersions: string[];
backends: string[];
backendsTestnet: string[];
} = await (await fetch(configURL)).json();

setEnabled(false);

return {
funcVersions: funcVersions as string[],
tactVersions: tactVersions as string[],
tolkVersions: tolkVersions as string[],
};
return config;
},
{
enabled,
initialData: {
funcVersions: [],
tactVersions: [],
tolkVersions: [],
backends: [],
backendsTestnet: [],
},
},
{ enabled, initialData: { funcVersions: [], tactVersions: [], tolkVersions: [] } },
);
}
23 changes: 20 additions & 3 deletions src/lib/useSubmitSources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { AnalyticsAction, sendAnalyticsEvent } from "./googleAnalytics";
import create from "zustand";
import { useLoadVerifierRegistryInfo } from "./useLoadVerifierRegistryInfo";
import { useTonAddress } from "@tonconnect/ui-react";
import { useRemoteConfig } from "./useRemoteConfig";

export function randomFromArray<T>(arr: T[]) {
return arr[Math.floor(Math.random() * arr.length)];
Expand All @@ -35,9 +36,7 @@ function jsonToBlob(json: Record<string, any>): Blob {
});
}

export const backends: string[] = window.isTestnet
? import.meta.env.VITE_BACKEND_URL_TESTNET!.split(",")
: import.meta.env.VITE_BACKEND_URL!.split(",");
const isTestnet = window.isTestnet;

const useSubmitSourcesStatusStore = create<{
status: string | null;
Expand All @@ -49,6 +48,22 @@ const useSubmitSourcesStatusStore = create<{
clear: () => set({ status: null }),
}));

export function useBackends() {
const { data: remoteConfig } = useRemoteConfig();

let backends: string[] = [];

if (!!import.meta.env.VITE_BACKEND_URL_OVERRIDE) {
backends = import.meta.env.VITE_BACKEND_URL_OVERRIDE.split(",");
} else if (isTestnet) {
backends = remoteConfig.backendsTestnet;
} else {
backends = remoteConfig.backends;
}

return backends;
}

export function useSubmitSources() {
const { contractAddress } = useContractAddress();
const { data: contractInfo } = useLoadContractInfo();
Expand All @@ -57,6 +72,7 @@ export function useSubmitSources() {
const walletAddress = useTonAddress();
const { clear, setStatus, status } = useSubmitSourcesStatusStore();
const { data: verifierRegistryData } = useLoadVerifierRegistryInfo();
const backends = useBackends();

const verifierRegistryConfig = verifierRegistryData?.find((v) => v.name === window.verifierId);

Expand All @@ -68,6 +84,7 @@ export function useSubmitSources() {
if (!walletAddress) {
throw new Error("Wallet is not connected");
}
if (backends.length === 0) return;

clear();

Expand Down