UNPKG

goodrdotfun-sdk

Version:

SDK for interacting with goodr.fun and Sonic on Solana

59 lines (58 loc) 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GoodrFunProgram = void 0; const web3_js_1 = require("@solana/web3.js"); const base_program_1 = require("./base-program"); const constant_1 = require("./constant"); const bignumber_js_1 = require("bignumber.js"); class GoodrFunProgram extends base_program_1.GoodrFunProgramBase { constructor(rpcEndpoint) { const connection = new web3_js_1.Connection(rpcEndpoint, 'confirmed'); super(connection); this._decimals = constant_1.TOKEN_DECIMALS; } get decimals() { return this._decimals; } async getBondingCurveProgressFromState(bondingCurveState, globalState) { const progress = bondingCurveState.realTokenReserves.toNumber() / globalState.initialRealTokenReserves.toNumber(); const progressPercentage = (1 - progress) * 100; return progressPercentage; } async getPriceDataFromState(bondingCurveState) { const virtualSolReserves = bondingCurveState?.virtualSolReserves.toNumber(); const virtualTokenReserves = bondingCurveState?.virtualTokenReserves.toNumber(); const tokenTotalSupply = bondingCurveState?.tokenTotalSupply.toNumber(); const constant = virtualSolReserves * virtualTokenReserves; const deltaSol = virtualSolReserves - constant / (virtualTokenReserves + 1); const decimalBN = new bignumber_js_1.BigNumber(10).pow(this._decimals); // Apply the same scaling as getCurrentState for V1 (SOL) const priceBN = new bignumber_js_1.BigNumber(deltaSol).div(new bignumber_js_1.BigNumber(10).pow(3)); const marketCapBN = new bignumber_js_1.BigNumber(deltaSol * tokenTotalSupply).div(new bignumber_js_1.BigNumber(10).pow(9)); const totalSupplyBN = new bignumber_js_1.BigNumber(tokenTotalSupply).div(decimalBN); return { price: priceBN, marketCap: marketCapBN, totalSupply: totalSupplyBN, }; } async getPriceDataFromStateV2(bondingCurveV2State) { const virtualBaseReserves = bondingCurveV2State?.virtualBaseReserves.toNumber(); const virtualTokenReserves = bondingCurveV2State?.virtualTokenReserves.toNumber(); const tokenTotalSupply = bondingCurveV2State?.tokenTotalSupply.toNumber(); const constant = virtualBaseReserves * virtualTokenReserves; const deltaBase = virtualBaseReserves - constant / (virtualTokenReserves + 1); const decimalBN = new bignumber_js_1.BigNumber(10).pow(this._decimals); // Apply the same scaling as getCurrentState for V2 (SONIC) const priceBN = new bignumber_js_1.BigNumber(deltaBase).div(new bignumber_js_1.BigNumber(10).pow(3)); const marketCapBN = new bignumber_js_1.BigNumber(deltaBase * tokenTotalSupply).div(new bignumber_js_1.BigNumber(10).pow(9)); const totalSupplyBN = new bignumber_js_1.BigNumber(tokenTotalSupply).div(decimalBN); return { price: priceBN, marketCap: marketCapBN, totalSupply: totalSupplyBN, }; } } exports.GoodrFunProgram = GoodrFunProgram;