@solworks/sujiko-sdk
v0.2.0-alpha.8
Published
SDK for interacting with Sujiko on Solana
Downloads
120
Readme
Sujiko v1 Client Library
TypeScript client library for interacting with Sujiko v1.
Installation
Using npm:
npm install @solworks/sujiko-sdk
Using yarn:
yarn add @solworks/sujiko-sdk
Usage
- Initialise SDK
import { SDK, Decimal, Side } from "@solworks/sujiko-sdk";
import * as anchor from "@coral-xyz/anchor";
// set anchor provider
const provider = anchor.AnchorProvider.env();
// lazy build sdk
let sdk = await SDK.build({
connection: provider.connection,
wallet: provider.wallet
// devnet: true // use devnet program id
});
- Get markets
// fetch clearing house and markets list
let ch = await sdk.getClearingHouse();
let marketsList = await sdk.getMarketsList();
// pretty format clearing house
let clearingHouse = sdk.prettyFormat(
ch,
marketsList,
// true // excludes buffers
);
console.log(clearingHouse);
- Create user if not exists
// update with mint of Sujiko Warrior owned by user
let mint = new PublicKey("...");
// check if user exists
let user = await sdk.getUser(provider.wallet.publicKey);
// create user if not exists
if (!user) {
await sdk.initializeUser(
provider.wallet.publicKey,
mint
);
}
// get user
user = await sdk.getUser(provider.wallet.publicKey);
// pretty format user
let prettyUser = sdk.prettyFormatUser({ user: user!, filtered: true });
console.log(prettyUser);
- Deposit all collateral
// only usdc supported (collateralIndex = 0)
let collateralIndex = 0;
// get token account and balance
let ta = sdk.getTokenAccount(provider.wallet.publicKey, marketsList.collaterals[collateralIndex].mint);
let balance = await sdk.connection.getTokenAccountBalance(ta);
// deposit all
let toDeposit = Decimal.newScaled(balance.value.amount, marketsList.collaterals[collateralIndex].mintScale);
const sig = await sdk.deposit({
owner: provider.wallet.publicKey, // owner must = signer
amount: toDeposit, // amount to deposit
collateralIndex: collateralIndex, // collateral index
fromUserTokenAccount: ta, // from user token account
});
console.log("sig", sig);
- Place trade
// place trade in MADSLADS-PERP market for 1 contract long
// NOTE: order is executed asynchronously + takes >=5 slots before being executed
const market = marketsList.markets.find(m => m.name === "MADSLADS-PERP")!;
const size = 1; // 1 contract (i.e. 1 MADSLADS-PERP)
const sig = await sdk.createOrder({
owner: provider.wallet.publicKey, // owner must = signer
marketIndex: market.index, // alternatively use 0 for MADSLADS-PERP
orderType: OrderType.Market, // only Market or TriggerMarket supported currently (case sensitive)
side: Side.Buy, // one of Buy or Sell (case sensitive)
size: Decimal.fromSize(size) // size of order, do not scale when using fromSize
});
console.log("sig", sig);