npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kanalabs/perpetual-sdk

v0.4.41

Published

perpetual sdk functionalities

Downloads

524

Readme

INSTALLATION

npm i @kanalabs/perpetual-sdk

// Note --> Currently we using APT/USDC --> "marketID: 66" // Note --> Currently we using BTC/USDC --> "marketID: 67" // Note --> Currently we using ETH/USDC --> "marketID: 68"

MODULE IMPORTS

import { PerpsMarkets } from '@kanalabs/perpetual-sdk'; 
const perpsMarketsInstance = new PerpsMarkets(process.env.APTOS_PRIVATEKEY || '', Network.TESTNET, process.env.NODEREAL_TESTNET_URL);

INITIALISING THE SDK

  const config = new AptosConfig({ network: Network.TESTNET });
  const aptos = new Aptos(config);
  const account = Account.fromPrivateKey({
        privateKey: new Ed25519PrivateKey(process.env.APTOS_PRIVATEKEY || ''),
    });

TESTNET APT FAUCET

const amount = 300000000;

const response = await perpsMarketsInstance.aptTestnetFaucet(account.accountAddress, amount);

TESTNET USDC FAUCET

const amount = 300000000;
const payload = await perpsMarketsInstance.usdcTestnetFaucet(amount);
const transactionPayload = await aptos.transaction.build.simple({
     sender: account.accountAddress,
     data: payload.data
  });
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
     transaction: transactionPayload,
     signer: account,
  });
const response = await aptos.waitForTransaction({
     transactionHash: committedTxn.hash,
  });

DEPOSIT QUOTE COIN (checking)

  const marketId = 12;
  const amount = 50000000; //50 USDC
  const payload = perpsMarketsInstance.deposit(marketId, amount)
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

WITHDRAW QUOTE COIN

  const marketId = 12;
  const amount = 7989000;
  const payload = perpsMarketsInstance.withdraw(marketId, amount)
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// NOTE : trade-side: true for long side and false for short side direction: false for open position and true for close position

PLACE LIMIT OPEN LONG OR OPEN SHORT

  const marketId = 17;
  const tradeSide = true;
  const direction = false;
  const size = 2000;
  const price = 5000;
  const leverage = 10;
  const takeProfit = 6000;
  const stopLoss = 4000;
  const restriction = undefined;
  const payload = await perpsMarketsInstance.placeLimitOrder(marketId, tradeSide, direction, size, price, leverage, restriction, takeProfit, stopLoss);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// NOTE : trade-side: true for long side and false for short side direction: false for open position and true for close position

PLACE LIMIT CLOSE LONG OR CLOSE SHORT

  const marketId = 17;
  const tradeSide = true;
  const direction = true;
  const size = 2000;
  const price = 5000;
  const leverage = 10;
  const takeProfit = 6000;
  const stopLoss = 4000;
  const restriction = undefined;
  const payload = await perpsMarketsInstance.placeLimitOrder(marketId, tradeSide, direction, size, price, leverage, restriction, takeProfit, stopLoss);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// NOTE : trade-side: true for long side and false for short side direction: false for open position and true for close position

PLACE MARKET OPEN LONG OR OPEN SHORT

  const marketId = 12;
  const tradeSide = false;
  const direction = false;
  const size = 2000; // 2 APT
  const leverage = 10;
  const takeProfit = 4000;
  const stopLoss = 6000;
  const payload = await perpsMarketsInstance.placeMarketOrder(marketId, tradeSide, direction, size, leverage, takeProfit, stopLoss);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

PLACE MARKET CLOSE LONG OR CLOSE SHORT

  const marketId = 12;
  const tradeSide = false;
  const direction = true;
  const size = 2000;
  const leverage = 1;
  const payload = perpsMarketsInstance.placeMarketOrder(marketId, tradeSide, direction, size, leverage);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// NOTE : trade-side: true for long side and false for short side direction: false for open position and true for close position orderTypes: true for limit orders and false for market orders

PLACE MULTIPLE ORDERS

  const marketId = 17;
  const orderTypes = [true, true]
  const tradeSide = [true, true];
  const direction = [false, false];
  const size = [2000, 5000];
  const price = [5000, 6000];
  const leverage = [10, 8];
  const takeProfit = [6000, 8000];
  const stopLoss = [4000, 3000];
  const restrictions = [undefined, undefined];
  const payload = await perpsMarketsInstance.placeMultipleOrders(marketId, orderTypes, tradeSides, directions, sizes, prices, leverages, restrictions, takeProfits, stopLosses);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// NOTE : trade-side: true for long side and false for short side direction: false for open position and true for close position orderTypes: true for limit orders and false for market orders

CANCEL AND PLACE MULTIPLE ORDERS

  const marketId = 17;
  const orderIds = ['11529215609061372858372', '11510769146441165185932'];
  const orderSides = [true, false];
  const orderTypes = [true, true]
  const tradeSide = [true, true];
  const direction = [false, false];
  const size = [2000, 5000];
  const price = [5000, 6000];
  const leverage = [10, 8];
  const takeProfit = [6000, 8000];
  const stopLoss = [4000, 3000];
  const restrictions = [undefined, undefined];
  const payload = await perpsMarketsInstance.cancelAndlaceMultipleOrders(marketId, orderIds, orderSides, orderTypes, tradeSides, directions, sizes, prices, leverages, restrictions, takeProfits, stopLosses);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

ADD INSURANCE

  const marketId = 17;
  const amount = 1000;
  const payload = await perpsMarketsInstance.addInsurance(marketId, amount);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

UPDATE TAKE PROFIT AND STOP LOSS

  const marketId = 17;
  const newTakeProfitPrice = 7000;
  const newStopLossPrice = 4500;
  const payload = await perpsMarketsInstance.updateTakeProfitAndStopLoss(marketId, newTakeProfitPrice, newStopLossPrice);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

// Note : orderSides: true for long side and false for short side

CANCELING AN MULTIPLE ORDERS

  const marketId = 3;
  const orderIds = ['368935022224564295536', '368935022224564295537'];
  const orderSides = [true, false];
  const payload = perpsMarketsInstance.cancelMultipleOrders(marketId, orderIds, orderSides);
  const transactionPayload = await aptos.transaction.build.simple({
    sender: account.accountAddress,
    data: payload.data
  });
  const committedTxn = await aptos.transaction.signAndSubmitTransaction({
    transaction: transactionPayload,
    signer: account,
  });
  const response = await aptos.waitForTransaction({
    transactionHash: committedTxn.hash,
  });

GET ORDER BOOK

  const marketId = 10;
  const maxAsks = 100;
  const maxBids = 100;
  const orderBook = await perpsMarketsInstance.orderBook(marketId, maxAsks, maxBids);
  const viewOptions = {
       payload: orderBook.data,
  };
  const response = await aptos.view(viewOptions);

Example Response

{
 "asks": [
      {
        "custodian_id": "0",
        "market_id": "12",
        "order_id": "7268018150302766077060",
        "price": "5252",
        "remaining_size": "1888916",
        "side": true,
        "user": "0x7676c6ad191680ee72a03f724aa750a66a9570ca90c7b6861c94a7c2c4ec5515"
      },
      {
        "custodian_id": "0",
        "market_id": "12",
        "order_id": "7304911497704106890377",
        "price": "5257",
        "remaining_size": "2010119",
        "side": true,
        "user": "0x7676c6ad191680ee72a03f724aa750a66a9570ca90c7b6861c94a7c2c4ec5515"
      }
    ],
    "bids": [
      {
        "custodian_id": "0",
        "market_id": "12",
        "order_id": "7249570702494370108524",
        "price": "5228",
        "remaining_size": "1573323",
        "side": false,
        "user": "0x7676c6ad191680ee72a03f724aa750a66a9570ca90c7b6861c94a7c2c4ec5515"
      },
      {
        "custodian_id": "0",
        "market_id": "12",
        "order_id": "7286464612811304604775",
        "price": "5223",
        "remaining_size": "1955227",
        "side": false,
        "user": "0x7676c6ad191680ee72a03f724aa750a66a9570ca90c7b6861c94a7c2c4ec5515"
      }
    ]
  }

GET OPEN ORDERS

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const orderType = 'open';
  const marketId = 10;
  const openOrders = await perpsMarketsInstance.getOpenOrders(address, orderType, marketId);

Example Response

{
  "asks": [
    {
      "marketOrderId": "534955718883655291784",
      "marketSize": "1000",
      "marketPrice": "5000",
      "counter": "29",
      "leverage": 2,
      "timestamp": "2024-09-29T19:23:56.113842+00:00",
      "tradeType": 1,
      "takeProfit": "6000",
      "stopLoss": "4000",
     }
  ],
  "bids": [
    {
      "marketOrderId": "534955718883655291784",
      "marketSize": "1000",
      "marketPrice": "5000",
      "counter": "29",
      "leverage": 2,
      "timestamp": "2024-09-29T19:23:56.113842+00:00",
      "tradeType": 1,
      "takeProfit": "6000",
      "stopLoss": "4000",
     }
  ]
}

GET LIMIT ORDER HISTORY

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const type = 'limit';
  const marketId = 10;
  const perpsMarketsInstance = new PerpsMarkets(process.env.APTOS_PRIVATEKEY || '', Network.TESTNET);
  const orderHistory = await perpsMarketsInstance.orderHistory(address, type, marketId);

Example Response

[
  {
    "txn_version": 1074962988,
    "event_idx": 0,
    "time": "2024-05-06T17:43:06.581062+00:00",
    "market_id": 10,
    "user": "0x925366e03a856f25f47873222c6707eaeb00f79898fe904c357dc4b15e8718a1",
    "custodian_id": 2,
    "order_id": "1844674548125623391112",
    "side": false,
    "integrator": "0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
    "initial_size": 2000,
    "price": 5000,
    "restriction": 0,
    "self_match_behavior": 0,
    "size": 2000
  }
]

GET MARKET ORDER HISTORY

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const type = 'market';
  const marketId = 10;
  const orderHistory = await perpsMarketsInstance.orderHistory(address, type, marketId);

Example Response

[
  {
    "txn_version": 1074962096,
    "event_idx": 0,
    "market_id": 10,
    "time": "2024-05-06T17:42:24.052761+00:00",
    "order_id": "1826227663297245609984",
    "user": "0x925366e03a856f25f47873222c6707eaeb00f79898fe904c357dc4b15e8718a1",
    "custodian_id": 2,
    "integrator": "0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
    "direction": "buy",
    "size": 2000,
    "self_match_behavior": 0
  },
  {
    "txn_version": 1074839427,
    "event_idx": 0,
    "market_id": 10,
    "time": "2024-05-06T16:05:43.990861+00:00",
    "order_id": "1789334175149826506752",
    "user": "0x925366e03a856f25f47873222c6707eaeb00f79898fe904c357dc4b15e8718a1",
    "custodian_id": 2,
    "integrator": "0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
    "direction": "sell",
    "size": 2000,
    "self_match_behavior": 0
  }
]

GET ALL ORDER HISTORY

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const type = 'market';
  const marketId = 10;
  const orderHistory = await perpsMarketsInstance.orderHistory(address, type, marketId);

Example Response

[
  {
    "market_id": 10,
    "order_id": "1844674548125623391112",
    "created_at": "2024-05-06T17:43:06.581062+00:00",
    "last_updated_at": "2024-05-06T19:10:20.215508+00:00",
    "integrator": "0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
    "total_filled": 0,
    "remaining_size": 2000,
    "order_status": "cancelled",
    "order_type": "limit",
    "user": "0x925366e03a856f25f47873222c6707eaeb00f79898fe904c357dc4b15e8718a1",
    "direction": "bid",
    "price": 5000,
    "average_execution_price": null,
    "custodian_id": 2,
    "self_match_behavior": 0,
    "restriction": 0,
    "last_increase_stamp": null,
    "min_base": null,
    "max_base": null,
    "min_quote": null,
    "max_quote": null,
    "total_fees_paid_in_quote_subunits": 0
  },
  {
    "market_id": 10,
    "order_id": "1826227663297245609984",
    "created_at": "2024-05-06T17:42:24.052761+00:00",
    "last_updated_at": "2024-05-06T17:42:24.052761+00:00",
    "integrator": "0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
    "total_filled": 2000,
    "remaining_size": 0,
    "order_status": "closed",
    "order_type": "market",
    "user": "0x925366e03a856f25f47873222c6707eaeb00f79898fe904c357dc4b15e8718a1",
    "direction": "buy",
    "price": null,
    "average_execution_price": 5000,
    "custodian_id": 2,
    "self_match_behavior": 0,
    "restriction": null,
    "last_increase_stamp": null,
    "min_base": null,
    "max_base": null,
    "min_quote": null,
    "max_quote": null,
    "total_fees_paid_in_quote_subunits": 5000,
    "leverage": 2,
    "trade_type": 2,
    "timestamp": "2024-09-24T13:49:40.000Z"
  }
]

GET MARKET INFO

  const marketId = 12;
  const response = await perpsMarketsInstance.getMarketInfo(marketId);

Example Response

{
  [
   {
    "market_id": "47",
    "base_name": "APT/USDC",
    "quote_type": "0x197b9c79f40089f150e3c493edb8cf145efec6bd6b0474f3b08ad738549fa1d1::asset::USDC",
    "lot_size": "100000",
    "tick_size": "1",
    "min_lots": "500",
    "quote_precision": "3",
    "base_decimals": "8",
    "quote_decimals": "6",
    "maintenance_margin": "300",
    "max_leverage": "20",
    "counter": "4"
   }
  ]
}

VIEW POSITIONS

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const response = await perpsMarketsInstance.viewPositions(address, marketId);

Example Response

{
   "longPosition": {
        "position": "1",
        "collateral": "2500000",
        "quote_deposit": "5000000",
        "entry_price": "5000",
        "exit_price": "0",
        "liquidation_price": "2577",
        "oracle_price": "818152674",
        "leverage": "2",
        "open_size": "100000000",
        "close_size": "0",
        "filled_open_size": "100000000",
        "filled_close_size": "0",
        "take_profit_price": "",
        "stop_loss_price": "",
        "close_taker_fee": "0",
        "kana_contribution": "2500000",
        "market_id": "47",
        "open_taker_fee": "0",
        "trade_id": "73786976294838206511",
        "limit_orders": []
    },
  "shortPosition": {
        "position": "2",
        "collateral": "2500000",
        "base_deposit": "100000000",
        "entry_price": "5000",
        "exit_price": "0",
        "liquidation_price": "7282",
        "oracle_price": "818125000",
        "leverage": "2",
        "open_size": "100000000",
        "close_size": "0",
        "filled_open_size": "100000000",
        "filled_close_size": "0",
        "take_profit_price": "",
        "stop_loss_price": "",
        "close_taker_fee": "0",
        "collateral_cover": "2500000",
        "market_id": "47",
        "open_taker_fee": "2500",
        "trade_id": "92233720368547758127",
        "trade_value": "4997500",
        "limit_orders": []
    }
}

UPDATE VIEW POSITION

  const address = '0xbd9c426a78b43441fd949044963aaefc383678be70dbef773f802f4b1ba34009';
  const marketId = 10;
  const updatePnl = await perpsMarketsInstance.updatePosition(address, marketId);
  const viewOptions = {
       payload: updatePnl.data,
  };
  const response = await aptos.view(viewOptions);

CANDLE STICK DATA

  const resolutions = await perpsMarketsInstance.getCandleStickData(900,3)

Example Response

  [
  {
    "market_id": 12,
    "resolution": 900,
    "start_time": "2023-11-06T10:45:00+00:00",
    "open": 6589,
    "high": 6589,
    "low": 6589,
    "close": 6589,
    "volume": 42828500
  },
  {
    "market_id": 12,
    "resolution": 900,
    "start_time": "2023-11-06T10:30:00+00:00",
    "open": 6589,
    "high": 6589,
    "low": 6589,
    "close": 6589,
    "volume": 167505558
  },
  {
    "market_id": 12,
    "resolution": 900,
    "start_time": "2023-11-06T10:15:00+00:00",
    "open": 6589,
    "high": 6589,
    "low": 6589,
    "close": 6589,
    "volume": 42828500
  }
]

GET PYTH ORACLE PRICE

  const marketId = 17;
  const getPythOraclePrice = await perpsMarketsInstance.getPythOraclePrice(marketId);

Example Response

{
  "success": "true",
  "message": "Fetched Latest Pyth Oracle Price Successfully",
  "data": "885514423"
}

GET LAST PLACED EXECUTION PRICE

  const marketId = 17;
  const getLastPrice = await perpsMarketsInstance.getLastExecutionPrice(marketId);

Example Response

{
  "success": "true",
  "message": "Fetched Last Execution Price Successfully",
  "data": "10900"
}

GET MARKET ORDER BEST BIDS AND ASKS

  const marketId = 17;
  const price = await perpsMarketsInstance.getMarketPrice(marketId);

Example Response

{
  "success": "true",
  "message": "Fetched Market Price Successfully",
  "bestAskPrice": "BigNumber { s: 1, e: 4, c: [ 11000 ] }",
  "bestBidPrice": "BigNumber { s: 1, e: 4, c: [ 10900 ] }"
}

GET TRADING ACCOUNT BALANCE

  const marketId = 17;
  const address = '0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770';
  const accountBalance = await perpsMarketsInstance.getTradingAccountBalance(marketId,address);

Example Response

{
  "success": true,
  "message": "Fetched Trading Account Balance Successfully",
  "data": "47500000"
}

GET TRANSACTIONS FOR GIVEN ORDER ID

    const marketId = 36;
    const orderId = '10957365979783473659904';
    const type = 'taker';
    const getTransactionsForOrderId = await perpsMarketsInstance.getTransactionsForOrderId(marketId,orderId, type);

Example Response

[
    {
        "txn_version": "6027200785",
        "event_idx": "1",
        "emit_address": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
        "time": "2024-09-23T04:54:02.663068+00:00",
        "maker_address": "0x9b557d73eb93298afeee7bf6b12764d67d3712a8d514f6d35d1c50ebd1ec2385",
        "maker_custodian_id": "15",
        "maker_order_id": "9832115154275799138304",
        "maker_side": "true",
        "market_id": "36",
        "price": "7719",
        "sequence_number_for_trade": "0",
        "size": "1000",
        "taker_address": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
        "taker_custodian_id": "15",
        "taker_order_id": "10957365979783473659904",
        "taker_quote_fees_paid": "3859"
    },
    {
        "txn_version": "6027200785",
        "event_idx": "2",
        "emit_address": "0x9b557d73eb93298afeee7bf6b12764d67d3712a8d514f6d35d1c50ebd1ec2385",
        "time": "2024-09-23T04:54:02.663068+00:00",
        "maker_address": "0x9b557d73eb93298afeee7bf6b12764d67d3712a8d514f6d35d1c50ebd1ec2385",
        "maker_custodian_id": "15",
        "maker_order_id": "9832115154275799138304",
        "maker_side": "true",
        "market_id": "36",
        "price": "7719",
        "sequence_number_for_trade": "0",
        "size": "1000",
        "taker_address": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
        "taker_custodian_id": "15",
        "taker_order_id": "10957365979783473659904",
        "taker_quote_fees_paid": "3859"
    }
]