@bluefin-exchange/bluefin7k-aggregator-sdk
Version:
41 lines (40 loc) • 1.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MagmaContract = 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 MagmaContract 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 [zeroOut] = tx.moveCall({
target: "0x2::coin::zero",
typeArguments: [swapXtoY ? coinY.address : coinX.address],
});
const amountIn = sui_1.SuiUtils.getCoinValue(swapXtoY ? coinX.address : coinY.address, this.inputCoinObject, tx);
const config = this.config.magma;
const [receiveA, receiveB] = tx.moveCall({
target: `${config.package}::router::swap`,
typeArguments,
arguments: [
tx.object(config.globalConfig),
tx.object(this.swapInfo.poolId),
swapXtoY ? this.inputCoinObject : zeroOut, // coin A
swapXtoY ? zeroOut : this.inputCoinObject, // coin B
tx.pure.bool(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, swapXtoY ? receiveA : receiveB);
return swapXtoY ? receiveB : receiveA;
}
}
exports.MagmaContract = MagmaContract;
;