UNPKG

@broxus/js-bridge-essentials

Version:

Bridge JavaScript Essentials library

168 lines (167 loc) 7.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EvmMultiVaultUtils = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const contracts_1 = require("../../models/evm-multi-vault/contracts"); class EvmMultiVaultUtils { static deposit(connection, vaultAddress, params) { const req = (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.deposit({ amount: params.amount, expected_evers: params.expectedEvers, payload: params.payload, recipient: params.recipient, token: params.token, }); return req.send(); } static forceWithdraw(connection, vaultAddress, pendingWithdrawalIds) { const req = (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.forceWithdraw(pendingWithdrawalIds); return req.send(); } static bridge(connection, vaultAddress) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.bridge().call(); } /** * Get EVM token meta in MultiVault by the given vault and EVM-like token addresses * @param {Web3} connection * @param {string} vaultAddress - vault address (eg. 0x00...0000) * @param {string} tokenAddress - token address (eg. 0x00...0000) */ static tokens(connection, vaultAddress, tokenAddress) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.tokens(tokenAddress).call(); } /** * Get EVM native token address in MultiVault by the given vault address and TVM-like token addresses * @param {Web3} connection * @param {string} vaultAddress - vault address (eg. 0x00...0000) * @param {Address | string} tokenAddress - token address (eg. 0:00...0000) */ static getNativeToken(connection, vaultAddress, tokenAddress) { const [wid, addr] = tokenAddress.toString().split(':'); return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.getNativeToken(wid, `0x${addr}`).call(); } /** * Get TVM native token address in MultiVault by the given vault address and EVM-like token address * @param {Web3} connection * @param {string} vaultAddress - vault address (eg. 0x00...0000) * @param {string} tokenAddress - token address (eg. 0x00...0000) */ static async natives(connection, vaultAddress, tokenAddress) { const result = await (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.natives(tokenAddress).call(); return result !== undefined ? `${result.wid}:${(0, bignumber_js_1.default)(result.addr).toString(16).padStart(64, '0')}` : undefined; } static async getAlienFees(connection, vaultAddress) { try { const contract = (0, contracts_1.multiVaultContract)(connection, vaultAddress); const batch = new contract.BatchRequest(); const abi = [ { name: 'depositFee', type: 'uint256', }, { name: 'withdrawFee', type: 'uint256', }, ]; batch.add({ method: 'eth_call', params: [{ data: contract.methods.defaultAlienDepositFee().encodeABI(), to: vaultAddress, }, 'latest'], }); batch.add({ method: 'eth_call', params: [{ data: contract.methods.defaultAlienWithdrawFee().encodeABI(), to: vaultAddress, }, 'latest'], }); const res = await batch.execute({ timeout: 30_000 }); return res.reduce((acc, r, idx) => { if (typeof r.result === 'string') { const decoded = connection.eth.abi.decodeParameter(abi[idx].type, r.result); acc[abi[idx].name] = BigInt(decoded).toString(); return acc; } throw new Error(`Failed to parse ${abi[idx].name} for token ${vaultAddress}. Given result is not a string`); }, {}); } catch { const [depositFee, withdrawFee] = await Promise.all([ (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.defaultAlienDepositFee().call(), (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.defaultAlienWithdrawFee().call(), ]); return { depositFee: BigInt(depositFee).toString(), withdrawFee: BigInt(withdrawFee).toString(), }; } } static async getNativeFees(connection, vaultAddress) { try { const contract = (0, contracts_1.multiVaultContract)(connection, vaultAddress); const batch = new contract.BatchRequest(); const abi = [ { name: 'depositFee', type: 'uint256', }, { name: 'withdrawFee', type: 'uint256', }, ]; batch.add({ method: 'eth_call', params: [{ data: contract.methods.defaultAlienDepositFee().encodeABI(), to: vaultAddress, }, 'latest'], }); batch.add({ method: 'eth_call', params: [{ data: contract.methods.defaultAlienWithdrawFee().encodeABI(), to: vaultAddress, }, 'latest'], }); const res = await batch.execute({ timeout: 30_000 }); return res.reduce((acc, r, idx) => { if (typeof r.result === 'string') { const decoded = connection.eth.abi.decodeParameter(abi[idx].type, r.result); acc[abi[idx].name] = BigInt(decoded).toString(); return acc; } throw new Error(`Failed to parse ${abi[idx].name} for token ${vaultAddress}. Given result is not a string`); }, {}); } catch { const [depositFee, withdrawFee] = await Promise.all([ (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.defaultNativeDepositFee().call(), (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.defaultNativeWithdrawFee().call(), ]); return { depositFee: BigInt(depositFee).toString(), withdrawFee: BigInt(withdrawFee).toString(), }; } } static withdrawalLimits(connection, vaultAddress, tokenAddress) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.withdrawalLimits(tokenAddress).call(); } static withdrawalIds(connection, vaultAddress, withdrawalId) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.withdrawalIds(withdrawalId).call(); } static pendingWithdrawals(connection, vaultAddress, recipient, id) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.pendingWithdrawals(recipient, id).call(); } static pendingWithdrawalsPerUser(connection, vaultAddress, recipient) { return (0, contracts_1.multiVaultContract)(connection, vaultAddress).methods.pendingWithdrawalsPerUser(recipient).call(); } } exports.EvmMultiVaultUtils = EvmMultiVaultUtils;