UNPKG

@reservoir0x/relay-kit-ui

Version:

Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.

137 lines 5.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFeeBufferAmount = exports.calculateSvmNativeFeeBuffer = exports.calculateEvmNativeGasBuffer = void 0; const maxGasBuffer_js_1 = require("../constants/maxGasBuffer.js"); const relay_sdk_1 = require("@reservoir0x/relay-sdk"); const relay_kit_hooks_1 = require("@reservoir0x/relay-kit-hooks"); const localStorage_js_1 = require("./localStorage.js"); const fetchPromises = {}; const calculateEvmNativeGasBuffer = async (publicClient, balance, gasLimit = 400000n) => { if (!balance || balance <= 0n) { return 0n; } const defaultBuffer = maxGasBuffer_js_1.EVM_DEFAULT_FEE_WEI; try { let feeData; try { feeData = await publicClient.estimateFeesPerGas(); } catch (eip1559Error) { try { const gasPrice = await publicClient.getGasPrice(); feeData = { maxFeePerGas: gasPrice, gasPrice: gasPrice }; } catch (legacyError) { console.error('Failed to estimate gas price:', legacyError); return defaultBuffer; } } let gasPriceToUse = feeData.maxFeePerGas ?? feeData.gasPrice; if (!gasPriceToUse || gasPriceToUse <= 0n) { console.error('Invalid gas price data received:', feeData); return defaultBuffer; } if (gasPriceToUse < maxGasBuffer_js_1.MINIMUM_GAS_PRICE_WEI) { gasPriceToUse = maxGasBuffer_js_1.MINIMUM_GAS_PRICE_WEI; } const estimatedGasCost = gasPriceToUse * gasLimit; const buffer = estimatedGasCost * maxGasBuffer_js_1.EVM_GAS_BUFFER_MULTIPLIER; return buffer; } catch (error) { console.error('Error calculating EVM native gas buffer:', error); return defaultBuffer; } }; exports.calculateEvmNativeGasBuffer = calculateEvmNativeGasBuffer; const calculateSvmNativeFeeBuffer = async (chainId) => { const isEclipseChain = chainId === 9286185; const multiplier = isEclipseChain ? maxGasBuffer_js_1.ECLIPSE_FEE_BUFFER_MULTIPLIER : maxGasBuffer_js_1.SOLANA_FEE_BUFFER_MULTIPLIER; const fallbackBuffer = isEclipseChain ? maxGasBuffer_js_1.ECLIPSE_DEFAULT_FEE_WEI * maxGasBuffer_js_1.ECLIPSE_FEE_BUFFER_MULTIPLIER : maxGasBuffer_js_1.SOLANA_DEFAULT_FEE_LAMPORTS * maxGasBuffer_js_1.SOLANA_FEE_BUFFER_MULTIPLIER; try { const queryOptions = { limit: 20, originChainId: chainId }; const resp = await (0, relay_kit_hooks_1.queryRequests)(relay_sdk_1.MAINNET_RELAY_API, queryOptions); if (!resp || !Array.isArray(resp.requests) || resp.requests.length === 0) { console.warn('No valid fees found in response. Using fallback buffer.'); return fallbackBuffer; } const fees = resp.requests .map((r) => { const feeStr = r?.data?.inTxs?.[0]?.fee; try { return BigInt(feeStr); } catch { return null; } }) .filter((f) => f !== null); if (fees.length === 0) { return fallbackBuffer; } const maxFee = fees.reduce((max, current) => (current > max ? current : max), 0n); const buffer = maxFee * multiplier; return buffer; } catch (error) { console.error('Error calculating SVM native fee buffer:', error); return fallbackBuffer; } }; exports.calculateSvmNativeFeeBuffer = calculateSvmNativeFeeBuffer; const getFeeBufferAmount = async (vmType, chainId, balance, publicClient) => { const cacheKey = `${vmType}FeeBuffer:${chainId}`; const cachedBufferStr = (0, localStorage_js_1.getCacheEntry)(cacheKey); if (cachedBufferStr) { return BigInt(cachedBufferStr); } if (Object.prototype.hasOwnProperty.call(fetchPromises, cacheKey)) { return fetchPromises[cacheKey]; } let calculationPromise; if (vmType === 'evm') { if (!publicClient) { console.error('PublicClient is required for EVM fee buffer calculation.'); return maxGasBuffer_js_1.EVM_DEFAULT_FEE_WEI * maxGasBuffer_js_1.EVM_GAS_BUFFER_MULTIPLIER; } calculationPromise = (0, exports.calculateEvmNativeGasBuffer)(publicClient, balance); } else if (vmType === 'svm') { const isEclipseChain = chainId === 9286185; const fallbackBuffer = isEclipseChain ? maxGasBuffer_js_1.ECLIPSE_DEFAULT_FEE_WEI * maxGasBuffer_js_1.ECLIPSE_FEE_BUFFER_MULTIPLIER : maxGasBuffer_js_1.SOLANA_DEFAULT_FEE_LAMPORTS * maxGasBuffer_js_1.SOLANA_FEE_BUFFER_MULTIPLIER; calculationPromise = (0, exports.calculateSvmNativeFeeBuffer)(chainId).catch((error) => { console.error(`Failed to calculate SVM fee buffer for chain ${chainId}:`, error); return fallbackBuffer; }); } else { console.warn(`Unsupported VM type encountered: ${vmType}. Returning default EVM buffer.`); return maxGasBuffer_js_1.EVM_DEFAULT_FEE_WEI * maxGasBuffer_js_1.EVM_GAS_BUFFER_MULTIPLIER; } fetchPromises[cacheKey] = calculationPromise; calculationPromise .then((buffer) => { (0, localStorage_js_1.setCacheEntry)(cacheKey, buffer, 5); }) .catch((error) => { console.error(`Error processing fee buffer for ${cacheKey}:`, error); }) .finally(() => { delete fetchPromises[cacheKey]; }); return calculationPromise; }; exports.getFeeBufferAmount = getFeeBufferAmount; //# sourceMappingURL=nativeMaxAmount.js.map