UNPKG

barterjs-sdk

Version:
75 lines (74 loc) 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BarterBridge = void 0; const chains_1 = require("../../constants/chains"); const utils_1 = require("../../utils"); const mcsUtils_1 = require("../../libs/utils/mcsUtils"); class BarterBridge { /** * The BridgeToken method is used to bridge token from one chain to another. * see {@link BridgeRequestParam} for detail * @param token source token, aka token that user provide * @param toChainId target chain id * @param toAddress target chain receiving address * @param amount amount to bridge, in minimal uint. For example wei in Ethereum, yocto in Near * @param signer ethers.js signer, must provide when src chain is EVM chain * @param nearConfig Near config file, must provide when src chain is Near * @return BN for gas estimation, ContractCallReceipt for actual contract invocation */ async bridgeToken({ fromAddress, fromToken, toChainId, toAddress, amount, options, }) { // check validity of toAddress according to toChainId toAddress = (0, utils_1.validateAndParseAddressByChainId)(toAddress, toChainId); // if src chain is evm chain, signer must be provided if ((0, chains_1.IS_EVM)(fromToken.chainId) && options.signerOrProvider == undefined) { throw new Error(`Signer must be provided for EVM blockchains`); } // if src chain is near chain, near network config must be provided if (chains_1.ChainId.NEAR_TESTNET == fromToken.chainId && options.nearProvider == undefined) { throw new Error(`Network config must be provided for NEAR blockchain`); } // create mcs instance base on src token chainId. const mcs = (0, mcsUtils_1.createMCSInstance)(fromToken.chainId, options); let result; if ((0, chains_1.IS_NEAR)(toChainId)) { toAddress = (0, utils_1.getHexAddress)(toAddress, toChainId, false); } if (fromToken.isNative) { // if input token is Native coin, call transferOutNative method result = await mcs.doTransferOutNative(fromAddress, toAddress, toChainId.toString(), amount, { gas: options.gas, }); } else { result = await mcs.doTransferOutToken(fromAddress, fromToken.address, amount, toAddress, toChainId.toString(), { gas: options.gas, }); } return result; } async gasEstimateBridgeToken({ fromAddress, fromToken, toChainId, toAddress, amount, options, }) { // check validity of toAddress according to toChainId toAddress = (0, utils_1.validateAndParseAddressByChainId)(toAddress, toChainId); // if src chain is evm chain, signer must be provided if ((0, chains_1.IS_EVM)(fromToken.chainId) && options.signerOrProvider == undefined) { throw new Error(`Provider must be provided`); } // near doesn't provide gas estimation yet // create mcs instance base on src token chainId. const mcs = (0, mcsUtils_1.createMCSInstance)(fromToken.chainId, options); if ((0, chains_1.IS_NEAR)(toChainId)) { toAddress = (0, utils_1.getHexAddress)(toAddress, toChainId, false); } let gas; // if input token is Native coin, call transferOutNative method if (fromToken.isNative) { gas = await mcs.gasEstimateTransferOutNative(fromAddress, toAddress, toChainId.toString(), amount); } else { gas = await mcs.gasEstimateTransferOutToken(fromAddress, fromToken.address, amount, toAddress, toChainId.toString()); } return gas; } } exports.BarterBridge = BarterBridge;