goodrdotfun-sdk
Version:
SDK for interacting with goodr.fun and Sonic on Solana
59 lines (58 loc) • 3.15 kB
JavaScript
"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;