dop-stick
Version:
Source control tooling for versionable-upgradeable smart contracts
97 lines • 3.92 kB
JavaScript
;
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