@unloc-xyz/unloc-sdk
Version:
173 lines • 8.33 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBuybackGlobalState = exports.buyback = exports.burn = exports.setBuybackGlobalState = exports.getWsolVaultKey = exports.getUsdcVaultKey = exports.getUnlocVaultKey = exports.initBuybackProgram = exports.buybackProgramId = exports.buybackProgramProvider = exports.buybackProgram = exports.USDC_VAULT_SEED = exports.WSOL_VAULT_SEED = exports.UNLOC_VAULT_SEED = exports.BUYBACK_GLOBAL_STATE_SEED = void 0;
const anchor = __importStar(require("@project-serum/anchor"));
const global_config_1 = require("./../global-config");
const utils_1 = require("./../utils");
const unloc_burn_1 = require("../types/unloc_burn");
const raydium_sdk_1 = require("@raydium-io/raydium-sdk");
const buyback_utils_1 = require("./buyback-utils");
exports.BUYBACK_GLOBAL_STATE_SEED = Buffer.from("GLOBAL_STATE_SEED");
exports.UNLOC_VAULT_SEED = Buffer.from("UNLOC_VAULT_SEED");
exports.WSOL_VAULT_SEED = Buffer.from("WSOL_VAULT_SEED");
exports.USDC_VAULT_SEED = Buffer.from("USDC_VAULT_SEED");
exports.buybackProgram = null;
exports.buybackProgramProvider = null;
exports.buybackProgramId = null;
const initBuybackProgram = (wallet, connection = utils_1.SOLANA_CONNECTION, pid = global_config_1.BUYBACK_PID) => {
if (exports.buybackProgram != null) {
return;
}
exports.buybackProgramId = pid;
// const provider = new anchor.Provider(connection, wallet, anchor.Provider.defaultOptions())
const provider = new anchor.AnchorProvider(connection, wallet, {
skipPreflight: true,
});
exports.buybackProgramProvider = provider;
// Generate the program client from IDL.
exports.buybackProgram = new anchor.Program(unloc_burn_1.IDL, exports.buybackProgramId, provider);
};
exports.initBuybackProgram = initBuybackProgram;
const getUnlocVaultKey = async () => {
const unlocVault = await (0, utils_1.pda)([exports.UNLOC_VAULT_SEED], exports.buybackProgramId);
return unlocVault;
};
exports.getUnlocVaultKey = getUnlocVaultKey;
const getUsdcVaultKey = async () => {
const usdcVault = await (0, utils_1.pda)([exports.USDC_VAULT_SEED], exports.buybackProgramId);
return usdcVault;
};
exports.getUsdcVaultKey = getUsdcVaultKey;
const getWsolVaultKey = async () => {
const wsolVault = await (0, utils_1.pda)([exports.WSOL_VAULT_SEED], exports.buybackProgramId);
return wsolVault;
};
exports.getWsolVaultKey = getWsolVaultKey;
const setBuybackGlobalState = async (newAuthority, amm, serumMarket, ammProgram = raydium_sdk_1.Liquidity.getProgramId(4), serumProgram = raydium_sdk_1.SERUM_PROGRAM_ID_V3, signer = exports.buybackProgramProvider.wallet.publicKey, signers = []) => {
const globalState = await (0, utils_1.pda)([exports.BUYBACK_GLOBAL_STATE_SEED], exports.buybackProgramId);
const unlocVault = await (0, utils_1.pda)([exports.UNLOC_VAULT_SEED], exports.buybackProgramId);
const usdcVault = await (0, utils_1.pda)([exports.USDC_VAULT_SEED], exports.buybackProgramId);
const wsolVault = await (0, utils_1.pda)([exports.WSOL_VAULT_SEED], exports.buybackProgramId);
const superOwner = signer;
const tx = await exports.buybackProgram.rpc.setGlobalState(newAuthority, {
accounts: {
authority: superOwner,
globalState,
unlocMint: global_config_1.UNLOC_MINT,
unlocVault,
usdcMint: global_config_1.USDC_MINT,
usdcVault,
wsolMint: global_config_1.WSOL_MINT,
wsolVault,
ammProgram,
amm,
serumProgram,
serumMarket,
...utils_1.defaults,
},
signers,
});
// eslint-disable-next-line no-console
console.log("setGlobalState tx = ", tx);
};
exports.setBuybackGlobalState = setBuybackGlobalState;
// backend api will call this function regularly
const burn = async () => {
const globalState = await (0, utils_1.pda)([exports.BUYBACK_GLOBAL_STATE_SEED], exports.buybackProgramId);
const unlocVault = await (0, utils_1.pda)([exports.UNLOC_VAULT_SEED], exports.buybackProgramId);
const tx = await exports.buybackProgram.rpc.burn({
accounts: {
globalState,
unlocMint: global_config_1.UNLOC_MINT,
unlocVault,
...utils_1.defaults,
},
});
// eslint-disable-next-line no-console
console.log("setGlobalState tx = ", tx);
};
exports.burn = burn;
// backend api will call this function regularly
const buyback = async (ammProgram = raydium_sdk_1.Liquidity.getProgramId(4), serumProgram = raydium_sdk_1.SERUM_PROGRAM_ID_V3) => {
const globalState = await (0, utils_1.pda)([exports.BUYBACK_GLOBAL_STATE_SEED], exports.buybackProgramId);
const globalStateData = await exports.buybackProgram.account.globalState.fetch(globalState);
const amm = globalStateData.amm;
const serumMarket = globalStateData.serumMarket;
const market = await (0, buyback_utils_1.getMarket)(exports.buybackProgram.provider.connection, serumMarket.toBase58(), serumProgram.toBase58());
const poolKeys = await (0, buyback_utils_1.getAssociatedPoolKeys)({
programId: ammProgram,
serumProgramId: serumProgram,
marketId: market.address,
baseMint: market.baseMint,
quoteMint: market.quoteMint
});
const ammAuthority = poolKeys.authority;
const poolCoinTokenAccount = poolKeys.baseVault;
const poolPcTokenAccount = poolKeys.quoteVault;
const ammTargetOrders = poolKeys.targetOrders;
const ammOpenOrders = poolKeys.openOrders;
const serumBids = market.bids;
const serumAsks = market.asks;
const serumEventQueue = market.eventQueue;
const serumCoinVaultAccount = market.baseVault;
const serumPcVaultAccount = market.quoteVault;
const vaultOwnerData = await (0, buyback_utils_1.getVaultOwnerAndNonce)(market.address, serumProgram);
const serumVaultSigner = vaultOwnerData.vaultOwner;
const unlocVault = await (0, utils_1.pda)([exports.UNLOC_VAULT_SEED], exports.buybackProgramId);
const usdcVault = await (0, utils_1.pda)([exports.USDC_VAULT_SEED], exports.buybackProgramId);
const tx = await exports.buybackProgram.rpc.buyback({
accounts: {
globalState,
ammProgram,
amm,
ammAuthority,
ammOpenOrders,
ammTargetOrders,
poolCoinTokenAccount,
poolPcTokenAccount,
serumProgram,
serumMarket,
serumBids,
serumAsks,
serumEventQueue,
serumCoinVaultAccount,
serumPcVaultAccount,
serumVaultSigner,
userSourceTokenAccount: usdcVault,
userDestinationTokenAccount: unlocVault,
splTokenProgram: utils_1.defaults.tokenProgram,
},
});
// eslint-disable-next-line no-console
console.log("setGlobalState tx = ", tx);
};
exports.buyback = buyback;
const getBuybackGlobalState = async () => {
const globalState = await (0, utils_1.pda)([exports.BUYBACK_GLOBAL_STATE_SEED], exports.buybackProgramId);
return await exports.buybackProgram.account.globalState.fetch(globalState);
};
exports.getBuybackGlobalState = getBuybackGlobalState;
//# sourceMappingURL=index.js.map