UNPKG

@unloc-xyz/unloc-sdk

Version:
173 lines 8.33 kB
"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