@chopsuilab/sui-v1-sdk
TypeScript icon, indicating that this package has built-in type declarations

1.0.7 • Public • Published

ChopSUILab Sui v1 Protocol SDK

The typescript SDK for ChopSUILab Sui v1 protocol.

Installation

yarn add "@chopsuilab/sui-v1-sdk"

Usage Example

Init SDK

import SDK, { NetworkType } from "@chopsuilab/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
    }
   */
})();

Package Sidebar

Install

npm i @chopsuilab/sui-v1-sdk

Weekly Downloads

2

Version

1.0.7

License

GPL-3.0-or-later

Unpacked Size

221 kB

Total Files

69

Last publish

Collaborators

  • elthworth