Skip to content

πŸ›  An SDK for building applications on top of AnimeSwap SUI v1

License

Notifications You must be signed in to change notification settings

AnimeSwap/sui-v1-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AnimeSwap Sui v1 Protocol SDK

The typescript SDK for AnimeSwap Sui v1 protocol.

Installation

yarn add "@animeswap.org/sui-v1-sdk"

Usage Example

Init SDK

import SDK, { NetworkType } from '@animeswap.org/sui-v1-sdk';

const sdk = new SDK(NetworkType.Testnet)

Is pair exist

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'

  const output = await sdk.swap.isPairExist(SUI, BTC)
})()

Add liquidity rate calculation and txb.

If pair not exists, tx will create pair first

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'
  const walletAddress = '0xdeadbeef'

  const isPairExist = await sdk.swap.isPairExist(SUI, BTC)

  if (isPairExist) {
    // Add liqudity with a given rate
    const amountIn = 1e8
    const output = await sdk.swap.addLiquidityRates({
      coinX: SUI,
      coinY: BTC,
      fixedCoin: 'X', // 'X' | 'Y'
      amount: amountIn,  // fixedCoin amount
    })

    /**
      output type:
      {
        amount: Decimal
        coinXDivCoinY: Decimal
        coinYDivCoinX: Decimal
        shareOfPool: Decimal
      }
    */

    const txb = sdk.swap.addLiquidityPayload({
      address::walletAddress
      coinX: SUI,
      coinY: BTC,
      amountX: amountIn,
      amountY: output.amount,
      slippage: 0.05, // 5%
    })

    /**
      output type: txb
    */
  } else {
    // Create pair and add initial liquidity
    const txb = sdk.swap.addLiquidityPayload({
      address::walletAddress
      coinX: SUI,
      coinY: BTC,
      amountX: 1e8, // any amount you want
      amountY: 1e7, // any amount you want
      slippage: 0.05, // 5%
    })

    /**
      output type: txb
    */
  }
})()

Remove liquidity rate calculation and txb for existed pairs

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'
  const walletAddress = '0xdeadbeef'
  const lpAmount = 1e6

  const output = await sdk.swap.removeLiquidityRates({
    coinX: SUI,
    coinY: BTC,
    amount: lpAmount,  // lp amount
  });

  /**
    output type:
    {
      amountX: Decimal
      amountY: Decimal
    }
   */

  const txPayload = sdk.swap.removeLiquidityPayload({
    address: walletAddress,
    coinX: SUI,
    coinY: BTC,
    amount: lpAmount,
    amountXDesired: output.amountX,
    amountYDesired: output.amountY,
    slippage: 0.05, // 5%
    deadline: 30,   // 30 seconds
  })

  /**
    output type: txb
   */
})()

Swap (exact in) rate calculation and txb.

Swap exact coin to coin mode

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'
  const walletAddress = '0xdeadbeef'
  const aptosAmount = 1e6

  const trades = await sdk.route.getRouteSwapExactCoinForCoin({
    fromCoin: SUI,
    toCoin: BTC,
    amount: aptosAmount,
  });
  if (trades.length == 0) throw("No route error")
  const bestTrade = trades[0]
  /**
    bestTrade type:
    {
      coinPairList: LiquidityPoolResource[]
      amountList: string[]
      coinTypeList: string[]
      priceImpact: Decimal
    }
   */

  const output = sdk.route.swapExactCoinForCoinPayload({
    address: walletAddress,
    trade: bestTrade,
    slippage: 0.05,   // 5%
  })

  /**
    output type: txb
   */
})()

Swap (exact out) rate calculation and txb.

Swap coin to exact coin mode

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'
  const walletAddress = '0xdeadbeef'
  const btcAmount = 1e6

  const trades = await sdk.route.getRouteSwapCoinForExactCoin({
    fromCoin: SUI,
    toCoin: BTC,
    amount: btcAmount,
  });
  if (trades.length == 0) throw("No route error")
  const bestTrade = trades[0]
  /**
    bestTrade type:
    {
      coinPairList: LiquidityPoolResource[]
      amountList: string[]
      coinTypeList: string[]
      priceImpact: Decimal
    }
   */

  const output = sdk.route.swapCoinForExactCoinPayload({
    address: walletAddress,
    trade: bestTrade,
    slippage: 0.05,   // 5%
  })

  /**
    output type: txb
   */
})()

Get all LPCoin by address

(async () => {
  const queryAddress = '0xA11ce'
  const output = await sdk.swap.getAllLPCoinResourcesByAddress(queryAddress)

  /**
    output type:
    [{
      coinX: AptosResourceType
      coinY: AptosResourceType
      lpCoin: AptosResourceType
      value: string
    }]
   */
})()

Get LPCoin amount

(async () => {
  const SUI = '0x2::sui::SUI'
  const BTC = '0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC'
  const queryAddress = '0xA11ce'

  const output = await sdk.swap.getLPCoinAmount({
    address: queryAddress,
    coinX: SUI,
    coinY: BTC,
  })

  /**
    output type:
    {
      coinX: AptosResourceType
      coinY: AptosResourceType
      lpCoin: AptosResourceType
      value: string
    }
   */
})()

About

πŸ›  An SDK for building applications on top of AnimeSwap SUI v1

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published