@silvana-one/abi
Version:
Silvana ABI Experimental Library
59 lines • 2.24 kB
JavaScript
import { fetchAccount } from "o1js";
/**
* Fetches the Mina account for a given public key with error handling
* @param params the parameters for fetching the account
* @param params.publicKey the public key of the account
* @param params.tokenId the token id of the account
* @param params.force whether to force the fetch - use it only if you are sure the account exists
* @returns the account object
*/
export async function fetchMinaAccount(params) {
const { publicKey, tokenId, force = false } = params;
const timeout = 1000 * 60 * 3; // 3 minutes
let attempt = 0;
const startTime = Date.now();
let result = { account: undefined };
while (Date.now() - startTime < timeout) {
try {
const result = await fetchAccount({
publicKey,
tokenId,
});
return result.account;
}
catch (error) {
if (force === true)
console.log("Error in fetchMinaAccount:", {
error,
publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
tokenId: tokenId?.toString(),
force,
});
else {
console.log("fetchMinaAccount error", {
error,
publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
tokenId: tokenId?.toString(),
force,
});
return result.account;
}
}
attempt++;
await sleep(1000 * 6 * attempt); // to handle rate limit we increase the interval
}
if (force === true)
throw new Error(`fetchMinaAccount timeout
${{
publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(),
tokenId: tokenId?.toString(),
force,
}}`);
else
console.log("fetchMinaAccount timeout", typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId?.toString(), force);
return result.account;
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
//# sourceMappingURL=fetch.js.map