UNPKG

@bluefin-exchange/bluefin7k-aggregator-sdk

Version:
50 lines (49 loc) 2.25 kB
"use strict"; 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;