@forbitswapamm/matthewbyun
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

ForbitSwap v1 Protocol SDK

Installation

yarn add "matthewyun"

Usage Example

Init SDK

import { SDK } from "matthewyun";

const sdk = new SDK(
  "https://fullnode.devnet.aptoslabs.com",
  NetworkType.Devnet
);

Is pair exist

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";

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

Add liquidity rate calculation and tx payload.

If pair not exists, tx will create pair first

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";

  const isPairExist = await sdk.swap.isPairExist(APTOS, BTC);

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

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

    const txPayload = sdk.swap.addLiquidityPayload({
      coinX: APTOS,
      coinY: BTC,
      amountX: amountIn,
      amountY: output.amount,
      slippage: 0.05, // 5%
    });

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

    /**
      output type: tx payload
    */
  }
})();

Remove liquidity rate calculation and tx payload for existed pairs

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";
  const lpAmount = 1e6;

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

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

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

  /**
    output type: tx payload
   */
})();

Swap (exact in) rate calculation and tx payload.

Swap exact coin to coin mode

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";
  const aptosAmount = 1e6;

  const trades = await sdk.route.getRouteSwapExactCoinForCoin({
    fromCoin: APTOS,
    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({
    trade: bestTrade,
    slippage: 0.05, // 5%
  });

  /**
    output type: tx payload
   */
})();

Swap (exact out) rate calculation and tx payload.

Swap coin to exact coin mode

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";
  const btcAmount = 1e6;

  const trades = await sdk.route.getRouteSwapCoinForExactCoin({
    fromCoin: APTOS,
    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({
    trade: bestTrade,
    slippage: 0.05, // 5%
  });

  /**
    output type: tx payload
   */
})();

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 APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";
  const queryAddress = "0xA11ce";

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

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

Get LPCoin apr

(async () => {
  const APTOS = "0x1::aptos_coin::AptosCoin";
  const BTC =
    "0x16fe2df00ea7dde4a63409201f7f4e536bde7bb7335526a35d05111e68aa322c::TestCoinsV1::BTC";

  const output = await sdk.swap.getLPCoinAPY({
    coinX: APTOS,
    coinY: BTC,
  });

  /**
    output type:
    {
      apr: Decimal
      windowSeconds: Decimal
    }
   */
})();

Package Sidebar

Install

npm i @forbitswapamm/matthewbyun

Weekly Downloads

1

Version

0.0.1

License

GPL-3.0-or-later

Unpacked Size

285 kB

Total Files

82

Last publish

Collaborators

  • matthewbyun