UNPKG

@bluefin-exchange/bluefin7k-aggregator-sdk

Version:
45 lines (44 loc) 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CetusContract = 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 CetusContract extends base_1.BaseContract { async swap(tx) { const sqrtPriceLimit = (0, utils_2.getDefaultSqrtPriceLimit)(this.swapInfo.swapXtoY); const typeArguments = [this.swapInfo.coinX.type, this.swapInfo.coinY.type]; const [zeroOut] = tx.moveCall({ target: "0x2::coin::zero", typeArguments: [ this.swapInfo.swapXtoY ? this.swapInfo.coinY.type : this.swapInfo.coinX.type, ], }); const amountIn = sui_1.SuiUtils.getCoinValue(this.swapInfo.swapXtoY ? this.swapInfo.coinX.type : this.swapInfo.coinY.type, this.inputCoinObject, tx); const config = this.config.cetus; const [receiveA, receiveB] = tx.moveCall({ target: `${config.package}::router::swap`, typeArguments, arguments: [ tx.object(config.globalConfig), tx.object(this.swapInfo.poolId), this.swapInfo.swapXtoY ? this.inputCoinObject : zeroOut, // coin A this.swapInfo.swapXtoY ? zeroOut : this.inputCoinObject, // coin B tx.pure.bool(this.swapInfo.swapXtoY), // a to b or b to a tx.pure.bool(true), // exact in or out amountIn, // swap amount tx.pure.u128(sqrtPriceLimit.toString()), // sqrt price limit tx.pure.bool(false), tx.object(utils_1.SUI_CLOCK_OBJECT_ID), ], }); sui_1.SuiUtils.collectDust(tx, this.swapInfo.assetIn, this.swapInfo.swapXtoY ? receiveA : receiveB); return this.swapInfo.swapXtoY ? receiveB : receiveA; } } exports.CetusContract = CetusContract;