@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
50 lines (49 loc) • 2.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MomentumContract = void 0;
const base_1 = require("../base");
const utils_1 = require("@mysten/sui/utils");
const utils_2 = require("../utils");
const sui_1 = require("../../../utils/sui");
class MomentumContract extends base_1.BaseContract {
async swap(tx) {
const [coinX, coinY] = this.swapInfo.pool.allTokens;
const swapXtoY = this.swapInfo.swapXtoY;
const sqrtPriceLimit = (0, utils_2.getDefaultSqrtPriceLimit)(swapXtoY);
const typeArguments = [coinX.address, coinY.address];
const { package: packageId, version } = this.config.momentum;
const [receiveA, receiveB, debt] = tx.moveCall({
target: `${packageId}::trade::flash_swap`,
typeArguments,
arguments: [
tx.object(this.swapInfo.poolId),
tx.pure.bool(swapXtoY), // a2b
tx.pure.bool(true), // exact in
this.getInputCoinValue(tx),
tx.pure.u128(sqrtPriceLimit.toString()), // sqrt price limit
tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
tx.object(version),
],
});
tx.moveCall({
target: `${packageId}::trade::repay_flash_swap`,
typeArguments,
arguments: [
tx.object(this.swapInfo.poolId),
debt,
swapXtoY
? sui_1.SuiUtils.coinIntoBalance(tx, coinX.address, this.inputCoinObject)
: sui_1.SuiUtils.zeroBalance(tx, coinX.address),
swapXtoY
? sui_1.SuiUtils.zeroBalance(tx, coinY.address)
: sui_1.SuiUtils.coinIntoBalance(tx, coinY.address, this.inputCoinObject),
tx.object(version),
],
});
const receiveACoin = sui_1.SuiUtils.coinFromBalance(tx, coinX.address, receiveA);
const receiveBCoin = sui_1.SuiUtils.coinFromBalance(tx, coinY.address, receiveB);
sui_1.SuiUtils.collectDust(tx, this.swapInfo.assetIn, swapXtoY ? receiveACoin : receiveBCoin);
return swapXtoY ? receiveBCoin : receiveACoin;
}
}
exports.MomentumContract = MomentumContract;
;