@project-serum/pool
TypeScript icon, indicating that this package has built-in type declarations

0.2.3 • Public • Published

npm (scoped) Build Status Documentation Discord Chat License

Serum Pools JS Library

JavaScript client library for interacting with Project Serum Pools.

Installation

Using npm:

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

Using yarn:

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

Usage

Load pool info

Fetch and decode pool state:

import { Connection, PublicKey } from '@solana/web3.js';
import { loadPoolInfo, PoolTransactions } from '@project-serum/pool';

let connection = new Connection('...');
let poolAddress = new PublicKey('...'); // Address of the pool.

let poolInfo = await loadPoolInfo(connection, poolAddress);
console.log(poolInfo.state);

See loadPoolInfo() and PoolState for details.

If you already have the pool state data and just need to decode it, you can call isPoolState() and decodePoolState() directly.

import { decodePoolState } from '@project-serum/pool';

// Pool state account data, e.g. from Connection.getAccountInfo or Connection.onAccountChange
let data = new Buffer('...');

let poolState = decodePoolState(data);
console.log(poolState);

See PoolState for details on what the pool state contains.

Get pool basket

Use getPoolBasket() to fetch the current pool basket (the quantity of each token needed to create N pool tokens or the quantity of each token received for redeeming N pool tokens).

import { Connection, PublicKey } from '@solana/web3.js';
import { loadPoolInfo, getPoolBasket } from '@project-serum/pool';
import BN from 'bn.js';

let connection = new Connection('...');
let poolAddress = new PublicKey('...'); // Address of the pool.

let poolInfo = await loadPoolInfo(connection, poolAddress);
let basket = await getPoolBasket(
  connection,
  poolInfo,
  { create: new BN(100) },
  // Arbitrary SOL address, can be anything as long as it has nonzero SOL
  // and is not a program-owned address.
  new PublicKey('...'),
);

console.log(basket);

Create pool tokens

Send a transaction to create pool tokens:

import { Account, Connection, PublicKey } from '@solana/web3.js';
import { loadPoolInfo, PoolTransactions } from '@project-serum/pool';
import BN from 'bn.js';

let connection = new Connection('...');
let poolAddress = new PublicKey('...'); // Address of the pool.
let payer = new Account('...'); // Account to pay for solana fees.

let poolInfo = await loadPoolInfo(connection, poolAddress);
let { transaction, signers } = PoolTransactions.execute(
  poolInfo,
  {
    // Number of tokens to create.
    create: new BN(100),
  },
  {
    // Spl-token account to send the created tokens.
    poolTokenAccount: new PublicKey('...'),
    // Spl-token accounts to pull funds from.
    assetAccounts: [new PublicKey('...'), new Public('...')],
    // Owner of poolTokenAccount and assetAccounts.
    owner: payer.publicKey,
  },
  // Expected creation cost.
  [new BN(10), new BN(10)],
);
await connection.sendTransaction(transaction, [payer, ...signers]);

See PoolTransactions.execute for details.

Redeem pool tokens

Send a transaction to redeem pool tokens:

import { Account, Connection, PublicKey } from '@solana/web3.js';
import { loadPoolInfo, PoolTransactions } from '@project-serum/pool';
import BN from 'bn.js';

let connection = new Connection('...');
let poolAddress = new PublicKey('...'); // Address of the pool.
let payer = new Account('...'); // Account to pay for solana fees.

let poolInfo = await loadPoolInfo(connection, poolAddress);
let { transaction, signers } = PoolTransactions.execute(
  poolInfo,
  {
    // Number of tokens to redeem.
    redeem: new BN(100),
  },
  {
    // Spl-token account to pull the pool tokens to redeem from.
    poolTokenAccount: new PublicKey('...'),
    // Spl-token accounts to send the redemption proceeds.
    assetAccounts: [new PublicKey('...'), new Public('...')],
    // Owner of poolTokenAccount and assetAccounts.
    owner: payer.publicKey,
  },
  // Expected redemption proceeds.
  [new BN(10), new BN(10)],
);
await connection.sendTransaction(transaction, [payer, ...signers]);

See PoolTransactions.execute for details.

API Reference

API Reference

Readme

Keywords

none

Package Sidebar

Install

npm i @project-serum/pool

Weekly Downloads

22

Version

0.2.3

License

Apache-2.0

Unpacked Size

245 kB

Total Files

32

Last publish

Collaborators

  • henrye
  • armaniferrante