@silvana-one/api
Version:
Silvana API
79 lines • 3.18 kB
JavaScript
export async function getCurrentZekoSlot(chain = "zeko") {
try {
const response = await fetch("https://api.minascan.io/node/devnet/v1/graphql", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query RuntimeConfig {
runtimeConfig
}
`,
variables: {},
}),
});
if (!response.ok) {
console.error(`Failed to fetch runtime config: ${response.status} ${response.statusText} for chain ${chain}`);
return undefined;
}
const { data: { runtimeConfig }, } = await response.json();
if (!runtimeConfig) {
console.error(`No runtime config found for chain ${chain}`);
return undefined;
}
if (!runtimeConfig.proof?.fork?.global_slot_since_genesis ||
typeof runtimeConfig.proof.fork.global_slot_since_genesis !== "number") {
console.error(`No fork slot found for chain ${chain}`);
return undefined;
}
if (!runtimeConfig.genesis?.genesis_state_timestamp ||
typeof runtimeConfig.genesis.genesis_state_timestamp !== "string") {
console.error(`No genesis timestamp found for chain ${chain}`);
return undefined;
}
const currentTimestamp = Date.now() / 1000;
const forkSlot = runtimeConfig?.proof?.fork?.global_slot_since_genesis;
const genesisTimestamp = Date.parse(runtimeConfig?.genesis?.genesis_state_timestamp) / 1000;
// console.log("currentTimestamp", currentTimestamp);
// console.log("forkSlot", forkSlot);
// console.log("genesisTimestamp", genesisTimestamp);
return Math.floor(forkSlot + (currentTimestamp - genesisTimestamp) / 180);
}
catch (error) {
console.error(`Failed to fetch runtime config: ${error?.message ?? error} for chain ${chain}`);
return undefined;
}
}
/// txn.setFee(await fetchZekoFee(...));
export async function fetchZekoFee(params) {
const { weight, buffer = 0.2, url = "https://devnet.zeko.io/graphql", } = params;
try {
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query FeePerWeight($weight: Int!) {
feePerWeightUnit(weight: $weight)
}
`,
variables: { weight },
}),
});
if (!response.ok) {
console.error("fetchZekoFee: Invalid response from Zeko", response.status, response.statusText);
return undefined;
}
const { data } = await response.json();
if (!data || !data.feePerWeightUnit) {
console.error("fetchZekoFee: Invalid response from Zeko", data);
return undefined;
}
return Math.ceil(data.feePerWeightUnit) + buffer * 10e8;
}
catch (error) {
console.error("fetchZekoFee error", error?.message ?? error);
return undefined;
}
}
//# sourceMappingURL=zeko.js.map