# @project-serum/serum

> Library for interacting with the serum dex

Latest version **0.13.65** (published 2022-04-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install @project-serum/serum
pnpm add @project-serum/serum
yarn add @project-serum/serum
bun add @project-serum/serum
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.13.65 |
| Published | 2022-04-25 |
| First published | 2020-08-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=10 |
| Dependencies | 5 |
| Unpacked size | 328.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 272 |
| Maintainers | garywang, nishadsingh, nathanielparke, armaniferrante, jhlx |

## Links

- npm: https://www.npmjs.com/package/@project-serum/serum
- Repository: https://github.com/project-serum/serum-ts
- Homepage: https://github.com/project-serum/serum-ts#readme
- Issues: https://github.com/project-serum/serum-ts/issues
- npm.io page: https://npm.io/package/@project-serum/serum

## Dependencies (5)

- [bn.js](https://npm.io/package/bn.js.md) ^5.1.2
- [buffer-layout](https://npm.io/package/buffer-layout.md) ^1.2.0
- [@solana/web3.js](https://npm.io/package/@solana/web3.js.md) ^1.21.0
- [@solana/spl-token](https://npm.io/package/@solana/spl-token.md) ^0.1.6
- [@project-serum/anchor](https://npm.io/package/@project-serum/anchor.md) ^0.11.1

## Recent versions

- 0.13.65 (latest) — 2022-04-25
- 0.13.64 — 2022-04-07
- 0.13.63 — 2022-04-05
- 0.13.62 — 2022-04-03
- 0.13.61 — 2021-12-06
- 0.13.60 — 2021-09-22
- 0.13.59 — 2021-09-08
- 0.13.58 — 2021-09-02
- 0.13.57 — 2021-08-12
- 0.13.56 — 2021-08-12
- 0.13.55 — 2021-08-03
- 0.13.54 — 2021-07-22
- 0.13.53 — 2021-07-21
- 0.13.52 — 2021-07-19
- 0.13.51 — 2021-07-19
- … 120 more at https://npm.io/package/@project-serum/serum/versions

## README

[![npm (scoped)](https://img.shields.io/npm/v/@project-serum/serum)](https://www.npmjs.com/package/@project-serum/serum)
[![Build Status](https://travis-ci.com/project-serum/serum-js.svg?branch=master)](https://travis-ci.com/project-serum/serum-js)

# Serum JS Client Library

JavaScript client library for interacting with the Project Serum DEX.

## Installation

Using npm:

```
npm install @solana/web3.js @project-serum/serum
```

Using yarn:

```
yarn add @solana/web3.js @project-serum/serum
```

## Usage

```js
import { Account, Connection, PublicKey } from '@solana/web3.js';
import { Market } from '@project-serum/serum';

let connection = new Connection('https://testnet.solana.com');
let marketAddress = new PublicKey('...');
let programAddress = new PublicKey("...");
let market = await Market.load(connection, marketAddress, {}, programAddress);

// Fetching orderbooks
let bids = await market.loadBids(connection);
let asks = await market.loadAsks(connection);
// L2 orderbook data
for (let [price, size] of bids.getL2(20)) {
  console.log(price, size);
}
// Full orderbook data
for (let order of asks) {
  console.log(
    order.orderId,
    order.price,
    order.size,
    order.side, // 'buy' or 'sell'
  );
}

// Placing orders
let owner = new Account('...');
let payer = new PublicKey('...'); // spl-token account
await market.placeOrder(connection, {
  owner,
  payer,
  side: 'buy', // 'buy' or 'sell'
  price: 123.45,
  size: 17.0,
  orderType: 'limit', // 'limit', 'ioc', 'postOnly'
});

// Retrieving open orders by owner
let myOrders = await market.loadOrdersForOwner(connection, owner.publicKey);

// Cancelling orders
for (let order of myOrders) {
  await market.cancelOrder(connection, owner, order);
}

// Retrieving fills
for (let fill of await market.loadFills(connection)) {
  console.log(fill.orderId, fill.price, fill.size, fill.side);
}

// Settle funds
for (let openOrders of await market.findOpenOrdersAccountsForOwner(
  connection,
  owner.publicKey,
)) {
  if (openOrders.baseTokenFree > 0 || openOrders.quoteTokenFree > 0) {
    // spl-token accounts to which to send the proceeds from trades
    let baseTokenAccount = new PublicKey('...');
    let quoteTokenAccount = new PublicKey('...');

    await market.settleFunds(
      connection,
      owner,
      openOrders,
      baseTokenAccount,
      quoteTokenAccount,
    );
  }
}
```

---
_Source: https://npm.io/package/@project-serum/serum · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
