rubic-sdk
Version:
Simplify dApp creation
118 lines • 5.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OwlToBridgeProvider = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const errors_1 = require("../../../../../common/errors");
const tokens_1 = require("../../../../../common/tokens");
const blockchain_id_1 = require("../../../../../core/blockchain/utils/blockchains-info/constants/blockchain-id");
const fake_wallet_address_1 = require("../../../../common/constants/fake-wallet-address");
const get_from_without_fee_1 = require("../../../../common/utils/get-from-without-fee");
const cross_chain_provider_1 = require("../common/cross-chain-provider");
const bridge_type_1 = require("../common/models/bridge-type");
const proxy_cross_chain_evm_trade_1 = require("../common/proxy-cross-chain-evm-facade/proxy-cross-chain-evm-trade");
const owl_to_supported_chains_1 = require("./constants/owl-to-supported-chains");
const owl_to_bridge_trade_1 = require("./owl-to-bridge-trade");
const owl_to_api_service_1 = require("./services/owl-to-api-service");
class OwlToBridgeProvider extends cross_chain_provider_1.CrossChainProvider {
constructor() {
super(...arguments);
this.type = bridge_type_1.BRIDGE_TYPE.OWL_TO_BRIDGE;
}
isSupportedBlockchain(blockchain) {
return owl_to_supported_chains_1.owlToSupportedBlockchains.some(chain => chain === blockchain);
}
async calculate(from, toToken, options) {
const fromBlockchain = from.blockchain;
const useProxy = options?.useProxy?.[this.type] ?? true;
const walletAddress = this.getWalletAddress(fromBlockchain) || fake_wallet_address_1.FAKE_WALLET_ADDRESS;
try {
const feeInfo = await this.getFeeInfo(fromBlockchain, options.providerAddress, from, useProxy);
const fromWithoutFee = (0, get_from_without_fee_1.getFromWithoutFee)(from, feeInfo.rubicProxy?.platformFee?.percent);
const pairInfo = await owl_to_api_service_1.OwlToApiService.getPairInfo(blockchain_id_1.blockchainId[from.blockchain], from.address, blockchain_id_1.blockchainId[toToken.blockchain], toToken.address);
const minAmountBN = new bignumber_js_1.default(pairInfo.min_value.ui_value);
const maxAmountBN = new bignumber_js_1.default(pairInfo.max_value.ui_value);
const swapParams = {
amount: fromWithoutFee.tokenAmount.toFixed(),
dstChainName: pairInfo.to_chain_name,
srcChainName: pairInfo.from_chain_name,
receiverAddress: options.receiverAddress || walletAddress,
tokenSymbol: pairInfo.token_name,
walletAddress
};
if (fromWithoutFee.tokenAmount.lt(minAmountBN)) {
return {
trade: this.getEmptyTrade(fromWithoutFee, toToken, feeInfo, swapParams),
error: new errors_1.MinAmountError(minAmountBN, from.symbol),
tradeType: this.type
};
}
if (fromWithoutFee.tokenAmount.gt(maxAmountBN)) {
return {
trade: this.getEmptyTrade(fromWithoutFee, toToken, feeInfo, swapParams),
error: new errors_1.MaxAmountError(maxAmountBN, from.symbol),
tradeType: this.type
};
}
const { receive_value, txs } = await owl_to_api_service_1.OwlToApiService.getSwapInfo(swapParams);
const to = new tokens_1.PriceTokenAmount({
...toToken.asStruct,
weiAmount: new bignumber_js_1.default(receive_value.raw_value)
});
const trade = new owl_to_bridge_trade_1.OwlToBridgeTrade({
crossChainTrade: {
feeInfo,
from,
to,
gasData: await this.getGasData(from),
priceImpact: from.calculatePriceImpactPercent(to),
swapParams,
approveAddress: txs.transfer_body.to
},
providerAddress: options.providerAddress,
routePath: await this.getRoutePath(from, to),
useProxy
});
return { trade, tradeType: this.type };
}
catch (err) {
const rubicSdkError = cross_chain_provider_1.CrossChainProvider.parseError(err);
return {
trade: null,
error: rubicSdkError,
tradeType: this.type
};
}
}
async getFeeInfo(fromBlockchain, providerAddress, percentFeeToken, useProxy) {
return proxy_cross_chain_evm_trade_1.ProxyCrossChainEvmTrade.getFeeInfo(fromBlockchain, providerAddress, percentFeeToken, useProxy);
}
async getRoutePath(fromToken, toToken) {
return [{ type: 'cross-chain', provider: this.type, path: [fromToken, toToken] }];
}
getEmptyTrade(from, toToken, feeInfo, swapParams) {
const to = new tokens_1.PriceTokenAmount({
...toToken.asStruct,
tokenAmount: new bignumber_js_1.default(0)
});
const trade = new owl_to_bridge_trade_1.OwlToBridgeTrade({
crossChainTrade: {
from,
feeInfo,
to,
gasData: null,
priceImpact: 0,
swapParams,
approveAddress: ''
},
providerAddress: '',
routePath: [],
useProxy: false
});
return trade;
}
}
exports.OwlToBridgeProvider = OwlToBridgeProvider;
//# sourceMappingURL=owl-to-bridge-provider.js.map