provider.js•1.27 kB
/**
* Starknet Provider Utilities
*/
import { RpcProvider } from 'starknet';
// Default RPC URLs
const DEFAULT_RPC_URLS = {
mainnet: 'https://starknet-mainnet.public.blastapi.io',
sepolia: 'https://starknet-sepolia.public.blastapi.io'
};
/**
* Create a configured Starknet RPC provider
*/
export function createProvider(config) {
const network = process.env.STARKNET_NETWORK || config?.network || 'mainnet';
const nodeUrl = process.env.STARKNET_RPC_URL || config?.nodeUrl || DEFAULT_RPC_URLS[network];
return new RpcProvider({
nodeUrl
});
// Starknet addresses start with 0x and are 64 hex characters (+ 0x prefix)
const addressRegex = /^0x[0-9a-fA-F]{1,64}$/;
return addressRegex.test(address);
}
/**
* Retry helper with exponential backoff
*/
export async function retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
let lastError;
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
}
catch (error) {
lastError = error;
if (i < maxRetries - 1) {
const delay = baseDelay * Math.pow(2, i);
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}
throw lastError;
}