goosefx-ssl-sdk-prism
Version:
SDK for interacting with GooseFX Single-sided Liquidity pools
113 lines • 4.84 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SSL = void 0;
const anchor_1 = require("@project-serum/anchor");
const spl_token_1 = require("@solana/spl-token");
const web3_js_1 = require("@solana/web3.js");
const constants_1 = require("../constants");
const layouts_1 = require("../layouts");
const utils_1 = require("./utils");
class SSL {
constructor(ai, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
this.inner = layouts_1.SSL_LAYOUT.decode(ai.data);
this.address = SSL.findAddress(this.controller, this.mint, programId);
}
static loadByMint(connection, controller, mint, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return __awaiter(this, void 0, void 0, function* () {
return yield SSL.loadByAddress(connection, SSL.findAddress(controller, mint, programId));
});
}
static loadByAddress(connection, address, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return __awaiter(this, void 0, void 0, function* () {
let ai = (yield connection.getAccountInfo(address));
if (ai === undefined) {
return undefined;
}
let ssl = new SSL(ai, programId);
return ssl;
});
}
static liabilityVault(connection, controller, mint, otherMint, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return __awaiter(this, void 0, void 0, function* () {
if (otherMint === undefined) {
otherMint = mint;
}
let address = (0, utils_1.findAssociatedTokenAddress)(SSL.findAddress(controller, mint, programId), otherMint);
let account = yield connection.getAccountInfo(address);
return account;
});
}
static findAddress(controller, mint, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return web3_js_1.PublicKey.findProgramAddressSync([
Buffer.from("GFX-SSL", "utf-8"),
controller.toBuffer(),
mint.toBuffer(),
], programId)[0];
}
;
isSuspended() {
return this.inner.suspended;
}
deposit(program, controller, wallet, amount, programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return __awaiter(this, void 0, void 0, function* () {
const inst = program.instruction;
const accounts = {
controller,
ssl: this.address,
liquidityAccount: SSL.getLiquidityAccountAddress(controller, this.mint, wallet, programId),
rtVault: (0, utils_1.findAssociatedTokenAddress)(this.address, this.mint),
userRtAta: (0, utils_1.findAssociatedTokenAddress)(wallet, this.mint),
userWallet: wallet,
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
};
return yield inst.deposit(new anchor_1.BN(amount.toString()), { accounts });
});
}
static getLiquidityAccountAddress(controller, mint, wallet, programId) {
return web3_js_1.PublicKey.findProgramAddressSync([
Buffer.from("GFX-LIQUIDITYACCOUNT", "utf-8"),
controller.toBuffer(),
mint.toBuffer(),
wallet.toBuffer()
], programId)[0];
}
get controller() {
return this.inner.controller;
}
get mint() {
return this.inner.mint;
}
get decimals() {
return this.inner.decimals;
}
poolTokenMint(programId = constants_1.ADDRESSES["MAINNET"].SSL_PROGRAM_ID) {
return web3_js_1.PublicKey.findProgramAddressSync([
Buffer.from("GFX-SSL-PTMINT", "utf-8"),
this.controller.toBuffer(),
this.mint.toBuffer(),
], programId)[0];
}
get suspended() {
return this.inner.suspended;
}
get weight() {
return this.inner.weight;
}
get swappedLiabilityNative() {
return this.inner.swappedLiabilityNative;
}
get totalShare() {
return this.inner.totalShare;
}
}
exports.SSL = SSL;
//# sourceMappingURL=ssl.js.map