UNPKG

@solsdk/tokenflow_sdk

Version:

A simple SDK for interacting with tokenflow

1 lines 6.59 kB
{"version":3,"file":"amm.cjs","sources":["../../../src/amm.ts"],"sourcesContent":["import { BondingCurveAccount } from \"./bondingCurveAccount\";\nimport { GlobalAccount } from \"./globalAccount\";\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 public virtualSolReserves: bigint;\n public virtualTokenReserves: bigint;\n public realSolReserves: bigint;\n public realTokenReserves: bigint;\n public initialVirtualTokenReserves: bigint;\n\n constructor(\n virtualSolReserves: bigint,\n virtualTokenReserves: bigint,\n realSolReserves: bigint,\n realTokenReserves: bigint,\n initialVirtualTokenReserves: bigint\n ) {\n this.virtualSolReserves = virtualSolReserves;\n this.virtualTokenReserves = virtualTokenReserves;\n this.realSolReserves = realSolReserves;\n this.realTokenReserves = realTokenReserves;\n this.initialVirtualTokenReserves = initialVirtualTokenReserves;\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 console.log('scaling_factor: ', scaling_factor);\n const token_sell_proportion = (tokens * scaling_factor) / this.virtualTokenReserves;\n console.log('token_sell_proportion: ', token_sell_proportion);\n const sol_received = (this.virtualSolReserves * token_sell_proportion) / scaling_factor;\n console.log('sol_received: ', sol_received);\n console.log('realSolReserves: ', this.realSolReserves);\n return sol_received < this.realSolReserves ? sol_received : this.realSolReserves;\n }\n}"],"names":[],"mappings":"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"}