Socket
Socket
Sign inDemoInstall

@project-serum/serum

Package Overview
Dependencies
Maintainers
4
Versions
135
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@project-serum/serum - npm Package Compare versions

Comparing version 0.13.21 to 0.13.22

43

lib/instructions.d.ts

@@ -42,2 +42,23 @@ export function encodeInstruction(instruction: any): Buffer;

}): TransactionInstruction;
static newOrderV3({ market, openOrders, payer, owner, requestQueue, eventQueue, bids, asks, baseVault, quoteVault, side, limitPrice, maxBaseQuantity, maxQuoteQuantity, orderType, clientId, programId, selfTradeBehavior, feeDiscountPubkey, }: {
market: any;
openOrders: any;
payer: any;
owner: any;
requestQueue: any;
eventQueue: any;
bids: any;
asks: any;
baseVault: any;
quoteVault: any;
side: any;
limitPrice: any;
maxBaseQuantity: any;
maxQuoteQuantity: any;
orderType: any;
clientId: any;
programId: any;
selfTradeBehavior: any;
feeDiscountPubkey?: any;
}): TransactionInstruction;
static matchOrders({ market, requestQueue, eventQueue, bids, asks, baseVault, quoteVault, limit, programId, }: {

@@ -71,2 +92,14 @@ market: any;

}): TransactionInstruction;
static cancelOrderV2({ market, bids, asks, eventQueue, openOrders, owner, side, orderId, openOrdersSlot, programId, }: {
market: any;
bids: any;
asks: any;
eventQueue: any;
openOrders: any;
owner: any;
side: any;
orderId: any;
openOrdersSlot: any;
programId: any;
}): TransactionInstruction;
static cancelOrderByClientId({ market, openOrders, owner, requestQueue, clientId, programId, }: {

@@ -80,2 +113,12 @@ market: any;

}): TransactionInstruction;
static cancelOrderByClientIdV2({ market, openOrders, owner, bids, asks, eventQueue, clientId, programId, }: {
market: any;
openOrders: any;
owner: any;
bids: any;
asks: any;
eventQueue: any;
clientId: any;
programId: any;
}): TransactionInstruction;
static settleFunds({ market, openOrders, owner, baseVault, quoteVault, baseWallet, quoteWallet, vaultSigner, programId, referrerQuoteWallet, }: {

@@ -82,0 +125,0 @@ market: any;

@@ -39,2 +39,14 @@ "use strict";

exports.INSTRUCTION_LAYOUT.inner.addVariant(6, buffer_layout_1.struct([layout_1.u64('clientId')]), 'cancelOrderByClientId');
exports.INSTRUCTION_LAYOUT.inner.addVariant(10, buffer_layout_1.struct([
layout_1.sideLayout('side'),
layout_1.u64('limitPrice'),
layout_1.u64('maxBaseQuantity'),
layout_1.u64('maxQuoteQuantity'),
layout_1.selfTradeBehaviorLayout('selfTradeBehavior'),
layout_1.orderTypeLayout('ordertype'),
layout_1.u64('clientId'),
buffer_layout_1.u16('limit'),
]), 'newOrderV3');
exports.INSTRUCTION_LAYOUT.inner.addVariant(11, buffer_layout_1.struct([layout_1.sideLayout('side'), layout_1.u128('orderId')]), 'cancelOrderV2');
exports.INSTRUCTION_LAYOUT.inner.addVariant(12, buffer_layout_1.struct([layout_1.u64('clientId')]), 'cancelOrderByClientIdV2');
function encodeInstruction(instruction) {

@@ -104,2 +116,41 @@ const b = Buffer.alloc(100);

}
static newOrderV3({ market, openOrders, payer, owner, requestQueue, eventQueue, bids, asks, baseVault, quoteVault, side, limitPrice, maxBaseQuantity, maxQuoteQuantity, orderType, clientId, programId, selfTradeBehavior, feeDiscountPubkey = null, }) {
const keys = [
{ pubkey: market, isSigner: false, isWritable: true },
{ pubkey: openOrders, isSigner: false, isWritable: true },
{ pubkey: requestQueue, isSigner: false, isWritable: true },
{ pubkey: eventQueue, isSigner: false, isWritable: true },
{ pubkey: bids, isSigner: false, isWritable: true },
{ pubkey: asks, isSigner: false, isWritable: true },
{ pubkey: payer, isSigner: false, isWritable: true },
{ pubkey: owner, isSigner: true, isWritable: false },
{ pubkey: baseVault, isSigner: false, isWritable: true },
{ pubkey: quoteVault, isSigner: false, isWritable: true },
{ pubkey: token_instructions_1.TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
{ pubkey: web3_js_1.SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
];
if (feeDiscountPubkey) {
keys.push({
pubkey: feeDiscountPubkey,
isSigner: false,
isWritable: false,
});
}
return new web3_js_1.TransactionInstruction({
keys,
programId,
data: encodeInstruction({
newOrderV3: {
side,
limitPrice,
maxBaseQuantity,
maxQuoteQuantity,
selfTradeBehavior,
orderType,
clientId,
limit: 65535,
},
}),
});
}
static matchOrders({ market, requestQueue, eventQueue, bids, asks, baseVault, quoteVault, limit, programId, }) {

@@ -149,2 +200,18 @@ return new web3_js_1.TransactionInstruction({

}
static cancelOrderV2({ market, bids, asks, eventQueue, openOrders, owner, side, orderId, openOrdersSlot, programId, }) {
return new web3_js_1.TransactionInstruction({
keys: [
{ pubkey: market, isSigner: false, isWritable: false },
{ pubkey: bids, isSigner: false, isWritable: true },
{ pubkey: asks, isSigner: false, isWritable: true },
{ pubkey: openOrders, isSigner: false, isWritable: true },
{ pubkey: owner, isSigner: true, isWritable: false },
{ pubkey: eventQueue, isSigner: false, isWritable: true },
],
programId,
data: encodeInstruction({
cancelOrderV2: { side, orderId },
}),
});
}
static cancelOrderByClientId({ market, openOrders, owner, requestQueue, clientId, programId, }) {

@@ -164,2 +231,18 @@ return new web3_js_1.TransactionInstruction({

}
static cancelOrderByClientIdV2({ market, openOrders, owner, bids, asks, eventQueue, clientId, programId, }) {
return new web3_js_1.TransactionInstruction({
keys: [
{ pubkey: market, isSigner: false, isWritable: false },
{ pubkey: bids, isSigner: false, isWritable: true },
{ pubkey: asks, isSigner: false, isWritable: true },
{ pubkey: openOrders, isSigner: false, isWritable: true },
{ pubkey: owner, isSigner: true, isWritable: false },
{ pubkey: eventQueue, isSigner: false, isWritable: true },
],
programId,
data: encodeInstruction({
cancelOrderByClientIdV2: { clientId },
}),
});
}
static settleFunds({ market, openOrders, owner, baseVault, quoteVault, baseWallet, quoteWallet, vaultSigner, programId, referrerQuoteWallet = null, }) {

@@ -166,0 +249,0 @@ const keys = [

1

lib/layout.d.ts

@@ -7,2 +7,3 @@ export function zeros(length: any): Zeros;

export function orderTypeLayout(property: any): EnumLayout;
export function selfTradeBehaviorLayout(property: any): EnumLayout;
export function accountFlagsLayout(property?: string): any;

@@ -9,0 +10,0 @@ export function setLayoutDecoder(layout: any, decoder: any): void;

@@ -7,3 +7,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.setLayoutEncoder = exports.setLayoutDecoder = exports.accountFlagsLayout = exports.orderTypeLayout = exports.sideLayout = exports.VersionedLayout = exports.WideBits = exports.u128 = exports.u64 = exports.publicKeyLayout = exports.zeros = void 0;
exports.setLayoutEncoder = exports.setLayoutDecoder = exports.accountFlagsLayout = exports.selfTradeBehaviorLayout = exports.orderTypeLayout = exports.sideLayout = exports.VersionedLayout = exports.WideBits = exports.u128 = exports.u64 = exports.publicKeyLayout = exports.zeros = void 0;
const buffer_layout_1 = require("buffer-layout");

@@ -130,2 +130,6 @@ const web3_js_1 = require("@solana/web3.js");

exports.orderTypeLayout = orderTypeLayout;
function selfTradeBehaviorLayout(property) {
return new EnumLayout({ decrementTake: 0, cancelProvide: 1, abortTransaction: 2 }, 4, property);
}
exports.selfTradeBehaviorLayout = selfTradeBehaviorLayout;
const ACCOUNT_FLAGS_LAYOUT = new WideBits();

@@ -132,0 +136,0 @@ ACCOUNT_FLAGS_LAYOUT.addBoolean('initialized');

9

lib/market.d.ts

@@ -43,6 +43,7 @@ /// <reference types="node" />

findOpenOrdersAccountsForOwner(connection: Connection, ownerAddress: PublicKey, cacheDurationMs?: number): Promise<OpenOrders[]>;
placeOrder(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, feeDiscountPubkey, }: OrderParams): Promise<string>;
placeOrder(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey, }: OrderParams): Promise<string>;
getSplTokenBalanceFromAccountInfo(accountInfo: AccountInfo<Buffer>, decimals: number): number;
get supportsSrmFeeDiscounts(): boolean;
get supportsReferralFees(): boolean;
get usesRequestQueue(): boolean;
findFeeDiscountKeys(connection: Connection, ownerAddress: PublicKey, cacheDurationMs?: number): Promise<Array<{

@@ -58,3 +59,3 @@ pubkey: PublicKey;

}>;
makePlaceOrderTransaction<T extends PublicKey | Account>(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, feeDiscountPubkey, }: OrderParams<T>, cacheDurationMs?: number, feeDiscountPubkeyCacheDurationMs?: number): Promise<{
makePlaceOrderTransaction<T extends PublicKey | Account>(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey, }: OrderParams<T>, cacheDurationMs?: number, feeDiscountPubkeyCacheDurationMs?: number): Promise<{
transaction: Transaction;

@@ -64,3 +65,3 @@ signers: Account[];

}>;
makePlaceOrderInstruction<T extends PublicKey | Account>(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, feeDiscountPubkey, }: OrderParams<T>): TransactionInstruction;
makePlaceOrderInstruction<T extends PublicKey | Account>(connection: Connection, { owner, payer, side, price, size, orderType, clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey, selfTradeBehavior, }: OrderParams<T>): TransactionInstruction;
private _sendTransaction;

@@ -110,3 +111,5 @@ cancelOrderByClientId(connection: Connection, owner: Account, openOrders: PublicKey, clientId: BN): Promise<string>;

openOrdersAddressKey?: PublicKey;
openOrdersAccount?: Account;
feeDiscountPubkey?: PublicKey | null;
selfTradeBehavior?: 'decrementTake' | 'cancelProvide' | 'abortTransaction' | undefined;
}

@@ -113,0 +116,0 @@ export declare const _OPEN_ORDERS_LAYOUT_V1: any;

@@ -188,3 +188,3 @@ "use strict";

}
async placeOrder(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, feeDiscountPubkey, }) {
async placeOrder(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey, }) {
const { transaction, signers } = await this.makePlaceOrderTransaction(connection, {

@@ -199,2 +199,3 @@ owner,

openOrdersAddressKey,
openOrdersAccount,
feeDiscountPubkey,

@@ -216,2 +217,5 @@ });

}
get usesRequestQueue() {
return tokens_and_markets_1.getLayoutVersion(this._programId) <= 2;
}
async findFeeDiscountKeys(connection, ownerAddress, cacheDurationMs = 0) {

@@ -284,3 +288,3 @@ let sortedAccounts = [];

}
async makePlaceOrderTransaction(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, feeDiscountPubkey = undefined, }, cacheDurationMs = 0, feeDiscountPubkeyCacheDurationMs = 0) {
async makePlaceOrderTransaction(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey = undefined, }, cacheDurationMs = 0, feeDiscountPubkeyCacheDurationMs = 0) {
var _a, _b;

@@ -297,3 +301,4 @@ // @ts-ignore

}
else if (feeDiscountPubkey === undefined && this.supportsSrmFeeDiscounts) {
else if (feeDiscountPubkey === undefined &&
this.supportsSrmFeeDiscounts) {
useFeeDiscountPubkey = (await this.findBestFeeDiscountKey(connection, ownerAddress, feeDiscountPubkeyCacheDurationMs)).pubkey;

@@ -306,9 +311,18 @@ }

if (openOrdersAccounts.length === 0) {
const newOpenOrdersAccount = new web3_js_1.Account();
transaction.add(await OpenOrders.makeCreateAccountTransaction(connection, this.address, ownerAddress, newOpenOrdersAccount.publicKey, this._programId));
openOrdersAddress = newOpenOrdersAccount.publicKey;
signers.push(newOpenOrdersAccount);
let account;
if (openOrdersAccount) {
account = openOrdersAccount;
}
else {
account = new web3_js_1.Account();
}
transaction.add(await OpenOrders.makeCreateAccountTransaction(connection, this.address, ownerAddress, account.publicKey, this._programId));
openOrdersAddress = account.publicKey;
signers.push(account);
// refresh the cache of open order accounts on next fetch
this._openOrdersAccountsCache[ownerAddress.toBase58()].ts = 0;
}
else if (openOrdersAccount) {
openOrdersAddress = openOrdersAccount.publicKey;
}
else if (openOrdersAddressKey) {

@@ -378,3 +392,3 @@ openOrdersAddress = openOrdersAddressKey;

}
makePlaceOrderInstruction(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, feeDiscountPubkey = null, }) {
makePlaceOrderInstruction(connection, { owner, payer, side, price, size, orderType = 'limit', clientId, openOrdersAddressKey, openOrdersAccount, feeDiscountPubkey = null, selfTradeBehavior = 'decrementTake', }) {
var _a;

@@ -392,18 +406,47 @@ // @ts-ignore

}
return instructions_1.DexInstructions.newOrder({
market: this.address,
requestQueue: this._decoded.requestQueue,
baseVault: this._decoded.baseVault,
quoteVault: this._decoded.quoteVault,
openOrders: openOrdersAddressKey,
owner: ownerAddress,
payer,
side,
limitPrice: this.priceNumberToLots(price),
maxQuantity: this.baseSizeNumberToLots(size),
orderType,
clientId,
programId: this._programId,
feeDiscountPubkey,
});
if (this.usesRequestQueue) {
return instructions_1.DexInstructions.newOrder({
market: this.address,
requestQueue: this._decoded.requestQueue,
baseVault: this._decoded.baseVault,
quoteVault: this._decoded.quoteVault,
openOrders: openOrdersAccount
? openOrdersAccount.publicKey
: openOrdersAddressKey,
owner: ownerAddress,
payer,
side,
limitPrice: this.priceNumberToLots(price),
maxQuantity: this.baseSizeNumberToLots(size),
orderType,
clientId,
programId: this._programId,
feeDiscountPubkey,
});
}
else {
return instructions_1.DexInstructions.newOrderV3({
market: this.address,
bids: this._decoded.bids,
asks: this._decoded.asks,
requestQueue: this._decoded.requestQueue,
eventQueue: this._decoded.eventQueue,
baseVault: this._decoded.baseVault,
quoteVault: this._decoded.quoteVault,
openOrders: openOrdersAccount
? openOrdersAccount.publicKey
: openOrdersAddressKey,
owner: ownerAddress,
payer,
side,
limitPrice: this.priceNumberToLots(price),
maxBaseQuantity: this.baseSizeNumberToLots(size),
maxQuoteQuantity: new bn_js_1.default(this._decoded.quoteLotSize.toNumber()).mul(this.baseSizeNumberToLots(size).mul(this.priceNumberToLots(price))),
orderType,
clientId,
programId: this._programId,
selfTradeBehavior,
feeDiscountPubkey,
});
}
}

@@ -426,10 +469,24 @@ async _sendTransaction(connection, transaction, signers) {

const transaction = new web3_js_1.Transaction();
transaction.add(instructions_1.DexInstructions.cancelOrderByClientId({
market: this.address,
owner,
openOrders,
requestQueue: this._decoded.requestQueue,
clientId,
programId: this._programId,
}));
if (this.usesRequestQueue) {
transaction.add(instructions_1.DexInstructions.cancelOrderByClientId({
market: this.address,
owner,
openOrders,
requestQueue: this._decoded.requestQueue,
clientId,
programId: this._programId,
}));
}
else {
transaction.add(instructions_1.DexInstructions.cancelOrderByClientIdV2({
market: this.address,
openOrders,
owner,
bids: this._decoded.bids,
asks: this._decoded.asks,
eventQueue: this._decoded.eventQueue,
clientId,
programId: this._programId,
}));
}
return transaction;

@@ -447,12 +504,28 @@ }

makeCancelOrderInstruction(connection, owner, order) {
return instructions_1.DexInstructions.cancelOrder({
market: this.address,
owner,
openOrders: order.openOrdersAddress,
requestQueue: this._decoded.requestQueue,
side: order.side,
orderId: order.orderId,
openOrdersSlot: order.openOrdersSlot,
programId: this._programId,
});
if (this.usesRequestQueue) {
return instructions_1.DexInstructions.cancelOrder({
market: this.address,
owner,
openOrders: order.openOrdersAddress,
requestQueue: this._decoded.requestQueue,
side: order.side,
orderId: order.orderId,
openOrdersSlot: order.openOrdersSlot,
programId: this._programId,
});
}
else {
return instructions_1.DexInstructions.cancelOrderV2({
market: this.address,
owner,
openOrders: order.openOrdersAddress,
bids: this._decoded.bids,
asks: this._decoded.asks,
eventQueue: this._decoded.eventQueue,
side: order.side,
orderId: order.orderId,
openOrdersSlot: order.openOrdersSlot,
programId: this._programId,
});
}
}

@@ -459,0 +532,0 @@ async settleFunds(connection, owner, openOrders, baseWallet, quoteWallet, referrerQuoteWallet = null) {

import { PublicKey } from '@solana/web3.js';
export declare function getLayoutVersion(programId: PublicKey): 1 | 2;
export declare function getLayoutVersion(programId: PublicKey): 1 | 2 | 3;
export declare const TOKEN_MINTS: Array<{

@@ -4,0 +4,0 @@ address: PublicKey;

@@ -15,3 +15,8 @@ "use strict";

}
return 2;
else if (programId.equals(new web3_js_1.PublicKey('EUqojwWA2rd19FZrzeBncJsm38Jm1hEhE3zsmX3bRc2o'))) {
return 2;
}
else {
return 3;
}
}

@@ -18,0 +23,0 @@ exports.getLayoutVersion = getLayoutVersion;

{
"name": "@project-serum/serum",
"version": "0.13.21",
"version": "0.13.22",
"description": "Library for interacting with the serum dex",

@@ -58,4 +58,3 @@ "license": "MIT",

"maintained node versions"
],
"gitHead": "c7126ffed7707300869368ddc085b01c278f9f7a"
]
}

@@ -71,8 +71,3 @@ [![npm (scoped)](https://img.shields.io/npm/v/@project-serum/serum)](https://www.npmjs.com/package/@project-serum/serum)

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

@@ -79,0 +74,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc