pumpdotfun-sdk-sp
Version:
A simple SDK for interacting with pumpdotfun
1 lines • 5.63 kB
Source Map (JSON)
{"version":3,"file":"amm.mjs","sources":["../../../src/amm.ts"],"sourcesContent":["import { BondingCurveAccount } from \"./bondingCurveAccount.js\";\nimport { GlobalAccount } from \"./globalAccount.js\";\n\nexport type BuyResult = {\n token_amount: bigint;\n sol_amount: bigint;\n};\n\nexport type SellResult = {\n token_amount: bigint;\n sol_amount: bigint;\n};\n\nexport class AMM {\n constructor(\n public virtualSolReserves: bigint,\n public virtualTokenReserves: bigint,\n public realSolReserves: bigint,\n public realTokenReserves: bigint,\n public initialVirtualTokenReserves: bigint\n ) {}\n\n static fromGlobalAccount(global: GlobalAccount): AMM {\n return new AMM(\n global.initialVirtualSolReserves,\n global.initialVirtualTokenReserves,\n 0n,\n global.initialRealTokenReserves,\n global.initialVirtualTokenReserves\n );\n }\n\n static fromBondingCurveAccount(bonding_curve: BondingCurveAccount, initialVirtualTokenReserves: bigint): AMM {\n return new AMM(\n bonding_curve.virtualSolReserves,\n bonding_curve.virtualTokenReserves,\n bonding_curve.realSolReserves,\n bonding_curve.realTokenReserves,\n initialVirtualTokenReserves\n );\n }\n\n getBuyPrice(tokens: bigint): bigint {\n const product_of_reserves = this.virtualSolReserves * this.virtualTokenReserves;\n const new_virtual_token_reserves = this.virtualTokenReserves - tokens;\n const new_virtual_sol_reserves = product_of_reserves / new_virtual_token_reserves + 1n;\n const amount_needed = new_virtual_sol_reserves > this.virtualSolReserves ? new_virtual_sol_reserves - this.virtualSolReserves : 0n;\n return amount_needed > 0n ? amount_needed : 0n;\n }\n\n applyBuy(token_amount: bigint): BuyResult {\n const final_token_amount = token_amount > this.realTokenReserves ? this.realTokenReserves : token_amount;\n const sol_amount = this.getBuyPrice(final_token_amount);\n\n this.virtualTokenReserves = this.virtualTokenReserves - final_token_amount;\n this.realTokenReserves = this.realTokenReserves - final_token_amount;\n\n this.virtualSolReserves = this.virtualSolReserves + sol_amount;\n this.realSolReserves = this.realSolReserves + sol_amount;\n\n return {\n token_amount: final_token_amount,\n sol_amount: sol_amount\n }\n }\n\n applySell(token_amount: bigint): SellResult {\n this.virtualTokenReserves = this.virtualTokenReserves + token_amount;\n this.realTokenReserves = this.realTokenReserves + token_amount;\n\n const sell_price = this.getSellPrice(token_amount);\n\n this.virtualSolReserves = this.virtualSolReserves - sell_price;\n this.realSolReserves = this.realSolReserves - sell_price;\n\n return {\n token_amount: token_amount,\n sol_amount: sell_price\n }\n }\n\n getSellPrice(tokens: bigint): bigint {\n const scaling_factor = this.initialVirtualTokenReserves;\n const token_sell_proportion = (tokens * scaling_factor) / this.virtualTokenReserves;\n const sol_received = (this.virtualSolReserves * token_sell_proportion) / scaling_factor;\n return sol_received < this.realSolReserves ? sol_received : this.realSolReserves;\n }\n}"],"names":[],"mappings":"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"}