UNPKG

dop-stick

Version:

Source control tooling for versionable-upgradeable smart contracts

97 lines 3.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSigner = exports.getProviderForCacheConfig = exports.createProviderAndGetAddress = exports.getProvider = void 0; const ethers_1 = require("ethers"); const logger_1 = require("./logsAndMetrics/core/logger"); // New function that only returns provider function getProvider(config) { // Try to get RPC URL from config or environment variable const rpcUrl = (config === null || config === void 0 ? void 0 : config.rpcUrl) || process.env.RPC_URL; if (!rpcUrl) { throw new Error('RPC URL is required. Provide it through config or set RPC_URL environment variable'); } // Log which source was used if (!(config === null || config === void 0 ? void 0 : config.rpcUrl) && process.env.RPC_URL) { logger_1.Logger.info('Using RPC URL from environment variable'); } return new ethers_1.ethers.providers.JsonRpcProvider(rpcUrl); } exports.getProvider = getProvider; function createProviderAndGetAddress(config) { // Try to get values from config, then environment variables const rpcUrl = config.rpcUrl || process.env.RPC_URL; const diamondAddress = config.diamondAddress || process.env.DIAMOND_ADDRESS; if (!rpcUrl) { throw new Error('RPC URL is required. Provide it through config or set RPC_URL environment variable'); } if (!diamondAddress) { throw new Error('Diamond address is required. Provide it through config or set DIAMOND_ADDRESS environment variable'); } // Log which source was used if (!config.rpcUrl && process.env.RPC_URL) { logger_1.Logger.info('Using RPC URL from environment variable'); } if (!config.diamondAddress && process.env.DIAMOND_ADDRESS) { logger_1.Logger.info('Using Diamond address from environment variable'); } const provider = new ethers_1.ethers.providers.JsonRpcProvider(rpcUrl); return { provider, diamondAddress }; } exports.createProviderAndGetAddress = createProviderAndGetAddress; function formatProviderError(err) { if (err instanceof Error) { return { message: err.message, code: err.code, reason: err.reason, data: err.data }; } return { message: 'Unknown error occurred', data: err }; } async function getProviderForCacheConfig(config) { if (config.provider instanceof ethers_1.ethers.providers.JsonRpcProvider) { return config.provider; } if (config.rpcUrl) { const provider = new ethers_1.ethers.providers.JsonRpcProvider(config.rpcUrl); // Verify connection try { await provider.getNetwork(); return provider; } catch (err) { const error = formatProviderError(err); logger_1.Logger.error('Provider connection failed:', { rpcUrl: config.rpcUrl, ...error }); throw new Error(`Failed to connect to RPC URL ${config.rpcUrl}: ${error.message}`); } } // Default to local provider const localProvider = new ethers_1.ethers.providers.JsonRpcProvider(); try { await localProvider.getNetwork(); return localProvider; } catch (err) { const error = formatProviderError(err); logger_1.Logger.error('Local provider connection failed:', error); throw new Error(`Failed to connect to local provider: ${error.message}`); } } exports.getProviderForCacheConfig = getProviderForCacheConfig; // Helper function to get signer async function getSigner() { const provider = getProvider(); if (!process.env.PRIVATE_KEY) { throw new Error('Missing PRIVATE_KEY environment variable'); } return new ethers_1.ethers.Wallet(process.env.PRIVATE_KEY, provider); } exports.getSigner = getSigner; //# sourceMappingURL=provider.js.map