@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
45 lines (44 loc) • 2.02 kB
JavaScript
"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;