@prism-hq/prism-ag
Version:
Prism Aggregator
67 lines (66 loc) • 3.69 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.marcopoloSwap = void 0;
const web3_js_1 = require("@solana/web3.js");
const bn_js_1 = __importDefault(require("bn.js"));
const types_1 = require("../types/types");
function marcopoloSwap(user, program, route, fromTokenAccount, toTokenAccount, fees, hostFees, useT = null, disableFees = false) {
return __awaiter(this, void 0, void 0, function* () {
let { fromCoin, toCoin, pool: poolAny } = route.routeData;
let pool = poolAny;
let amountIn = new bn_js_1.default(Math.floor(route.amountIn * 10 ** fromCoin.decimals));
let amountOut = new bn_js_1.default(Math.floor(route.minimumReceived * 10 ** toCoin.decimals));
const { tokenX, tokenY, price, tokenXReserve, tokenYReserve } = pool.pool;
let isBaseInput = fromCoin.mintAddress === tokenX.toBase58();
const slippage = pool.toFixedPoint(new bn_js_1.default(100), new bn_js_1.default(2));
const priceLimit = pool.getPriceAfterSlippage(price, slippage, isBaseInput);
const referrerA = pool.getAssociatedTokenAddressSync(tokenX, new web3_js_1.PublicKey(types_1.PRISM_OWNER));
const referrerB = pool.getAssociatedTokenAddressSync(tokenY, new web3_js_1.PublicKey(types_1.PRISM_OWNER));
// return program.instruction.marcopoloSwap(
// amountIn,
// amountOut,
// priceLimit.v,
// isBaseInput,
// useT ? true : false,
// new BN(hostFees),
// {
// accounts: {
// marcopoloProgram: new PublicKey(MARCO_POLO_PROGRAM_ID),
// state: pool.stateAddress,
// pool: pool.poolAddress,
// mintA: tokenX,
// mintB: tokenY,
// tokenVaultA: pool.pool.poolXAccount,
// tokenVaultB: pool.pool.poolYAccount,
// userTokenAccountA: fromTokenAccount,
// userTokenAccountB: toTokenAccount,
// user: user,
// referrerTokenAccountA: referrerA,
// referrerTokenAccountB: referrerB,
// referrer: new PublicKey(PRISM_OWNER),
// programAuthority: pool.programAuthority,
// systemProgram: SystemProgram.programId,
// tokenProgram: new PublicKey(TOKEN_PROGRAM_ID),
// associatedTokenProgram: new PublicKey(ASSOCIATED_TOKEN_PROGRAM_ID),
// rent: SYSVAR_RENT_PUBKEY,
// host: fees.host,
// feeSweeper: fees.owner,
// transitiveState: new PublicKey(TRANSITIVE_STATE),
// }
// }
// )
});
}
exports.marcopoloSwap = marcopoloSwap;