0.2.25 • Published 5 months ago

@lifinity/sdk v0.2.25

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

lifinity-sdk

Installation

yarn install @lifinity/sdk

Usage

  • Get pools
import { getPoolList } from '@lifinity/sdks';

const pools = getPoolList();

console.log("pools =", pools);
  • Get swap amount
import { Connection, PublicKey } from '@solana/web3.js';
import { getAmountOut, AmountOut } from '@lifinity/sdk';

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const amountIn: number = 1; // Input amount
const fromMint: PublicKey = new PublicKey("---Mint address of the input token---");
const toMint: PublicKey = new PublicKey("---Mint address of the output token---");
const slippage: number = 1; // Slippage (%)

const res : AmountOut = await getAmountOut(
    connection,
    amountIn,
    fromMint,
    toMint,
    slippage
);

console.log("amountIn: number =", res.amountIn);
console.log("amountOut: number =", res.amountOut);
console.log("amountOutWithSlippage: number =", res.amountOutWithSlippage);
console.log("priceImpact: number =", res.priceImpact);
console.log("fee: number =", res.fee);
console.log("feePercent: number =", res.feePercent);
  • Breakdown of get swap amount Please use the SDK for calculating amount out (getCurveAmount) as the protocol is still in beta and the math may be updated
import { Connection, PublicKey } from '@solana/web3.js';
import Decimal from 'decimal'
import { getPool, getMultipleAccounts, getParsedData, getCurveAmount, TradeDirection } from '@lifinity/sdk'


const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const amountIn: number = 1; // Input amount
const fromMint: PublicKey = new PublicKey("---Mint address of the intput token---");
const toMint: PublicKey = new PublicKey("---Mint address of the output token---");
const slippage: number = 1; // Slippage (%)

const poolInfo = getPool(fromMint.toString(), toMint.toString());
if (poolInfo) {

    let amount = new Decimal(amountIn);
    let tradeDirection: string;
    let inDecimal: number;
    let outDecimal: number;

    if (poolInfo.poolCoinMint === fromMint.toString()){
        amount = amount.times(new Decimal(10).pow(poolInfo.poolCoinDecimal));
        inDecimal = poolInfo.poolCoinDecimal;
        outDecimal = poolInfo.poolPcDecimal;
        tradeDirection = TradeDirection.AtoB;
    }else{
        amount = amount.times(new Decimal(10).pow(poolInfo.poolPcDecimal));
        inDecimal = poolInfo.poolPcDecimal;
        outDecimal = poolInfo.poolCoinDecimal
        tradeDirection = TradeDirection.BtoA;
    }

    const publicKeys = [
        new PublicKey(poolInfo.amm),
        new PublicKey(poolInfo.poolCoinTokenAccount),
        new PublicKey(poolInfo.poolPcTokenAccount),
        new PublicKey(poolInfo.configAccount),
        new PublicKey(poolInfo.pythAccount),
    ];

    if (poolInfo.pythAccount !== poolInfo.pythPcAccount){
        publicKeys.push(new PublicKey(poolInfo.pythPcAccount));
    }

    try {
        const multipleInfo = await getMultipleAccounts(connection, publicKeys);

        const data: IAmmData = getParsedData(
            multipleInfo,
            poolInfo
        );

        const slot = await connection.getSlot();

        const curveAmount: ICurveAmount = getCurveAmount(
            amount,
            slot,
            data.amm,
            data.fees,
            data.coinBalance,
            data.pcBalance,
            data.config,
            data.pyth,
            data.pythPc,
            tradeDirection,
        );
        console.log("amountSwapped: Decimal =", curveAmount.amountSwapped);
        console.log("priceImpact: Decimal =", curveAmount.priceImpact);
        console.log("fee: Decimal =", curveAmount.fee);
        console.log("feePercent: Decimal =", curveAmount.feePercent);

        const slippagePercent = new Decimal(slippage).div(100);
        const amountOutWithSlippage = new Decimal(Math.floor(curveAmount.amountSwapped.times(new Decimal(1).minus(slippagePercent)).toNumber()));
        const amountOutWithSlippageTokenAmount = amountOutWithSlippage.div(new Decimal(10).pow(outDecimal)).toNumber();
        const amountOutTokenAmount = curveAmount.amountSwapped.div(new Decimal(10).pow(outDecimal)).toNumber();
        const feeTokenAmount = curveAmount.fee.div(new Decimal(10).pow(inDecimal)).toNumber();

        console.log("slippagePercent: Decimal =", slippagePercent);
        console.log("amountOutWithSlippage: Decimal =", amountOutWithSlippage);
        console.log("amountOutWithSlippageTokenAmount: Decimal =", amountOutWithSlippageTokenAmount);
        console.log("amountOutTokenAmount: Decimal =", amountOutTokenAmount);
        console.log("feeTokenAmount: Decimal =", feeTokenAmount);

    }catch (error) {
        console.log(error)
        // Errors include failures to obtain accurate price feed from the oracle
    }
}
  • Get swap instruction
import { Connection, PublicKey } from '@solana/web3.js';
import { getSwapInstruction } from '@lifinity/sdk'

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const ownerAccount: PublicKey = new PublicKey("---User's Solana address---")
const amountIn: number = 1; // Input amount
const minimumOut: number = 100; // Output amount
const fromMint: PublicKey = new PublicKey("---Mint address of the input token---");
const toMint: PublicKey = new PublicKey("---Mint address of the output token---");
const fromUserAccount: PublicKey = new PublicKey("---User's input token account---");
const toUserAccount: PublicKey = new PublicKey("---User's output token account---");
const approve = true; // Set false to skip approve instruction

const { approveInstruction, swapInstruction, signers } = await getSwapInstruction(
    connection,
    ownerAccount,
    amountIn, 
    minimumOut,
    fromMint,
    toMint,
    fromUserAccount,
    toUserAccount,
    approve,
);

console.log("approveInstruction: TransactionInstruction =", approveInstruction);
console.log("swapInstruction: TransactionInstruction =", swapInstruction);
console.log("signers: any[] =", signers);
  • Swap
import { Lifinity } from '@lifinity/sdk'

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const wallet: any = "---User wallet---"
const amountIn: number = 1; // Input amount
const minimumOut: number = 100; // Output amount
const fromMint: PublicKey = new PublicKey("---Mint address of the input token---");
const toMint: PublicKey = new PublicKey("---Mint address of the output token---");

const lifinitySdk = await Lifinity.build(
    connection,
    wallet
);

const transactionId: string = await lifinitySdk.swap(
    amountIn,
    minimumOut,
    fromMint,
    toMint
);

console.log("transactionId: string =",transactionId)
  • Deposit
import { Lifinity } from '@lifinity/sdk'

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const wallet: any = "---User wallet---"

const coinAmountIn: number = 1; // input coin token amount
const pcAmountIn: number = 0; 
const coinMint: PublicKey = new PublicKey("---Mint address of the pool coin token---");
const pcMint: PublicKey = new PublicKey("---Mint address of the pool pc token---");
const slippage: number = 1; // Slippage (%)

// If pcAmountIn = 0, calculate pcAmountIn from coinAmountIn
const depositAmount : IDepositAmountOut = await getDepositAmountOut(
  connection,
  coinAmountIn,
  pcAmountIn,
  coinMint,
  pcMint,
  slippage
);

const lifinitySdk = await Lifinity.build(
    connection,
    wallet
);

const transactionId: string = await lifinitySdk.deposit(
    depositAmount.coinMaximumIn,
    depositAmount.pcMaximumIn,
    depositAmount.lpRecive,
    coinMint,
    pcMint,
);

console.log("transactionId: string =",transactionId)

If you only want to get the deposit instruction, use getDepositInstruction ().

  • Withdraw
import { Lifinity } from '@lifinity/sdk'

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");
const wallet: any = "---User wallet---"

const lpAmountIn: number = 1; // input lp token amount
const coinMint: PublicKey = new PublicKey("---Mint address of the pool coin token---");
const pcMint: PublicKey = new PublicKey("---Mint address of the pool pc token---");
const slippage: number = 1; // Slippage (%)

const withdrawAmount : IWithdrawAmountOut = await getWithdrawAmountOut(
  connection,
  lpAmountIn,
  coinMint,
  pcMint,
  slippage
);

const lifinitySdk = await Lifinity.build(
    connection,
    wallet
);

const transactionId: string = await lifinitySdk.withdraw(
    withdrawAmount.lpAmountIn,
    withdrawAmount.coinMinimumOut,
    withdrawAmount.pcMinimumOut,
    coinMint,
    pcMint,
);

console.log("transactionId: string =",transactionId);

If you only want to get the withdraw instruction, use getWithdrawInstruction ().

  • GetPoolCap
import { getPoolCap } from '@lifinity/sdk'

const connection: Connection = new Connection("https://api.mainnet-beta.solana.com");

const coinMint: PublicKey = new PublicKey("---Mint address of the pool coin token---");
const pcMint: PublicKey = new PublicKey("---Mint address of the pool pc token---");

const capAmount : number = await getPoolCap(
  connection,
  coinMint,
  pcMint,
);

console.log("capAmount: number =",capAmount);

Copyright © 2022 LIFINITY FOUNDATION All Rights Reserved.

0.2.25

5 months ago

0.2.24

5 months ago

0.2.23

8 months ago

0.2.22

10 months ago

0.2.21

10 months ago

0.2.20

11 months ago

0.2.19

1 year ago

0.2.18

1 year ago

0.2.17

2 years ago

0.2.16

2 years ago

0.2.15

2 years ago

0.2.111111111111

2 years ago

0.2.14

2 years ago

0.2.13

2 years ago

0.2.12

2 years ago

0.2.10

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.9

2 years ago

0.2.8

2 years ago

0.2.3

2 years ago

0.2.2

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.1.70

2 years ago

0.1.71

2 years ago

0.1.72

2 years ago

0.1.69

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.63

2 years ago

0.1.64

2 years ago

0.1.65

2 years ago

0.1.66

2 years ago

0.1.67

2 years ago

0.1.68

2 years ago

0.1.61

2 years ago

0.1.62

2 years ago

0.1.53

2 years ago

0.1.54

2 years ago

0.1.55

2 years ago

0.1.56

2 years ago

0.1.57

2 years ago

0.1.58

2 years ago

0.1.59

2 years ago

0.1.60

2 years ago

0.1.52

2 years ago

0.1.51

2 years ago

0.1.49

2 years ago

0.1.48

2 years ago

0.1.47

2 years ago

0.1.46

2 years ago

0.1.45

2 years ago

0.1.44

2 years ago

0.1.43

2 years ago

0.1.42

2 years ago

0.1.41

2 years ago

0.1.40

2 years ago

0.1.39

2 years ago

0.1.38

2 years ago

0.1.37

2 years ago

0.1.36

2 years ago

0.1.35

2 years ago

0.1.34

2 years ago

0.1.33

2 years ago

0.1.32

2 years ago

0.1.31

2 years ago

0.1.30

2 years ago

0.1.29

2 years ago

0.1.28

2 years ago

0.1.27

2 years ago

0.1.26

2 years ago

0.1.24

2 years ago

0.1.23

2 years ago

0.1.22

2 years ago

0.1.21

2 years ago

0.1.20

2 years ago

0.1.19

2 years ago

0.1.18

2 years ago

0.1.17

2 years ago

0.1.16

2 years ago

0.1.15

2 years ago

0.1.14

2 years ago

0.1.13

2 years ago

0.1.12

2 years ago

0.1.11

2 years ago

0.1.10

2 years ago

0.1.9

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago