@reservoir0x/relay-kit-ui
Version:
Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.
137 lines • 5.76 kB
JavaScript
;
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