UNPKG

@kaiachain/kss-bridges-celer

Version:
68 lines 4.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.poolTransfer = void 0; const jsdom_1 = require("jsdom"); const { window } = new jsdom_1.JSDOM(); global.XMLHttpRequest = window.XMLHttpRequest; const dotenv_1 = require("dotenv"); (0, dotenv_1.config)(); const core_1 = require("../core"); const core_2 = require("../core"); const Bridge_json_1 = __importDefault(require("../core/contract/abi/Bridge.sol/Bridge.json")); const core_3 = require("../core"); async function poolTransfer(CBRIDGE_GATEWAY_URL, WALLET_ADDRESS, PRIVATE_KEY, SRC_CHAIN_ID, DST_CHAIN_ID, SRC_CHAIN_RPC, TOKEN_SYMBOL, AMOUNT, SLIPPAGE_TOLERANCE, CONFIRMATIONS) { console.log("0. get transfer config for transaction"); const transferConfigs = await (0, core_1.getTransferConfigs)(CBRIDGE_GATEWAY_URL); const bridgeAddress = (0, core_2.getBridgeContractAddress)(transferConfigs, SRC_CHAIN_ID); if (!bridgeAddress) throw new Error('SRC_CHAIN_ID not yet supported by cBridge'); const bridgeContract = (0, core_2.getContract)(bridgeAddress || '', Bridge_json_1.default.abi, SRC_CHAIN_RPC, PRIVATE_KEY); // check if TOKEN_SYMBOL is present in both chain tokens list const isPresentInSrc = !!(transferConfigs.chain_token[SRC_CHAIN_ID]?.token?.filter(chainToken => chainToken?.token?.symbol.toUpperCase() == TOKEN_SYMBOL.toUpperCase()).length > 0); const isPresentInDst = !!(transferConfigs.chain_token[DST_CHAIN_ID]?.token?.filter(chainToken => chainToken?.token?.symbol.toUpperCase() == TOKEN_SYMBOL.toUpperCase()).length > 0); if (!(isPresentInSrc && isPresentInDst)) { throw new Error("Please choose valid TOKEN_SYMBOL that is supported by given pair of chains"); } const { transferToken, value, toChain, nonce, fromChain } = (0, core_2.getTransferObject)(transferConfigs, SRC_CHAIN_ID, DST_CHAIN_ID, TOKEN_SYMBOL, AMOUNT); /**Check user's on-chain token allowance for cBridge contract. * If the allowance is not enough for user token transfer, trigger the corresponding on-chain approve flow */ console.log("1. Checking Allowance of tokens to cBridge contract"); const allowance = await (0, core_2.getAllowance)(WALLET_ADDRESS, bridgeAddress || '', transferToken?.token?.address || '', fromChain?.id, transferToken?.token?.symbol, SRC_CHAIN_RPC, transferConfigs.pegged_pair_configs); let needToApprove = false; const isNative = transferConfigs.chains.filter(chain => (chain.id == SRC_CHAIN_ID && chain.gas_token_symbol.toUpperCase() == TOKEN_SYMBOL.toUpperCase())).length > 0; needToApprove = (0, core_2.checkApprove)(allowance, AMOUNT, transferToken?.token, isNative); if (needToApprove) { console.log("Approving the tokens"); const approveTx = await (0, core_2.approve)(bridgeAddress || '', SRC_CHAIN_RPC, PRIVATE_KEY, transferToken?.token, AMOUNT); if (!approveTx) { throw new Error(`Cannot approve the token`); } else { needToApprove = false; } console.log("approveTx hash: " + approveTx.hash); console.log("Waiting for the confirmations of approveTx"); const confirmationReceipt = await approveTx.wait(CONFIRMATIONS); // instead of waiting for fixed time, wait for some confirmations console.log(`approveTx confirmed upto ${confirmationReceipt.confirmations} confirmations`); } const transferId = (0, core_2.getTransferId)(WALLET_ADDRESS, transferToken?.token?.address, value, toChain?.id, nonce, fromChain?.id); console.log("TransferId:", transferId); console.log("2. make an estimation for this transfer"); const estimateRequest = (0, core_1.estimateAmt)(SRC_CHAIN_ID, DST_CHAIN_ID, TOKEN_SYMBOL, WALLET_ADDRESS, SLIPPAGE_TOLERANCE, AMOUNT); console.log("3. submit an on-chain send transaction"); const poolTransferTx = await (0, core_1.poolBasedTransfer)(bridgeContract, CBRIDGE_GATEWAY_URL, WALLET_ADDRESS, estimateRequest, { transferToken, fromChain, toChain, value, nonce }, SRC_CHAIN_RPC, PRIVATE_KEY, isNative); if (!poolTransferTx) throw new Error("Cannot submit transaction"); console.log("poolTransferTx hash: " + poolTransferTx.hash); console.log("Waiting for the confirmations of poolTransferTx"); const confirmationReceipt = await poolTransferTx.wait(CONFIRMATIONS); // instead of waiting for fixed time, wait for some confirmations console.log(`poolTransferTx confirmed upto ${confirmationReceipt.confirmations} confirmations`); console.log("4. getTransferStatus for this transaction until the transfer is complete or needs a refund"); (0, core_3.statusTracker)(CBRIDGE_GATEWAY_URL, transferId); return transferId; } exports.poolTransfer = poolTransfer; //# sourceMappingURL=poolTransfer.js.map