@project-serum/serum
Advanced tools
Comparing version 0.13.21 to 0.13.22
@@ -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 = [ |
@@ -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'); |
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
207187
0
3167
40
94