barterjs-sdk
Version:
Barter Network SDK
75 lines (74 loc) • 3.78 kB
JavaScript
;
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;