Skip to content

Commit e625bc2

Browse files
aditya520KemarTitiali-behjati
authored
chore(entropy) Dyamic Fee table (#773)
* chore(entropy) Dyamic Fee table * update * update * alias viem * use entropy sdk * requested changes * updated package.json * kill me * Update solana_mainnet.json (#779) * Update solana_mainnet.json ADD JUPSOL TO DOCS * Update solana_mainnet.json --------- Co-authored-by: Ali Behjati <[email protected]> * chore(entropy) What's new (#778) * chore(entropy) What's new * update * requested changes * updated package.json * requested changes * prettier --------- Co-authored-by: KemarTiti <[email protected]> Co-authored-by: Ali Behjati <[email protected]>
1 parent e1e87de commit e625bc2

12 files changed

+3301
-2922
lines changed

abis/IEntropy.json

Lines changed: 0 additions & 820 deletions
This file was deleted.

components/EntropyApiDataFetcher.tsx

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { useEffect, useState } from "react";
2+
import * as chains from "viem-chains/chains";
3+
import { EntropyDeploymentsConfig } from "./EntropyDeploymentsConfig";
4+
import { z } from "zod";
5+
6+
const ApiChainConfigSchema = z.object({
7+
name: z.string(),
8+
network_id: z.number(),
9+
contract_addr: z.string(),
10+
reveal_delay_blocks: z.number(),
11+
gas_limit: z.number(),
12+
default_fee: z.number(),
13+
});
14+
15+
type ApiChainConfig = z.infer<typeof ApiChainConfigSchema>;
16+
17+
const entropyDeploymentsSchema = z.array(ApiChainConfigSchema);
18+
19+
export interface EntropyDeployment {
20+
address: string;
21+
delay: string;
22+
gasLimit: string;
23+
default_fee: number;
24+
rpc?: string;
25+
explorer?: string;
26+
nativeCurrency?: string;
27+
}
28+
29+
const getChainData = (network_id: number) => {
30+
return Object.values(chains).find((chain) => chain.id === network_id);
31+
};
32+
33+
const transformChainData = (
34+
chain: ApiChainConfig
35+
): [string, EntropyDeployment] => {
36+
const chainData = getChainData(chain.network_id);
37+
const configOverride = EntropyDeploymentsConfig[chain.network_id];
38+
39+
const deployment: EntropyDeployment = {
40+
address: chain.contract_addr,
41+
delay: `${chain.reveal_delay_blocks} block${
42+
chain.reveal_delay_blocks !== 1 ? "s" : ""
43+
}`,
44+
gasLimit: chain.gas_limit.toLocaleString(),
45+
default_fee: chain.default_fee,
46+
// Use config override first, then viem data, then undefined
47+
rpc: configOverride?.rpc ?? chainData?.rpcUrls?.default?.http?.[0],
48+
explorer:
49+
configOverride?.explorer ?? chainData?.blockExplorers?.default?.url,
50+
nativeCurrency:
51+
configOverride?.nativeCurrency ?? chainData?.nativeCurrency?.symbol,
52+
};
53+
54+
return [chain.name, deployment];
55+
};
56+
57+
const fetchEntropyDeployments = async (
58+
url: string
59+
): Promise<Record<string, EntropyDeployment>> => {
60+
try {
61+
const response = await fetch(url);
62+
const apiData = entropyDeploymentsSchema.parse(await response.json());
63+
64+
return Object.fromEntries(apiData.map(transformChainData));
65+
} catch (error) {
66+
console.error("Error fetching entropy deployments:", error);
67+
return {};
68+
}
69+
};
70+
71+
export function useEntropyApiData(url: string) {
72+
const [data, setData] = useState<Record<string, EntropyDeployment>>({});
73+
const [isLoading, setIsLoading] = useState(true);
74+
const [error, setError] = useState<string | null>(null);
75+
76+
useEffect(() => {
77+
setData({});
78+
setIsLoading(true);
79+
setError(null);
80+
81+
fetchEntropyDeployments(url)
82+
.then((transformedData) => {
83+
setData(transformedData);
84+
setIsLoading(false);
85+
})
86+
.catch((err) => {
87+
setError(err.message);
88+
setIsLoading(false);
89+
});
90+
}, [url]);
91+
92+
return { data, isLoading, error };
93+
}

components/EntropyDeploymentTable.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { EntropyDeployment } from "./EntropyDeployments";
1+
import { EntropyDeployment } from "./EntropyApiDataFetcher";
22
import { StyledTd } from "./Table";
33

44
const EntropyDeploymentTable = ({
@@ -24,24 +24,31 @@ const EntropyDeploymentTable = ({
2424
<tr key={name}>
2525
<StyledTd>{name}</StyledTd>
2626
<StyledTd>
27-
<a
28-
href={deployment.explorer.replace(
29-
"$ADDRESS",
30-
deployment.address
31-
)}
32-
className={
33-
"nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]"
34-
}
35-
target={"_blank"}
36-
>
27+
{deployment.explorer ? (
28+
<a
29+
href={deployment.explorer + "/address/" + deployment.address}
30+
className={
31+
"nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]"
32+
}
33+
target={"_blank"}
34+
>
35+
<code
36+
className={
37+
"nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10 "
38+
}
39+
>
40+
{deployment.address}
41+
</code>
42+
</a>
43+
) : (
3744
<code
3845
className={
3946
"nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10 "
4047
}
4148
>
4249
{deployment.address}
4350
</code>
44-
</a>
51+
)}
4552
</StyledTd>
4653
{showReveal && <StyledTd>{deployment.delay}</StyledTd>}
4754
<StyledTd>{deployment.gasLimit}</StyledTd>

0 commit comments

Comments
 (0)