UNPKG

@solsdk/tokenflow_sdk

Version:

A simple SDK for interacting with tokenflow

1 lines 8 kB
{"version":3,"file":"bondingCurveAccount.cjs","sources":["../../../src/bondingCurveAccount.ts"],"sourcesContent":["import { BorshCoder } from \"@coral-xyz/anchor\";\nimport { struct, bool, u64, publicKey, option } from \"@coral-xyz/borsh\";\nimport { PublicKey } from \"@solana/web3.js\";\n\n\n\nexport class BondingCurveAccount {\n public discriminator: bigint;\n public virtualSolReserves: bigint;\n public virtualTokenReserves: bigint;\n public realSolReserves: bigint;\n public realTokenReserves: bigint;\n public tokenTotalSupply: bigint;\n public active: boolean;\n public creator: PublicKey;\n public tradeAuthority: PublicKey | null;\n public complete: boolean;\n \n constructor(\n discriminator: bigint,\n virtualSolReserves: bigint,\n virtualTokenReserves: bigint,\n realSolReserves: bigint,\n realTokenReserves: bigint,\n tokenTotalSupply: bigint,\n active: boolean,\n creator: PublicKey,\n tradeAuthority: PublicKey | null,\n complete: boolean,\n ) {\n this.discriminator = discriminator;\n this.virtualSolReserves = virtualSolReserves;\n this.virtualTokenReserves = virtualTokenReserves;\n this.realSolReserves = realSolReserves;\n this.realTokenReserves = realTokenReserves;\n this.tokenTotalSupply = tokenTotalSupply;\n this.active = active;\n this.creator = creator;\n this.tradeAuthority = tradeAuthority;\n this.complete = complete;\n }\n\n getBuyPrice(amount: bigint): bigint {\n if (this.complete) {\n throw new Error(\"Curve is complete\");\n }\n\n if (amount <= 0n) {\n return 0n;\n }\n\n // Calculate the product of virtual reserves\n let n = this.virtualSolReserves * this.virtualTokenReserves;\n\n // Calculate the new virtual sol reserves after the purchase\n let i = this.virtualSolReserves + amount;\n\n // Calculate the new virtual token reserves after the purchase\n let r = n / i + 1n;\n\n // Calculate the amount of tokens to be purchased\n let s = this.virtualTokenReserves - r;\n\n // Return the minimum of the calculated tokens and real token reserves\n return s < this.realTokenReserves ? s : this.realTokenReserves;\n }\n\n getSellPrice(amount: bigint, feeBasisPoints: bigint): bigint {\n if (this.complete) {\n throw new Error(\"Curve is complete\");\n }\n\n if (amount <= 0n) {\n return 0n;\n }\n\n // Calculate the proportional amount of virtual sol reserves to be received\n let n =\n (amount * this.virtualSolReserves) / (this.virtualTokenReserves + amount);\n\n // Calculate the fee amount in the same units\n let a = (n * feeBasisPoints) / 10000n;\n\n // Return the net amount after deducting the fee\n return n - a;\n }\n\n getMarketCapSOL(): bigint {\n if (this.virtualTokenReserves === 0n) {\n return 0n;\n }\n\n return (\n (this.tokenTotalSupply * this.virtualSolReserves) /\n this.virtualTokenReserves\n );\n }\n\n getFinalMarketCapSOL(feeBasisPoints: bigint): bigint {\n let totalSellValue = this.getBuyOutPrice(\n this.realTokenReserves,\n feeBasisPoints\n );\n let totalVirtualValue = this.virtualSolReserves + totalSellValue;\n let totalVirtualTokens = this.virtualTokenReserves - this.realTokenReserves;\n\n if (totalVirtualTokens === 0n) {\n return 0n;\n }\n\n return (this.tokenTotalSupply * totalVirtualValue) / totalVirtualTokens;\n }\n\n getBuyOutPrice(amount: bigint, feeBasisPoints: bigint): bigint {\n let solTokens =\n amount < this.realSolReserves ? this.realSolReserves : amount;\n let totalSellValue =\n (solTokens * this.virtualSolReserves) /\n (this.virtualTokenReserves - solTokens) +\n 1n;\n let fee = (totalSellValue * feeBasisPoints) / 10000n;\n return totalSellValue + fee;\n }\n\n public static fromBuffer(buffer: Buffer): BondingCurveAccount { \n const discriminator = buffer.subarray(0, 8).readBigInt64LE();\n\n const layout = struct([\n u64(\"virtualSolReserves\"),\n u64(\"virtualTokenReserves\"),\n u64(\"realSolReserves\"),\n u64(\"realTokenReserves\"),\n u64(\"tokenTotalSupply\"),\n bool(\"active\"),\n publicKey(\"creator\"),\n option(publicKey(), \"tradeAuthority\"),\n bool(\"complete\"),\n ]);\n\n const value = layout.decode(buffer.subarray(8));\n\n return new BondingCurveAccount(\n BigInt(discriminator),\n BigInt(value.virtualSolReserves),\n BigInt(value.virtualTokenReserves),\n BigInt(value.realSolReserves),\n BigInt(value.realTokenReserves),\n BigInt(value.tokenTotalSupply),\n value.active,\n value.creator,\n value.tradeAuthority,\n value.complete,\n );\n }\n}"],"names":["struct","u64","bool","publicKey","option"],"mappings":"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"}