diff --git a/keeper/src/main.rs b/keeper/src/main.rs index 0261e2bfd..9995007ac 100644 --- a/keeper/src/main.rs +++ b/keeper/src/main.rs @@ -154,6 +154,9 @@ fn main() -> Result<(), anyhow::Error> { let mango_client = Arc::new(MangoClient::new(cluster, commitment, payer, admin)); + log::info!("Program Id {}", &mango_client.program().id()); + log::info!("Admin {}", &mango_client.admin.to_base58_string()); + let rt = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() diff --git a/mc-release-to-devnet.sh b/mc-release-to-devnet.sh index 24627fb7d..3efa1efc3 100755 --- a/mc-release-to-devnet.sh +++ b/mc-release-to-devnet.sh @@ -2,7 +2,7 @@ set -e pipefail -rg m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD -l | xargs -I % sed -i '' 's/m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD/5V2zCYCQkm4sZc3WctiwQEAzvfAiFxyjbwCvzQnmtmkM/g' %; +# rg m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD -l | xargs -I % sed -i '' 's/m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD/5V2zCYCQkm4sZc3WctiwQEAzvfAiFxyjbwCvzQnmtmkM/g' %; WALLET_WITH_FUNDS=~/.config/solana/mango-devnet.json PROGRAM_ID=5V2zCYCQkm4sZc3WctiwQEAzvfAiFxyjbwCvzQnmtmkM diff --git a/programs/mango-v4/src/instructions/margin_trade.rs b/programs/mango-v4/src/instructions/margin_trade.rs index 86a53e3c9..1fe0a217a 100644 --- a/programs/mango-v4/src/instructions/margin_trade.rs +++ b/programs/mango-v4/src/instructions/margin_trade.rs @@ -20,6 +20,7 @@ pub struct MarginTrade<'info> { pub owner: Signer<'info>, } +// TODO: add loan fees pub fn margin_trade<'key, 'accounts, 'remaining, 'info>( ctx: Context<'key, 'accounts, 'remaining, 'info, MarginTrade<'info>>, banks_len: usize, diff --git a/programs/mango-v4/src/state/orderbook/bookside.rs b/programs/mango-v4/src/state/orderbook/bookside.rs index 929d82a00..c3e582add 100644 --- a/programs/mango-v4/src/state/orderbook/bookside.rs +++ b/programs/mango-v4/src/state/orderbook/bookside.rs @@ -2,6 +2,7 @@ use anchor_lang::prelude::*; use bytemuck::{cast, cast_mut, cast_ref}; use num_enum::{IntoPrimitive, TryFromPrimitive}; +use static_assertions::const_assert_eq; use crate::state::orderbook::bookside_iterator::BookSideIter; @@ -44,6 +45,11 @@ pub struct BookSide { pub leaf_count: usize, pub nodes: [AnyNode; MAX_BOOK_NODES], } +const_assert_eq!( + std::mem::size_of::(), + 8 + 8 * 2 + 4 + 4 + 8 + 88 * 1024 +); +const_assert_eq!(std::mem::size_of::() % 8, 0); impl BookSide { /// Iterate over all entries in the book filtering out invalid orders diff --git a/programs/mango-v4/src/state/orderbook/queue.rs b/programs/mango-v4/src/state/orderbook/queue.rs index dda51e97f..1c256950c 100644 --- a/programs/mango-v4/src/state/orderbook/queue.rs +++ b/programs/mango-v4/src/state/orderbook/queue.rs @@ -153,6 +153,8 @@ impl QueueHeader for EventQueueHeader { } pub type EventQueue = Queue; +const_assert_eq!(std::mem::size_of::(), 8 * 3 + 512 * 200); +const_assert_eq!(std::mem::size_of::() % 8, 0); const EVENT_SIZE: usize = 200; #[derive(Copy, Clone, Debug, Pod)] diff --git a/programs/mango-v4/src/util.rs b/programs/mango-v4/src/util.rs index 9307bd648..3df73c0f0 100644 --- a/programs/mango-v4/src/util.rs +++ b/programs/mango-v4/src/util.rs @@ -92,7 +92,6 @@ impl<'info> LoadZeroCopy for AccountInfo<'info> { pub fn fill16_from_str(name: String) -> Result<[u8; 16]> { let name_bytes = name.as_bytes(); - msg!("{}", name); require!(name_bytes.len() < 16, MangoError::SomeError); let mut name_ = [0u8; 16]; name_[..name_bytes.len()].copy_from_slice(name_bytes); @@ -101,7 +100,6 @@ pub fn fill16_from_str(name: String) -> Result<[u8; 16]> { pub fn fill32_from_str(name: String) -> Result<[u8; 32]> { let name_bytes = name.as_bytes(); - msg!("{}", name); require!(name_bytes.len() < 32, MangoError::SomeError); let mut name_ = [0u8; 32]; name_[..name_bytes.len()].copy_from_slice(name_bytes); diff --git a/programs/mango-v4/tests/test_perp.rs b/programs/mango-v4/tests/test_perp.rs index ae2615922..180cee254 100644 --- a/programs/mango-v4/tests/test_perp.rs +++ b/programs/mango-v4/tests/test_perp.rs @@ -151,10 +151,10 @@ async fn test_perp() -> Result<(), BanksClientError> { quote_token_index: tokens[1].index, quote_lot_size: 10, base_lot_size: 100, - init_asset_weight: 0.95, maint_asset_weight: 0.975, - init_liab_weight: 1.05, + init_asset_weight: 0.95, maint_liab_weight: 1.025, + init_liab_weight: 1.05, liquidation_fee: 0.012, maker_fee: 0.0002, taker_fee: 0.000, diff --git a/ts/client/src/accounts/group.ts b/ts/client/src/accounts/group.ts index 5a200cfd0..7ee692573 100644 --- a/ts/client/src/accounts/group.ts +++ b/ts/client/src/accounts/group.ts @@ -1,11 +1,12 @@ import { PublicKey } from '@solana/web3.js'; import { MangoClient } from '../client'; import { Bank } from './bank'; +import { PerpMarket } from './perp'; import { Serum3Market } from './serum3'; export class Group { static from(publicKey: PublicKey, obj: { admin: PublicKey }): Group { - return new Group(publicKey, obj.admin, new Map(), new Map()); + return new Group(publicKey, obj.admin, new Map(), new Map(), new Map()); } constructor( @@ -13,6 +14,7 @@ export class Group { public admin: PublicKey, public banksMap: Map, public serum3MarketsMap: Map, + public perpMarketsMap: Map, ) {} public findBank(tokenIndex: number): Bank | undefined { @@ -24,6 +26,7 @@ export class Group { public async reload(client: MangoClient) { await this.reloadBanks(client); await this.reloadSerum3Markets(client); + await this.reloadPerpMarkets(client); } public async reloadBanks(client: MangoClient) { @@ -37,4 +40,11 @@ export class Group { serum3Markets.map((serum3Market) => [serum3Market.name, serum3Market]), ); } + + public async reloadPerpMarkets(client: MangoClient) { + const perpMarkets = await client.perpGetMarket(this); + this.perpMarketsMap = new Map( + perpMarkets.map((perpMarket) => [perpMarket.name, perpMarket]), + ); + } } diff --git a/ts/client/src/accounts/mangoAccount.ts b/ts/client/src/accounts/mangoAccount.ts index 1b2c5a20f..8d278fdd1 100644 --- a/ts/client/src/accounts/mangoAccount.ts +++ b/ts/client/src/accounts/mangoAccount.ts @@ -1,3 +1,4 @@ +import { BN } from '@project-serum/anchor'; import { utf8 } from '@project-serum/anchor/dist/cjs/utils/bytes'; import { PublicKey } from '@solana/web3.js'; import { MangoClient } from '../client'; @@ -6,6 +7,7 @@ import { I80F48, I80F48Dto } from './I80F48'; export class MangoAccount { public tokens: TokenAccount[]; public serum3: Serum3Account[]; + public perps: PerpAccount[]; public name: string; static from( @@ -33,7 +35,7 @@ export class MangoAccount { obj.delegate, obj.tokens as { values: TokenAccountDto[] }, obj.serum3 as { values: Serum3AccountDto[] }, - obj.perps, + obj.perps as { accounts: PerpAccountDto[] }, obj.beingLiquidated, obj.isBankrupt, obj.accountNum, @@ -50,7 +52,7 @@ export class MangoAccount { public delegate: PublicKey, tokens: { values: TokenAccountDto[] }, serum3: { values: Serum3AccountDto[] }, - perps: unknown, + perps: { accounts: PerpAccountDto[] }, beingLiquidated: number, isBankrupt: number, accountNum: number, @@ -60,6 +62,7 @@ export class MangoAccount { this.name = utf8.decode(new Uint8Array(name)).split('\x00')[0]; this.tokens = tokens.values.map((dto) => TokenAccount.from(dto)); this.serum3 = serum3.values.map((dto) => Serum3Account.from(dto)); + this.perps = perps.accounts.map((dto) => PerpAccount.from(dto)); } async reload(client: MangoClient) { @@ -83,9 +86,40 @@ export class MangoAccount { const ta = this.findToken(bank.tokenIndex); return bank.borrowIndex.mul(ta?.indexedValue!); } + + toString(): string { + return ( + 'tokens:' + + JSON.stringify( + this.tokens.filter( + (token) => token.tokenIndex != TokenAccount.TokenIndexUnset, + ), + null, + 4, + ) + + '\nserum:' + + JSON.stringify( + this.serum3.filter( + (serum3) => + serum3.marketIndex != Serum3Account.Serum3MarketIndexUnset, + ), + null, + 4, + ) + + '\nperps:' + + JSON.stringify( + this.perps.filter( + (perp) => perp.marketIndex != PerpAccount.PerpMarketIndexUnset, + ), + null, + 4, + ) + ); + } } export class TokenAccount { + static TokenIndexUnset: number = 65535; static from(dto: TokenAccountDto) { return new TokenAccount( I80F48.from(dto.indexedValue), @@ -138,3 +172,41 @@ export class Serum3AccountDto { public reserved: number[], ) {} } + +export class PerpAccount { + static PerpMarketIndexUnset = 65535; + static from(dto: PerpAccountDto) { + return new PerpAccount( + dto.marketIndex, + dto.basePositionLots.toNumber(), + dto.quotePositionNative.val.toNumber(), + dto.bidsBaseLots.toNumber(), + dto.asksBaseLots.toNumber(), + dto.takerBaseLots.toNumber(), + dto.takerQuoteLots.toNumber(), + ); + } + + constructor( + public marketIndex: number, + public basePositionLots: number, + public quotePositionNative: number, + public bidsBaseLots: number, + public asksBaseLots: number, + public takerBaseLots: number, + public takerQuoteLots: number, + ) {} +} + +export class PerpAccountDto { + constructor( + public marketIndex: number, + public reserved: [], + public basePositionLots: BN, + public quotePositionNative: { val: BN }, + public bidsBaseLots: BN, + public asksBaseLots: BN, + public takerBaseLots: BN, + public takerQuoteLots: BN, + ) {} +} diff --git a/ts/client/src/accounts/perp.ts b/ts/client/src/accounts/perp.ts new file mode 100644 index 000000000..3b369e4cd --- /dev/null +++ b/ts/client/src/accounts/perp.ts @@ -0,0 +1,130 @@ +import { BN } from '@project-serum/anchor'; +import { utf8 } from '@project-serum/anchor/dist/cjs/utils/bytes'; +import { PublicKey } from '@solana/web3.js'; +import { I80F48, I80F48Dto } from './I80F48'; + +export class PerpMarket { + public name: string; + public quoteLotSize: number; + public baseLotSize: number; + public maintAssetWeight: I80F48; + public initAssetWeight: I80F48; + public maintLiabWeight: I80F48; + public initLiabWeight: I80F48; + public liquidationFee: I80F48; + public makerFee: I80F48; + public takerFee: I80F48; + public openInterest: number; + public seqNum: number; + public feesAccrued: I80F48; + + static from( + publicKey: PublicKey, + obj: { + name: number[]; + group: PublicKey; + oracle: PublicKey; + bids: PublicKey; + asks: PublicKey; + eventQueue: PublicKey; + quoteLotSize: BN; + baseLotSize: BN; + maintAssetWeight: I80F48Dto; + initAssetWeight: I80F48Dto; + maintLiabWeight: I80F48Dto; + initLiabWeight: I80F48Dto; + liquidationFee: I80F48Dto; + makerFee: I80F48Dto; + takerFee: I80F48Dto; + openInterest: BN; + seqNum: any; // TODO: ts complains that this is unknown for whatever reason + feesAccrued: I80F48Dto; + bump: number; + reserved: number[]; + perpMarketIndex: number; + baseTokenIndex: number; + quoteTokenIndex: number; + }, + ): PerpMarket { + return new PerpMarket( + publicKey, + obj.name, + obj.group, + obj.oracle, + obj.bids, + obj.asks, + obj.eventQueue, + obj.quoteLotSize, + obj.baseLotSize, + obj.maintAssetWeight, + obj.initAssetWeight, + obj.maintLiabWeight, + obj.initLiabWeight, + obj.liquidationFee, + obj.makerFee, + obj.takerFee, + obj.openInterest, + obj.seqNum, + obj.feesAccrued, + obj.bump, + obj.reserved, + obj.perpMarketIndex, + obj.baseTokenIndex, + obj.quoteTokenIndex, + ); + } + + constructor( + public publicKey: PublicKey, + name: number[], + public group: PublicKey, + public oracle: PublicKey, + public bids: PublicKey, + public asks: PublicKey, + public eventQueue: PublicKey, + quoteLotSize: BN, + baseLotSize: BN, + maintAssetWeight: I80F48Dto, + initAssetWeight: I80F48Dto, + maintLiabWeight: I80F48Dto, + initLiabWeight: I80F48Dto, + liquidationFee: I80F48Dto, + makerFee: I80F48Dto, + takerFee: I80F48Dto, + openInterest: BN, + seqNum: BN, + feesAccrued: I80F48Dto, + bump: number, + reserved: number[], + public perpMarketIndex: number, + public baseTokenIndex: number, + public quoteTokenIndex: number, + ) { + this.name = utf8.decode(new Uint8Array(name)).split('\x00')[0]; + this.quoteLotSize = quoteLotSize.toNumber(); + this.baseLotSize = baseLotSize.toNumber(); + this.maintAssetWeight = I80F48.from(maintAssetWeight); + this.initAssetWeight = I80F48.from(initAssetWeight); + this.maintLiabWeight = I80F48.from(maintLiabWeight); + this.initLiabWeight = I80F48.from(initLiabWeight); + this.liquidationFee = I80F48.from(liquidationFee); + this.makerFee = I80F48.from(makerFee); + this.takerFee = I80F48.from(takerFee); + this.openInterest = openInterest.toNumber(); + this.seqNum = seqNum.toNumber(); + this.feesAccrued = I80F48.from(feesAccrued); + } +} + +export class Side { + static bid = { bid: {} }; + static ask = { ask: {} }; +} + +export class OrderType { + static limit = { limit: {} }; + static immediateOrCancel = { immediateorcancel: {} }; + static postOnly = { postonly: {} }; + static market = { market: {} }; + static postOnlySlide = { postonlyslide: {} }; +} diff --git a/ts/client/src/client.ts b/ts/client/src/client.ts index 0ae000553..14e695155 100644 --- a/ts/client/src/client.ts +++ b/ts/client/src/client.ts @@ -4,8 +4,10 @@ import { Order } from '@project-serum/serum/lib/market'; import * as spl from '@solana/spl-token'; import { AccountMeta, + Keypair, MemcmpFilter, PublicKey, + SystemProgram, SYSVAR_RENT_PUBKEY, TransactionSignature, } from '@solana/web3.js'; @@ -15,6 +17,7 @@ import { Group } from './accounts/group'; import { I80F48 } from './accounts/I80F48'; import { MangoAccount } from './accounts/mangoAccount'; import { StubOracle } from './accounts/oracle'; +import { OrderType, PerpMarket, Side } from './accounts/perp'; import { Serum3Market, Serum3OrderType, @@ -621,6 +624,175 @@ export class MangoClient { ); } + /// perps + + async perpCreateMarket( + group: Group, + oraclePk: PublicKey, + perpMarketIndex: number, + name: string, + baseTokenIndex: number, + quoteTokenIndex: number, + quoteLotSize: number, + baseLotSize: number, + maintAssetWeight: number, + initAssetWeight: number, + maintLiabWeight: number, + initLiabWeight: number, + liquidationFee: number, + makerFee: number, + takerFee: number, + ): Promise { + const bids = new Keypair(); + const asks = new Keypair(); + const eventQueue = new Keypair(); + + console.log(this.program.provider.wallet.publicKey.toBase58()); + + return await this.program.methods + .perpCreateMarket( + perpMarketIndex, + name, + baseTokenIndex, + quoteTokenIndex, + new BN(quoteLotSize), + new BN(baseLotSize), + maintAssetWeight, + initAssetWeight, + maintLiabWeight, + initLiabWeight, + liquidationFee, + makerFee, + takerFee, + ) + .accounts({ + group: group.publicKey, + admin: this.program.provider.wallet.publicKey, + oracle: oraclePk, + bids: bids.publicKey, + asks: asks.publicKey, + eventQueue: eventQueue.publicKey, + payer: this.program.provider.wallet.publicKey, + }) + .preInstructions([ + SystemProgram.createAccount({ + programId: this.program.programId, + space: 8 + 90152, + lamports: + await this.program.provider.connection.getMinimumBalanceForRentExemption( + 90160, + ), + fromPubkey: this.program.provider.wallet.publicKey, + newAccountPubkey: bids.publicKey, + }), + SystemProgram.createAccount({ + programId: this.program.programId, + space: 8 + 90152, + lamports: + await this.program.provider.connection.getMinimumBalanceForRentExemption( + 90160, + ), + fromPubkey: this.program.provider.wallet.publicKey, + newAccountPubkey: asks.publicKey, + }), + SystemProgram.createAccount({ + programId: this.program.programId, + space: 8 + 102424, + lamports: + await this.program.provider.connection.getMinimumBalanceForRentExemption( + 102432, + ), + fromPubkey: this.program.provider.wallet.publicKey, + newAccountPubkey: eventQueue.publicKey, + }), + ]) + .signers([bids, asks, eventQueue]) + .rpc(); + } + + public async perpGetMarket( + group: Group, + baseTokenIndex?: number, + quoteTokenIndex?: number, + ): Promise { + const bumpfbuf = Buffer.alloc(1); + bumpfbuf.writeUInt8(255); + + const filters: MemcmpFilter[] = [ + { + memcmp: { + bytes: group.publicKey.toBase58(), + offset: 24, + }, + }, + ]; + + if (baseTokenIndex) { + const bbuf = Buffer.alloc(2); + bbuf.writeUInt16LE(baseTokenIndex); + filters.push({ + memcmp: { + bytes: bs58.encode(bbuf), + offset: 348, + }, + }); + } + + if (quoteTokenIndex) { + const qbuf = Buffer.alloc(2); + qbuf.writeUInt16LE(quoteTokenIndex); + filters.push({ + memcmp: { + bytes: bs58.encode(qbuf), + offset: 350, + }, + }); + } + + return (await this.program.account.perpMarket.all(filters)).map((tuple) => + PerpMarket.from(tuple.publicKey, tuple.account), + ); + } + + async perpPlaceOrder( + group: Group, + mangoAccount: MangoAccount, + perpMarketName: string, + side: Side, + priceLots: number, + maxBaseLots: number, + maxQuoteLots: number, + clientOrderId: number, + orderType: OrderType, + expiryTimestamp: number, + limit: number, + ) { + const perpMarket = group.perpMarketsMap.get(perpMarketName)!; + + await this.program.methods + .perpPlaceOrder( + side, + new BN((priceLots * perpMarket.baseLotSize) / perpMarket.quoteLotSize), + new BN(maxBaseLots), + new BN(maxQuoteLots), + new BN(clientOrderId), + orderType, + new BN(expiryTimestamp), + limit, + ) + .accounts({ + group: group.publicKey, + account: mangoAccount.publicKey, + perpMarket: perpMarket.publicKey, + asks: perpMarket.asks, + bids: perpMarket.bids, + eventQueue: perpMarket.eventQueue, + oracle: perpMarket.oracle, + owner: this.program.provider.wallet.publicKey, + }) + .rpc(); + } + /// static static async connect( @@ -703,6 +875,16 @@ export class MangoClient { .filter((serum3Account) => serum3Account.marketIndex !== 65535) .map((serum3Account) => serum3Account.openOrders), ); + healthRemainingAccounts.push( + ...mangoAccount.perps + .filter((perp) => perp.marketIndex !== 65535) + .map( + (perp) => + Array.from(group.perpMarketsMap.values()).filter( + (perpMarket) => perpMarket.perpMarketIndex === perp.marketIndex, + )[0].publicKey, + ), + ); return healthRemainingAccounts; } diff --git a/ts/client/src/mango_v4.ts b/ts/client/src/mango_v4.ts index 28ae149fe..612199e91 100644 --- a/ts/client/src/mango_v4.ts +++ b/ts/client/src/mango_v4.ts @@ -1,5127 +1,5025 @@ export type MangoV4 = { - "version": "0.1.0", - "name": "mango_v4", - "instructions": [ + version: '0.1.0'; + name: 'mango_v4'; + instructions: [ { - "name": "createGroup", - "accounts": [ + name: 'createGroup'; + accounts: [ { - "name": "group", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'group'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "const", - "type": "string", - "value": "Group" + kind: 'const'; + type: 'string'; + value: 'Group'; }, { - "kind": "account", - "type": "publicKey", - "path": "admin" - } - ] - } + kind: 'account'; + type: 'publicKey'; + path: 'admin'; + }, + ]; + }; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: []; }, { - "name": "registerToken", - "accounts": [ + name: 'registerToken'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "mint", - "isMut": false, - "isSigner": false + name: 'mint'; + isMut: false; + isSigner: false; }, { - "name": "bank", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'bank'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "Bank" + kind: 'const'; + type: 'string'; + value: 'Bank'; }, { - "kind": "arg", - "type": "u16", - "path": "token_index" - } - ] - } + kind: 'arg'; + type: 'u16'; + path: 'token_index'; + }, + ]; + }; }, { - "name": "vault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'vault'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "Vault" + kind: 'const'; + type: 'string'; + value: 'Vault'; }, { - "kind": "arg", - "type": "u16", - "path": "token_index" - } - ] - } + kind: 'arg'; + type: 'u16'; + path: 'token_index'; + }, + ]; + }; }, { - "name": "mintInfo", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'mintInfo'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "MintInfo" + kind: 'const'; + type: 'string'; + value: 'MintInfo'; }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "mint" - } - ] - } + kind: 'account'; + type: 'publicKey'; + account: 'Mint'; + path: 'mint'; + }, + ]; + }; }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle'; + isMut: false; + isSigner: false; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + name: 'tokenProgram'; + isMut: false; + isSigner: false; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + name: 'systemProgram'; + isMut: false; + isSigner: false; }, { - "name": "rent", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'rent'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex'; + type: 'u16'; }, { - "name": "name", - "type": "string" + name: 'name'; + type: 'string'; }, { - "name": "interestRateParams", - "type": { - "defined": "InterestRateParams" - } + name: 'interestRateParams'; + type: { + defined: 'InterestRateParams'; + }; }, { - "name": "loanFeeRate", - "type": "f32" + name: 'loanFeeRate'; + type: 'f32'; }, { - "name": "loanOriginationFeeRate", - "type": "f32" + name: 'loanOriginationFeeRate'; + type: 'f32'; }, { - "name": "maintAssetWeight", - "type": "f32" + name: 'maintAssetWeight'; + type: 'f32'; }, { - "name": "initAssetWeight", - "type": "f32" + name: 'initAssetWeight'; + type: 'f32'; }, { - "name": "maintLiabWeight", - "type": "f32" + name: 'maintLiabWeight'; + type: 'f32'; }, { - "name": "initLiabWeight", - "type": "f32" + name: 'initLiabWeight'; + type: 'f32'; }, { - "name": "liquidationFee", - "type": "f32" - } - ] + name: 'liquidationFee'; + type: 'f32'; + }, + ]; }, { - "name": "updateIndex", - "accounts": [ + name: 'updateIndex'; + accounts: [ { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] + name: 'bank'; + isMut: true; + isSigner: false; + }, + ]; + args: []; }, { - "name": "createAccount", - "accounts": [ + name: 'createAccount'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'account'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "MangoAccount" + kind: 'const'; + type: 'string'; + value: 'MangoAccount'; }, { - "kind": "account", - "type": "publicKey", - "path": "owner" + kind: 'account'; + type: 'publicKey'; + path: 'owner'; }, { - "kind": "arg", - "type": "u8", - "path": "account_num" - } - ] - } + kind: 'arg'; + type: 'u8'; + path: 'account_num'; + }, + ]; + }; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "accountNum", - "type": "u8" + name: 'accountNum'; + type: 'u8'; }, { - "name": "name", - "type": "string" - } - ] + name: 'name'; + type: 'string'; + }, + ]; }, { - "name": "closeAccount", - "accounts": [ + name: 'closeAccount'; + accounts: [ { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "solDestination", - "isMut": true, - "isSigner": false + name: 'solDestination'; + isMut: true; + isSigner: false; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: []; }, { - "name": "createStubOracle", - "accounts": [ + name: 'createStubOracle'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "oracle", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'oracle'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "StubOracle" + kind: 'const'; + type: 'string'; + value: 'StubOracle'; }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "token_mint" - } - ] - } + kind: 'account'; + type: 'publicKey'; + account: 'Mint'; + path: 'token_mint'; + }, + ]; + }; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "tokenMint", - "isMut": false, - "isSigner": false + name: 'tokenMint'; + isMut: false; + isSigner: false; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "price", - "type": { - "defined": "I80F48" - } - } - ] + name: 'price'; + type: { + defined: 'I80F48'; + }; + }, + ]; }, { - "name": "setStubOracle", - "accounts": [ + name: 'setStubOracle'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "oracle", - "isMut": true, - "isSigner": false + name: 'oracle'; + isMut: true; + isSigner: false; }, { - "name": "payer", - "isMut": true, - "isSigner": true - } - ], - "args": [ + name: 'payer'; + isMut: true; + isSigner: true; + }, + ]; + args: [ { - "name": "price", - "type": { - "defined": "I80F48" - } - } - ] + name: 'price'; + type: { + defined: 'I80F48'; + }; + }, + ]; }, { - "name": "deposit", - "accounts": [ + name: 'deposit'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "bank", - "isMut": true, - "isSigner": false + name: 'bank'; + isMut: true; + isSigner: false; }, { - "name": "vault", - "isMut": true, - "isSigner": false + name: 'vault'; + isMut: true; + isSigner: false; }, { - "name": "tokenAccount", - "isMut": true, - "isSigner": false + name: 'tokenAccount'; + isMut: true; + isSigner: false; }, { - "name": "tokenAuthority", - "isMut": false, - "isSigner": true + name: 'tokenAuthority'; + isMut: false; + isSigner: true; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "amount", - "type": "u64" - } - ] + name: 'amount'; + type: 'u64'; + }, + ]; }, { - "name": "withdraw", - "accounts": [ + name: 'withdraw'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "bank", - "isMut": true, - "isSigner": false + name: 'bank'; + isMut: true; + isSigner: false; }, { - "name": "vault", - "isMut": true, - "isSigner": false + name: 'vault'; + isMut: true; + isSigner: false; }, { - "name": "tokenAccount", - "isMut": true, - "isSigner": false + name: 'tokenAccount'; + isMut: true; + isSigner: false; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "amount", - "type": "u64" + name: 'amount'; + type: 'u64'; }, { - "name": "allowBorrow", - "type": "bool" - } - ] + name: 'allowBorrow'; + type: 'bool'; + }, + ]; }, { - "name": "marginTrade", - "accounts": [ + name: 'marginTrade'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true - } - ], - "args": [ + name: 'owner'; + isMut: false; + isSigner: true; + }, + ]; + args: [ { - "name": "banksLen", - "type": { - "defined": "usize" - } + name: 'banksLen'; + type: { + defined: 'usize'; + }; }, { - "name": "cpiData", - "type": "bytes" - } - ] + name: 'cpiData'; + type: 'bytes'; + }, + ]; }, { - "name": "serum3RegisterMarket", - "accounts": [ + name: 'serum3RegisterMarket'; + accounts: [ { - "name": "group", - "isMut": true, - "isSigner": false + name: 'group'; + isMut: true; + isSigner: false; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": false, - "isSigner": false + name: 'serumMarketExternal'; + isMut: false; + isSigner: false; }, { - "name": "serumMarket", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'serumMarket'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "Serum3Market" + kind: 'const'; + type: 'string'; + value: 'Serum3Market'; }, { - "kind": "account", - "type": "publicKey", - "path": "serum_market_external" - } - ] - } + kind: 'account'; + type: 'publicKey'; + path: 'serum_market_external'; + }, + ]; + }; }, { - "name": "quoteBank", - "isMut": false, - "isSigner": false + name: 'quoteBank'; + isMut: false; + isSigner: false; }, { - "name": "baseBank", - "isMut": false, - "isSigner": false + name: 'baseBank'; + isMut: false; + isSigner: false; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex'; + type: 'u16'; }, { - "name": "name", - "type": "string" - } - ] + name: 'name'; + type: 'string'; + }, + ]; }, { - "name": "serum3CreateOpenOrders", - "accounts": [ + name: 'serum3CreateOpenOrders'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket'; + isMut: false; + isSigner: false; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": false, - "isSigner": false + name: 'serumMarketExternal'; + isMut: false; + isSigner: false; }, { - "name": "openOrders", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'openOrders'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "account" + kind: 'account'; + type: 'publicKey'; + path: 'account'; }, { - "kind": "const", - "type": "string", - "value": "Serum3OO" + kind: 'const'; + type: 'string'; + value: 'Serum3OO'; }, { - "kind": "account", - "type": "publicKey", - "path": "serum_market" - } - ] - } + kind: 'account'; + type: 'publicKey'; + path: 'serum_market'; + }, + ]; + }; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + name: 'systemProgram'; + isMut: false; + isSigner: false; }, { - "name": "rent", - "isMut": false, - "isSigner": false - } - ], - "args": [] + name: 'rent'; + isMut: false; + isSigner: false; + }, + ]; + args: []; }, { - "name": "serum3PlaceOrder", - "accounts": [ + name: 'serum3PlaceOrder'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders'; + isMut: true; + isSigner: false; }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket'; + isMut: false; + isSigner: false; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal'; + isMut: true; + isSigner: false; }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids'; + isMut: true; + isSigner: false; }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks'; + isMut: true; + isSigner: false; }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false + name: 'marketEventQueue'; + isMut: true; + isSigner: false; }, { - "name": "marketRequestQueue", - "isMut": true, - "isSigner": false + name: 'marketRequestQueue'; + isMut: true; + isSigner: false; }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault'; + isMut: true; + isSigner: false; }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault'; + isMut: true; + isSigner: false; }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner'; + isMut: false; + isSigner: false; }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank'; + isMut: true; + isSigner: false; }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault'; + isMut: true; + isSigner: false; }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank'; + isMut: true; + isSigner: false; }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault'; + isMut: true; + isSigner: false; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "side", - "type": { - "defined": "Serum3Side" - } + name: 'side'; + type: { + defined: 'Serum3Side'; + }; }, { - "name": "limitPrice", - "type": "u64" + name: 'limitPrice'; + type: 'u64'; }, { - "name": "maxBaseQty", - "type": "u64" + name: 'maxBaseQty'; + type: 'u64'; }, { - "name": "maxNativeQuoteQtyIncludingFees", - "type": "u64" + name: 'maxNativeQuoteQtyIncludingFees'; + type: 'u64'; }, { - "name": "selfTradeBehavior", - "type": { - "defined": "Serum3SelfTradeBehavior" - } + name: 'selfTradeBehavior'; + type: { + defined: 'Serum3SelfTradeBehavior'; + }; }, { - "name": "orderType", - "type": { - "defined": "Serum3OrderType" - } + name: 'orderType'; + type: { + defined: 'Serum3OrderType'; + }; }, { - "name": "clientOrderId", - "type": "u64" + name: 'clientOrderId'; + type: 'u64'; }, { - "name": "limit", - "type": "u16" - } - ] + name: 'limit'; + type: 'u16'; + }, + ]; }, { - "name": "serum3CancelOrder", - "accounts": [ + name: 'serum3CancelOrder'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders'; + isMut: true; + isSigner: false; }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket'; + isMut: false; + isSigner: false; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal'; + isMut: true; + isSigner: false; }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids'; + isMut: true; + isSigner: false; }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks'; + isMut: true; + isSigner: false; }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false - } - ], - "args": [ + name: 'marketEventQueue'; + isMut: true; + isSigner: false; + }, + ]; + args: [ { - "name": "side", - "type": { - "defined": "Serum3Side" - } + name: 'side'; + type: { + defined: 'Serum3Side'; + }; }, { - "name": "orderId", - "type": "u128" - } - ] + name: 'orderId'; + type: 'u128'; + }, + ]; }, { - "name": "serum3SettleFunds", - "accounts": [ + name: 'serum3SettleFunds'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner'; + isMut: false; + isSigner: true; }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders'; + isMut: true; + isSigner: false; }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket'; + isMut: false; + isSigner: false; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal'; + isMut: true; + isSigner: false; }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault'; + isMut: true; + isSigner: false; }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault'; + isMut: true; + isSigner: false; }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner'; + isMut: false; + isSigner: false; }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank'; + isMut: true; + isSigner: false; }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault'; + isMut: true; + isSigner: false; }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank'; + isMut: true; + isSigner: false; }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault'; + isMut: true; + isSigner: false; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: []; }, { - "name": "serum3LiqForceCancelOrders", - "accounts": [ + name: 'serum3LiqForceCancelOrders'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders'; + isMut: true; + isSigner: false; }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket'; + isMut: false; + isSigner: false; }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram'; + isMut: false; + isSigner: false; }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal'; + isMut: true; + isSigner: false; }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids'; + isMut: true; + isSigner: false; }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks'; + isMut: true; + isSigner: false; }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false + name: 'marketEventQueue'; + isMut: true; + isSigner: false; }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault'; + isMut: true; + isSigner: false; }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault'; + isMut: true; + isSigner: false; }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner'; + isMut: false; + isSigner: false; }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank'; + isMut: true; + isSigner: false; }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault'; + isMut: true; + isSigner: false; }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank'; + isMut: true; + isSigner: false; }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault'; + isMut: true; + isSigner: false; }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'tokenProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "limit", - "type": "u8" - } - ] + name: 'limit'; + type: 'u8'; + }, + ]; }, { - "name": "liqTokenWithToken", - "accounts": [ + name: 'liqTokenWithToken'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "liqor", - "isMut": true, - "isSigner": false + name: 'liqor'; + isMut: true; + isSigner: false; }, { - "name": "liqorOwner", - "isMut": false, - "isSigner": true + name: 'liqorOwner'; + isMut: false; + isSigner: true; }, { - "name": "liqee", - "isMut": true, - "isSigner": false - } - ], - "args": [ + name: 'liqee'; + isMut: true; + isSigner: false; + }, + ]; + args: [ { - "name": "assetTokenIndex", - "type": "u16" + name: 'assetTokenIndex'; + type: 'u16'; }, { - "name": "liabTokenIndex", - "type": "u16" + name: 'liabTokenIndex'; + type: 'u16'; }, { - "name": "maxLiabTransfer", - "type": { - "defined": "I80F48" - } - } - ] + name: 'maxLiabTransfer'; + type: { + defined: 'I80F48'; + }; + }, + ]; }, { - "name": "perpCreateMarket", - "accounts": [ + name: 'perpCreateMarket'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin'; + isMut: false; + isSigner: true; }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle'; + isMut: false; + isSigner: false; }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'perpMarket'; + isMut: true; + isSigner: false; + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account'; + type: 'publicKey'; + path: 'group'; }, { - "kind": "const", - "type": "string", - "value": "PerpMarket" + kind: 'const'; + type: 'string'; + value: 'PerpMarket'; }, { - "kind": "arg", - "type": "u16", - "path": "perp_market_index" - } - ] - } + kind: 'arg'; + type: 'u16'; + path: 'perp_market_index'; + }, + ]; + }; }, { - "name": "bids", - "isMut": true, - "isSigner": false + name: 'bids'; + isMut: true; + isSigner: false; }, { - "name": "asks", - "isMut": true, - "isSigner": false + name: 'asks'; + isMut: true; + isSigner: false; }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false + name: 'eventQueue'; + isMut: true; + isSigner: false; }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer'; + isMut: true; + isSigner: true; }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + name: 'systemProgram'; + isMut: false; + isSigner: false; + }, + ]; + args: [ { - "name": "perpMarketIndex", - "type": "u16" + name: 'perpMarketIndex'; + type: 'u16'; }, { - "name": "name", - "type": "string" + name: 'name'; + type: 'string'; }, { - "name": "baseTokenIndexOpt", - "type": { - "option": "u16" - } + name: 'baseTokenIndexOpt'; + type: { + option: 'u16'; + }; }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex'; + type: 'u16'; }, { - "name": "quoteLotSize", - "type": "i64" + name: 'quoteLotSize'; + type: 'i64'; }, { - "name": "baseLotSize", - "type": "i64" + name: 'baseLotSize'; + type: 'i64'; }, { - "name": "maintAssetWeight", - "type": "f32" + name: 'maintAssetWeight'; + type: 'f32'; }, { - "name": "initAssetWeight", - "type": "f32" + name: 'initAssetWeight'; + type: 'f32'; }, { - "name": "maintLiabWeight", - "type": "f32" + name: 'maintLiabWeight'; + type: 'f32'; }, { - "name": "initLiabWeight", - "type": "f32" + name: 'initLiabWeight'; + type: 'f32'; }, { - "name": "liquidationFee", - "type": "f32" + name: 'liquidationFee'; + type: 'f32'; }, { - "name": "makerFee", - "type": "f32" + name: 'makerFee'; + type: 'f32'; }, { - "name": "takerFee", - "type": "f32" - } - ] + name: 'takerFee'; + type: 'f32'; + }, + ]; }, { - "name": "perpPlaceOrder", - "accounts": [ + name: 'perpPlaceOrder'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account'; + isMut: true; + isSigner: false; }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false + name: 'perpMarket'; + isMut: true; + isSigner: false; }, { - "name": "asks", - "isMut": true, - "isSigner": false + name: 'asks'; + isMut: true; + isSigner: false; }, { - "name": "bids", - "isMut": true, - "isSigner": false + name: 'bids'; + isMut: true; + isSigner: false; }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false + name: 'eventQueue'; + isMut: true; + isSigner: false; }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle'; + isMut: false; + isSigner: false; }, { - "name": "owner", - "isMut": false, - "isSigner": true - } - ], - "args": [ + name: 'owner'; + isMut: false; + isSigner: true; + }, + ]; + args: [ { - "name": "side", - "type": { - "defined": "Side" - } + name: 'side'; + type: { + defined: 'Side'; + }; }, { - "name": "priceLots", - "type": "i64" + name: 'priceLots'; + type: 'i64'; }, { - "name": "maxBaseLots", - "type": "i64" + name: 'maxBaseLots'; + type: 'i64'; }, { - "name": "maxQuoteLots", - "type": "i64" + name: 'maxQuoteLots'; + type: 'i64'; }, { - "name": "clientOrderId", - "type": "u64" + name: 'clientOrderId'; + type: 'u64'; }, { - "name": "orderType", - "type": { - "defined": "OrderType" - } + name: 'orderType'; + type: { + defined: 'OrderType'; + }; }, { - "name": "expiryTimestamp", - "type": "u64" + name: 'expiryTimestamp'; + type: 'u64'; }, { - "name": "limit", - "type": "u8" - } - ] + name: 'limit'; + type: 'u8'; + }, + ]; }, { - "name": "perpConsumeEvents", - "accounts": [ + name: 'perpConsumeEvents'; + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group'; + isMut: false; + isSigner: false; }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false + name: 'perpMarket'; + isMut: true; + isSigner: false; }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false - } - ], - "args": [ + name: 'eventQueue'; + isMut: true; + isSigner: false; + }, + ]; + args: [ { - "name": "limit", - "type": { - "defined": "usize" - } - } - ] + name: 'limit'; + type: { + defined: 'usize'; + }; + }, + ]; }, { - "name": "benchmark", - "accounts": [], - "args": [] - } - ], - "accounts": [ + name: 'benchmark'; + accounts: []; + args: []; + }, + ]; + accounts: [ { - "name": "bank", - "type": { - "kind": "struct", - "fields": [ + name: 'bank'; + type: { + kind: 'struct'; + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name'; + type: { + array: ['u8', 16]; + }; }, { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "mint", - "type": "publicKey" + name: 'mint'; + type: 'publicKey'; }, { - "name": "vault", - "type": "publicKey" + name: 'vault'; + type: 'publicKey'; }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle'; + type: 'publicKey'; }, { - "name": "depositIndex", - "type": { - "defined": "I80F48" - } + name: 'depositIndex'; + type: { + defined: 'I80F48'; + }; }, { - "name": "borrowIndex", - "type": { - "defined": "I80F48" - } + name: 'borrowIndex'; + type: { + defined: 'I80F48'; + }; }, { - "name": "indexedTotalDeposits", - "type": { - "defined": "I80F48" - } + name: 'indexedTotalDeposits'; + type: { + defined: 'I80F48'; + }; }, { - "name": "indexedTotalBorrows", - "type": { - "defined": "I80F48" - } + name: 'indexedTotalBorrows'; + type: { + defined: 'I80F48'; + }; }, { - "name": "lastUpdated", - "type": "i64" + name: 'lastUpdated'; + type: 'i64'; }, { - "name": "util0", - "type": { - "defined": "I80F48" - } + name: 'util0'; + type: { + defined: 'I80F48'; + }; }, { - "name": "rate0", - "type": { - "defined": "I80F48" - } + name: 'rate0'; + type: { + defined: 'I80F48'; + }; }, { - "name": "util1", - "type": { - "defined": "I80F48" - } + name: 'util1'; + type: { + defined: 'I80F48'; + }; }, { - "name": "rate1", - "type": { - "defined": "I80F48" - } + name: 'rate1'; + type: { + defined: 'I80F48'; + }; }, { - "name": "maxRate", - "type": { - "defined": "I80F48" - } + name: 'maxRate'; + type: { + defined: 'I80F48'; + }; }, { - "name": "collectedFeesNative", - "type": { - "defined": "I80F48" - } + name: 'collectedFeesNative'; + type: { + defined: 'I80F48'; + }; }, { - "name": "loanOriginationFeeRate", - "type": { - "defined": "I80F48" - } + name: 'loanOriginationFeeRate'; + type: { + defined: 'I80F48'; + }; }, { - "name": "loanFeeRate", - "type": { - "defined": "I80F48" - } + name: 'loanFeeRate'; + type: { + defined: 'I80F48'; + }; }, { - "name": "maintAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'maintAssetWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "initAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'initAssetWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "maintLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'maintLiabWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "initLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'initLiabWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "liquidationFee", - "type": { - "defined": "I80F48" - } + name: 'liquidationFee'; + type: { + defined: 'I80F48'; + }; }, { - "name": "dust", - "type": { - "defined": "I80F48" - } + name: 'dust'; + type: { + defined: 'I80F48'; + }; }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex'; + type: 'u16'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 6 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 6]; + }; + }, + ]; + }; }, { - "name": "bookSide", - "type": { - "kind": "struct", - "fields": [ + name: 'bookSide'; + type: { + kind: 'struct'; + fields: [ { - "name": "bookSideType", - "type": { - "defined": "BookSideType" - } + name: 'bookSideType'; + type: { + defined: 'BookSideType'; + }; }, { - "name": "bumpIndex", - "type": { - "defined": "usize" - } + name: 'bumpIndex'; + type: { + defined: 'usize'; + }; }, { - "name": "freeListLen", - "type": { - "defined": "usize" - } + name: 'freeListLen'; + type: { + defined: 'usize'; + }; }, { - "name": "freeListHead", - "type": { - "defined": "NodeHandle" - } + name: 'freeListHead'; + type: { + defined: 'NodeHandle'; + }; }, { - "name": "rootNode", - "type": { - "defined": "NodeHandle" - } + name: 'rootNode'; + type: { + defined: 'NodeHandle'; + }; }, { - "name": "leafCount", - "type": { - "defined": "usize" - } + name: 'leafCount'; + type: { + defined: 'usize'; + }; }, { - "name": "nodes", - "type": { - "array": [ + name: 'nodes'; + type: { + array: [ { - "defined": "AnyNode" + defined: 'AnyNode'; }, - 1024 - ] - } - } - ] - } + 1024, + ]; + }; + }, + ]; + }; }, { - "name": "group", - "type": { - "kind": "struct", - "fields": [ + name: 'group'; + type: { + kind: 'struct'; + fields: [ { - "name": "admin", - "type": "publicKey" + name: 'admin'; + type: 'publicKey'; }, { - "name": "bump", - "type": "u8" + name: 'bump'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 7 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 7]; + }; + }, + ]; + }; }, { - "name": "mangoAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'mangoAccount'; + type: { + kind: 'struct'; + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 32 - ] - } + name: 'name'; + type: { + array: ['u8', 32]; + }; }, { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "owner", - "type": "publicKey" + name: 'owner'; + type: 'publicKey'; }, { - "name": "delegate", - "type": "publicKey" + name: 'delegate'; + type: 'publicKey'; }, { - "name": "tokens", - "type": { - "defined": "MangoAccountTokens" - } + name: 'tokens'; + type: { + defined: 'MangoAccountTokens'; + }; }, { - "name": "serum3", - "type": { - "defined": "MangoAccountSerum3" - } + name: 'serum3'; + type: { + defined: 'MangoAccountSerum3'; + }; }, { - "name": "perps", - "type": { - "defined": "MangoAccountPerps" - } + name: 'perps'; + type: { + defined: 'MangoAccountPerps'; + }; }, { - "name": "beingLiquidated", - "type": "u8" + name: 'beingLiquidated'; + type: 'u8'; }, { - "name": "isBankrupt", - "type": "u8" + name: 'isBankrupt'; + type: 'u8'; }, { - "name": "accountNum", - "type": "u8" + name: 'accountNum'; + type: 'u8'; }, { - "name": "bump", - "type": "u8" + name: 'bump'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 4 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 4]; + }; + }, + ]; + }; }, { - "name": "mintInfo", - "type": { - "kind": "struct", - "fields": [ + name: 'mintInfo'; + type: { + kind: 'struct'; + fields: [ { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "mint", - "type": "publicKey" + name: 'mint'; + type: 'publicKey'; }, { - "name": "bank", - "type": "publicKey" + name: 'bank'; + type: 'publicKey'; }, { - "name": "vault", - "type": "publicKey" + name: 'vault'; + type: 'publicKey'; }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle'; + type: 'publicKey'; }, { - "name": "addressLookupTable", - "type": "publicKey" + name: 'addressLookupTable'; + type: 'publicKey'; }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex'; + type: 'u16'; }, { - "name": "addressLookupTableBankIndex", - "type": "u8" + name: 'addressLookupTableBankIndex'; + type: 'u8'; }, { - "name": "addressLookupTableOracleIndex", - "type": "u8" + name: 'addressLookupTableOracleIndex'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 4 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 4]; + }; + }, + ]; + }; }, { - "name": "stubOracle", - "type": { - "kind": "struct", - "fields": [ + name: 'stubOracle'; + type: { + kind: 'struct'; + fields: [ { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "mint", - "type": "publicKey" + name: 'mint'; + type: 'publicKey'; }, { - "name": "price", - "type": { - "defined": "I80F48" - } + name: 'price'; + type: { + defined: 'I80F48'; + }; }, { - "name": "lastUpdated", - "type": "i64" + name: 'lastUpdated'; + type: 'i64'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 8 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 8]; + }; + }, + ]; + }; }, { - "name": "perpMarket", - "type": { - "kind": "struct", - "fields": [ + name: 'perpMarket'; + type: { + kind: 'struct'; + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name'; + type: { + array: ['u8', 16]; + }; }, { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle'; + type: 'publicKey'; }, { - "name": "bids", - "type": "publicKey" + name: 'bids'; + type: 'publicKey'; }, { - "name": "asks", - "type": "publicKey" + name: 'asks'; + type: 'publicKey'; }, { - "name": "eventQueue", - "type": "publicKey" + name: 'eventQueue'; + type: 'publicKey'; }, { - "name": "quoteLotSize", - "type": "i64" + name: 'quoteLotSize'; + type: 'i64'; }, { - "name": "baseLotSize", - "type": "i64" + name: 'baseLotSize'; + type: 'i64'; }, { - "name": "maintAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'maintAssetWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "initAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'initAssetWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "maintLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'maintLiabWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "initLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'initLiabWeight'; + type: { + defined: 'I80F48'; + }; }, { - "name": "liquidationFee", - "type": { - "defined": "I80F48" - } + name: 'liquidationFee'; + type: { + defined: 'I80F48'; + }; }, { - "name": "makerFee", - "type": { - "defined": "I80F48" - } + name: 'makerFee'; + type: { + defined: 'I80F48'; + }; }, { - "name": "takerFee", - "type": { - "defined": "I80F48" - } + name: 'takerFee'; + type: { + defined: 'I80F48'; + }; }, { - "name": "openInterest", - "type": "i64" + name: 'openInterest'; + type: 'i64'; }, { - "name": "seqNum", - "type": "u64" + name: 'seqNum'; + type: 'u64'; }, { - "name": "feesAccrued", - "type": { - "defined": "I80F48" - } + name: 'feesAccrued'; + type: { + defined: 'I80F48'; + }; }, { - "name": "bump", - "type": "u8" + name: 'bump'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 1 - ] - } + name: 'reserved'; + type: { + array: ['u8', 1]; + }; }, { - "name": "perpMarketIndex", - "type": "u16" + name: 'perpMarketIndex'; + type: 'u16'; }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex'; + type: 'u16'; }, { - "name": "quoteTokenIndex", - "type": "u16" - } - ] - } + name: 'quoteTokenIndex'; + type: 'u16'; + }, + ]; + }; }, { - "name": "queue", - "type": { - "kind": "struct", - "fields": [ + name: 'queue'; + type: { + kind: 'struct'; + fields: [ { - "name": "header", - "type": { - "defined": "H" - } + name: 'header'; + type: { + defined: 'H'; + }; }, { - "name": "buf", - "type": { - "array": [ + name: 'buf'; + type: { + array: [ { - "defined": "H::Item" + defined: 'H::Item'; }, - 512 - ] - } - } - ] - } + 512, + ]; + }; + }, + ]; + }; }, { - "name": "eventQueueHeader", - "type": { - "kind": "struct", - "fields": [ + name: 'eventQueueHeader'; + type: { + kind: 'struct'; + fields: [ { - "name": "head", - "type": { - "defined": "usize" - } + name: 'head'; + type: { + defined: 'usize'; + }; }, { - "name": "count", - "type": { - "defined": "usize" - } + name: 'count'; + type: { + defined: 'usize'; + }; }, { - "name": "seqNum", - "type": { - "defined": "usize" - } - } - ] - } + name: 'seqNum'; + type: { + defined: 'usize'; + }; + }, + ]; + }; }, { - "name": "serum3Market", - "type": { - "kind": "struct", - "fields": [ + name: 'serum3Market'; + type: { + kind: 'struct'; + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name'; + type: { + array: ['u8', 16]; + }; }, { - "name": "group", - "type": "publicKey" + name: 'group'; + type: 'publicKey'; }, { - "name": "serumProgram", - "type": "publicKey" + name: 'serumProgram'; + type: 'publicKey'; }, { - "name": "serumMarketExternal", - "type": "publicKey" + name: 'serumMarketExternal'; + type: 'publicKey'; }, { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex'; + type: 'u16'; }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex'; + type: 'u16'; }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex'; + type: 'u16'; }, { - "name": "bump", - "type": "u8" + name: 'bump'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 1 - ] - } - } - ] - } - } - ], - "types": [ + name: 'reserved'; + type: { + array: ['u8', 1]; + }; + }, + ]; + }; + }, + ]; + types: [ { - "name": "TokenAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'TokenAccount'; + type: { + kind: 'struct'; + fields: [ { - "name": "indexedValue", - "type": { - "defined": "I80F48" - } + name: 'indexedValue'; + type: { + defined: 'I80F48'; + }; }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex'; + type: 'u16'; }, { - "name": "inUseCount", - "type": "u8" + name: 'inUseCount'; + type: 'u8'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 5 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 5]; + }; + }, + ]; + }; }, { - "name": "MangoAccountTokens", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountTokens'; + type: { + kind: 'struct'; + fields: [ { - "name": "values", - "type": { - "array": [ + name: 'values'; + type: { + array: [ { - "defined": "TokenAccount" + defined: 'TokenAccount'; }, - 16 - ] - } - } - ] - } + 16, + ]; + }; + }, + ]; + }; }, { - "name": "Serum3Account", - "type": { - "kind": "struct", - "fields": [ + name: 'Serum3Account'; + type: { + kind: 'struct'; + fields: [ { - "name": "openOrders", - "type": "publicKey" + name: 'openOrders'; + type: 'publicKey'; }, { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex'; + type: 'u16'; }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex'; + type: 'u16'; }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex'; + type: 'u16'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 2 - ] - } - } - ] - } + name: 'reserved'; + type: { + array: ['u8', 2]; + }; + }, + ]; + }; }, { - "name": "MangoAccountSerum3", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountSerum3'; + type: { + kind: 'struct'; + fields: [ { - "name": "values", - "type": { - "array": [ + name: 'values'; + type: { + array: [ { - "defined": "Serum3Account" + defined: 'Serum3Account'; }, - 8 - ] - } - } - ] - } + 8, + ]; + }; + }, + ]; + }; }, { - "name": "PerpAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'PerpAccount'; + type: { + kind: 'struct'; + fields: [ { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex'; + type: 'u16'; }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 6 - ] - } + name: 'reserved'; + type: { + array: ['u8', 6]; + }; }, { - "name": "basePositionLots", - "type": "i64" + name: 'basePositionLots'; + type: 'i64'; }, { - "name": "quotePositionNative", - "type": { - "defined": "I80F48" - } + name: 'quotePositionNative'; + type: { + defined: 'I80F48'; + }; }, { - "name": "bidsBaseLots", - "type": "i64" + name: 'bidsBaseLots'; + type: 'i64'; }, { - "name": "asksBaseLots", - "type": "i64" + name: 'asksBaseLots'; + type: 'i64'; }, { - "name": "takerBaseLots", - "type": "i64" + name: 'takerBaseLots'; + type: 'i64'; }, { - "name": "takerQuoteLots", - "type": "i64" - } - ] - } + name: 'takerQuoteLots'; + type: 'i64'; + }, + ]; + }; }, { - "name": "MangoAccountPerps", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountPerps'; + type: { + kind: 'struct'; + fields: [ { - "name": "accounts", - "type": { - "array": [ + name: 'accounts'; + type: { + array: [ { - "defined": "PerpAccount" + defined: 'PerpAccount'; }, - 8 - ] - } + 8, + ]; + }; }, { - "name": "orderMarket", - "type": { - "array": [ - "u16", - 8 - ] - } + name: 'orderMarket'; + type: { + array: ['u16', 8]; + }; }, { - "name": "orderSide", - "type": { - "array": [ + name: 'orderSide'; + type: { + array: [ { - "defined": "Side" + defined: 'Side'; }, - 8 - ] - } + 8, + ]; + }; }, { - "name": "orderId", - "type": { - "array": [ - "i128", - 8 - ] - } + name: 'orderId'; + type: { + array: ['i128', 8]; + }; }, { - "name": "orderClientId", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } + name: 'orderClientId'; + type: { + array: ['u64', 8]; + }; + }, + ]; + }; }, { - "name": "InterestRateParams", - "type": { - "kind": "struct", - "fields": [ + name: 'InterestRateParams'; + type: { + kind: 'struct'; + fields: [ { - "name": "util0", - "type": "f32" + name: 'util0'; + type: 'f32'; }, { - "name": "rate0", - "type": "f32" + name: 'rate0'; + type: 'f32'; }, { - "name": "util1", - "type": "f32" + name: 'util1'; + type: 'f32'; }, { - "name": "rate1", - "type": "f32" + name: 'rate1'; + type: 'f32'; }, { - "name": "maxRate", - "type": "f32" - } - ] - } + name: 'maxRate'; + type: 'f32'; + }, + ]; + }; }, { - "name": "TokenIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'TokenIndex'; + type: { + kind: 'struct'; + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val'; + type: 'u16'; + }, + ]; + }; }, { - "name": "Serum3MarketIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'Serum3MarketIndex'; + type: { + kind: 'struct'; + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val'; + type: 'u16'; + }, + ]; + }; }, { - "name": "PerpMarketIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'PerpMarketIndex'; + type: { + kind: 'struct'; + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val'; + type: 'u16'; + }, + ]; + }; }, { - "name": "I80F48", - "type": { - "kind": "struct", - "fields": [ + name: 'I80F48'; + type: { + kind: 'struct'; + fields: [ { - "name": "val", - "type": "i128" - } - ] - } + name: 'val'; + type: 'i128'; + }, + ]; + }; }, { - "name": "BookSideType", - "type": { - "kind": "enum", - "variants": [ + name: 'BookSideType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Bids" + name: 'Bids'; }, { - "name": "Asks" - } - ] - } + name: 'Asks'; + }, + ]; + }; }, { - "name": "HealthType", - "type": { - "kind": "enum", - "variants": [ + name: 'HealthType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Init" + name: 'Init'; }, { - "name": "Maint" - } - ] - } + name: 'Maint'; + }, + ]; + }; }, { - "name": "NodeTag", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeTag'; + type: { + kind: 'enum'; + variants: [ { - "name": "Uninitialized" + name: 'Uninitialized'; }, { - "name": "InnerNode" + name: 'InnerNode'; }, { - "name": "LeafNode" + name: 'LeafNode'; }, { - "name": "FreeNode" + name: 'FreeNode'; }, { - "name": "LastFreeNode" - } - ] - } + name: 'LastFreeNode'; + }, + ]; + }; }, { - "name": "NodeRef", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeRef'; + type: { + kind: 'enum'; + variants: [ { - "name": "Inner", - "fields": [ + name: 'Inner'; + fields: [ { - "defined": "&'aInnerNode" - } - ] + defined: "&'aInnerNode"; + }, + ]; }, { - "name": "Leaf", - "fields": [ + name: 'Leaf'; + fields: [ { - "defined": "&'aLeafNode" - } - ] - } - ] - } + defined: "&'aLeafNode"; + }, + ]; + }, + ]; + }; }, { - "name": "NodeRefMut", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeRefMut'; + type: { + kind: 'enum'; + variants: [ { - "name": "Inner", - "fields": [ + name: 'Inner'; + fields: [ { - "defined": "&'amutInnerNode" - } - ] + defined: "&'amutInnerNode"; + }, + ]; }, { - "name": "Leaf", - "fields": [ + name: 'Leaf'; + fields: [ { - "defined": "&'amutLeafNode" - } - ] - } - ] - } + defined: "&'amutLeafNode"; + }, + ]; + }, + ]; + }; }, { - "name": "OracleType", - "type": { - "kind": "enum", - "variants": [ + name: 'OracleType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Stub" + name: 'Stub'; }, { - "name": "Pyth" - } - ] - } + name: 'Pyth'; + }, + ]; + }; }, { - "name": "OrderType", - "type": { - "kind": "enum", - "variants": [ + name: 'OrderType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Limit" + name: 'Limit'; }, { - "name": "ImmediateOrCancel" + name: 'ImmediateOrCancel'; }, { - "name": "PostOnly" + name: 'PostOnly'; }, { - "name": "Market" + name: 'Market'; }, { - "name": "PostOnlySlide" - } - ] - } + name: 'PostOnlySlide'; + }, + ]; + }; }, { - "name": "Side", - "type": { - "kind": "enum", - "variants": [ + name: 'Side'; + type: { + kind: 'enum'; + variants: [ { - "name": "Bid" + name: 'Bid'; }, { - "name": "Ask" - } - ] - } + name: 'Ask'; + }, + ]; + }; }, { - "name": "EventType", - "type": { - "kind": "enum", - "variants": [ + name: 'EventType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Fill" + name: 'Fill'; }, { - "name": "Out" + name: 'Out'; }, { - "name": "Liquidate" - } - ] - } + name: 'Liquidate'; + }, + ]; + }; }, { - "name": "Serum3SelfTradeBehavior", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3SelfTradeBehavior'; + type: { + kind: 'enum'; + variants: [ { - "name": "DecrementTake" + name: 'DecrementTake'; }, { - "name": "CancelProvide" + name: 'CancelProvide'; }, { - "name": "AbortTransaction" - } - ] - } + name: 'AbortTransaction'; + }, + ]; + }; }, { - "name": "Serum3OrderType", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3OrderType'; + type: { + kind: 'enum'; + variants: [ { - "name": "Limit" + name: 'Limit'; }, { - "name": "ImmediateOrCancel" + name: 'ImmediateOrCancel'; }, { - "name": "PostOnly" - } - ] - } + name: 'PostOnly'; + }, + ]; + }; }, { - "name": "Serum3Side", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3Side'; + type: { + kind: 'enum'; + variants: [ { - "name": "Bid" + name: 'Bid'; }, { - "name": "Ask" - } - ] - } + name: 'Ask'; + }, + ]; + }; }, { - "name": "ProgramInstruction", - "type": { - "kind": "enum", - "variants": [ + name: 'ProgramInstruction'; + type: { + kind: 'enum'; + variants: [ { - "name": "CreateLookupTable", - "fields": [ + name: 'CreateLookupTable'; + fields: [ { - "name": "recent_slot", - "type": { - "defined": "Slot" - } + name: 'recent_slot'; + type: { + defined: 'Slot'; + }; }, { - "name": "bump_seed", - "type": "u8" - } - ] + name: 'bump_seed'; + type: 'u8'; + }, + ]; }, { - "name": "FreezeLookupTable" + name: 'FreezeLookupTable'; }, { - "name": "ExtendLookupTable", - "fields": [ + name: 'ExtendLookupTable'; + fields: [ { - "name": "new_addresses", - "type": { - "vec": "publicKey" - } - } - ] + name: 'new_addresses'; + type: { + vec: 'publicKey'; + }; + }, + ]; }, { - "name": "DeactivateLookupTable" + name: 'DeactivateLookupTable'; }, { - "name": "CloseLookupTable" - } - ] - } - } - ], - "errors": [ + name: 'CloseLookupTable'; + }, + ]; + }; + }, + ]; + errors: [ { - "code": 6000, - "name": "SomeError", - "msg": "" + code: 6000; + name: 'SomeError'; + msg: ''; }, { - "code": 6001, - "name": "MathError", - "msg": "" + code: 6001; + name: 'MathError'; + msg: ''; }, { - "code": 6002, - "name": "UnexpectedOracle", - "msg": "" + code: 6002; + name: 'UnexpectedOracle'; + msg: ''; }, { - "code": 6003, - "name": "UnknownOracleType", - "msg": "" + code: 6003; + name: 'UnknownOracleType'; + msg: ''; }, { - "code": 6004, - "name": "InvalidMarginTradeTargetCpiProgram", - "msg": "" + code: 6004; + name: 'InvalidMarginTradeTargetCpiProgram'; + msg: ''; }, { - "code": 6005, - "name": "HealthMustBePositive", - "msg": "" + code: 6005; + name: 'HealthMustBePositive'; + msg: ''; }, { - "code": 6006, - "name": "IsBankrupt", - "msg": "The account is bankrupt" - } - ] + code: 6006; + name: 'IsBankrupt'; + msg: 'The account is bankrupt'; + }, + ]; }; export const IDL: MangoV4 = { - "version": "0.1.0", - "name": "mango_v4", - "instructions": [ + version: '0.1.0', + name: 'mango_v4', + instructions: [ { - "name": "createGroup", - "accounts": [ + name: 'createGroup', + accounts: [ { - "name": "group", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'group', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "const", - "type": "string", - "value": "Group" + kind: 'const', + type: 'string', + value: 'Group', }, { - "kind": "account", - "type": "publicKey", - "path": "admin" - } - ] - } + kind: 'account', + type: 'publicKey', + path: 'admin', + }, + ], + }, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + name: 'systemProgram', + isMut: false, + isSigner: false, + }, ], - "args": [] + args: [], }, { - "name": "registerToken", - "accounts": [ + name: 'registerToken', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "mint", - "isMut": false, - "isSigner": false + name: 'mint', + isMut: false, + isSigner: false, }, { - "name": "bank", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'bank', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "Bank" + kind: 'const', + type: 'string', + value: 'Bank', }, { - "kind": "arg", - "type": "u16", - "path": "token_index" - } - ] - } + kind: 'arg', + type: 'u16', + path: 'token_index', + }, + ], + }, }, { - "name": "vault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'vault', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "Vault" + kind: 'const', + type: 'string', + value: 'Vault', }, { - "kind": "arg", - "type": "u16", - "path": "token_index" - } - ] - } + kind: 'arg', + type: 'u16', + path: 'token_index', + }, + ], + }, }, { - "name": "mintInfo", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'mintInfo', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "MintInfo" + kind: 'const', + type: 'string', + value: 'MintInfo', }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "mint" - } - ] - } + kind: 'account', + type: 'publicKey', + account: 'Mint', + path: 'mint', + }, + ], + }, }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle', + isMut: false, + isSigner: false, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + name: 'tokenProgram', + isMut: false, + isSigner: false, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + name: 'systemProgram', + isMut: false, + isSigner: false, }, { - "name": "rent", - "isMut": false, - "isSigner": false - } + name: 'rent', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex', + type: 'u16', }, { - "name": "name", - "type": "string" + name: 'name', + type: 'string', }, { - "name": "interestRateParams", - "type": { - "defined": "InterestRateParams" - } + name: 'interestRateParams', + type: { + defined: 'InterestRateParams', + }, }, { - "name": "loanFeeRate", - "type": "f32" + name: 'loanFeeRate', + type: 'f32', }, { - "name": "loanOriginationFeeRate", - "type": "f32" + name: 'loanOriginationFeeRate', + type: 'f32', }, { - "name": "maintAssetWeight", - "type": "f32" + name: 'maintAssetWeight', + type: 'f32', }, { - "name": "initAssetWeight", - "type": "f32" + name: 'initAssetWeight', + type: 'f32', }, { - "name": "maintLiabWeight", - "type": "f32" + name: 'maintLiabWeight', + type: 'f32', }, { - "name": "initLiabWeight", - "type": "f32" + name: 'initLiabWeight', + type: 'f32', }, { - "name": "liquidationFee", - "type": "f32" - } - ] + name: 'liquidationFee', + type: 'f32', + }, + ], }, { - "name": "updateIndex", - "accounts": [ + name: 'updateIndex', + accounts: [ { - "name": "bank", - "isMut": true, - "isSigner": false - } + name: 'bank', + isMut: true, + isSigner: false, + }, ], - "args": [] + args: [], }, { - "name": "createAccount", - "accounts": [ + name: 'createAccount', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'account', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "MangoAccount" + kind: 'const', + type: 'string', + value: 'MangoAccount', }, { - "kind": "account", - "type": "publicKey", - "path": "owner" + kind: 'account', + type: 'publicKey', + path: 'owner', }, { - "kind": "arg", - "type": "u8", - "path": "account_num" - } - ] - } + kind: 'arg', + type: 'u8', + path: 'account_num', + }, + ], + }, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + name: 'systemProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "accountNum", - "type": "u8" + name: 'accountNum', + type: 'u8', }, { - "name": "name", - "type": "string" - } - ] + name: 'name', + type: 'string', + }, + ], }, { - "name": "closeAccount", - "accounts": [ + name: 'closeAccount', + accounts: [ { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "solDestination", - "isMut": true, - "isSigner": false + name: 'solDestination', + isMut: true, + isSigner: false, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [] + args: [], }, { - "name": "createStubOracle", - "accounts": [ + name: 'createStubOracle', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "oracle", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'oracle', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "StubOracle" + kind: 'const', + type: 'string', + value: 'StubOracle', }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "token_mint" - } - ] - } + kind: 'account', + type: 'publicKey', + account: 'Mint', + path: 'token_mint', + }, + ], + }, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "tokenMint", - "isMut": false, - "isSigner": false + name: 'tokenMint', + isMut: false, + isSigner: false, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + name: 'systemProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "price", - "type": { - "defined": "I80F48" - } - } - ] + name: 'price', + type: { + defined: 'I80F48', + }, + }, + ], }, { - "name": "setStubOracle", - "accounts": [ + name: 'setStubOracle', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "oracle", - "isMut": true, - "isSigner": false + name: 'oracle', + isMut: true, + isSigner: false, }, { - "name": "payer", - "isMut": true, - "isSigner": true - } + name: 'payer', + isMut: true, + isSigner: true, + }, ], - "args": [ + args: [ { - "name": "price", - "type": { - "defined": "I80F48" - } - } - ] + name: 'price', + type: { + defined: 'I80F48', + }, + }, + ], }, { - "name": "deposit", - "accounts": [ + name: 'deposit', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "bank", - "isMut": true, - "isSigner": false + name: 'bank', + isMut: true, + isSigner: false, }, { - "name": "vault", - "isMut": true, - "isSigner": false + name: 'vault', + isMut: true, + isSigner: false, }, { - "name": "tokenAccount", - "isMut": true, - "isSigner": false + name: 'tokenAccount', + isMut: true, + isSigner: false, }, { - "name": "tokenAuthority", - "isMut": false, - "isSigner": true + name: 'tokenAuthority', + isMut: false, + isSigner: true, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "amount", - "type": "u64" - } - ] + name: 'amount', + type: 'u64', + }, + ], }, { - "name": "withdraw", - "accounts": [ + name: 'withdraw', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "bank", - "isMut": true, - "isSigner": false + name: 'bank', + isMut: true, + isSigner: false, }, { - "name": "vault", - "isMut": true, - "isSigner": false + name: 'vault', + isMut: true, + isSigner: false, }, { - "name": "tokenAccount", - "isMut": true, - "isSigner": false + name: 'tokenAccount', + isMut: true, + isSigner: false, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "amount", - "type": "u64" + name: 'amount', + type: 'u64', }, { - "name": "allowBorrow", - "type": "bool" - } - ] + name: 'allowBorrow', + type: 'bool', + }, + ], }, { - "name": "marginTrade", - "accounts": [ + name: 'marginTrade', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true - } + name: 'owner', + isMut: false, + isSigner: true, + }, ], - "args": [ + args: [ { - "name": "banksLen", - "type": { - "defined": "usize" - } + name: 'banksLen', + type: { + defined: 'usize', + }, }, { - "name": "cpiData", - "type": "bytes" - } - ] + name: 'cpiData', + type: 'bytes', + }, + ], }, { - "name": "serum3RegisterMarket", - "accounts": [ + name: 'serum3RegisterMarket', + accounts: [ { - "name": "group", - "isMut": true, - "isSigner": false + name: 'group', + isMut: true, + isSigner: false, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": false, - "isSigner": false + name: 'serumMarketExternal', + isMut: false, + isSigner: false, }, { - "name": "serumMarket", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'serumMarket', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "Serum3Market" + kind: 'const', + type: 'string', + value: 'Serum3Market', }, { - "kind": "account", - "type": "publicKey", - "path": "serum_market_external" - } - ] - } + kind: 'account', + type: 'publicKey', + path: 'serum_market_external', + }, + ], + }, }, { - "name": "quoteBank", - "isMut": false, - "isSigner": false + name: 'quoteBank', + isMut: false, + isSigner: false, }, { - "name": "baseBank", - "isMut": false, - "isSigner": false + name: 'baseBank', + isMut: false, + isSigner: false, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + name: 'systemProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex', + type: 'u16', }, { - "name": "name", - "type": "string" - } - ] + name: 'name', + type: 'string', + }, + ], }, { - "name": "serum3CreateOpenOrders", - "accounts": [ + name: 'serum3CreateOpenOrders', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket', + isMut: false, + isSigner: false, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": false, - "isSigner": false + name: 'serumMarketExternal', + isMut: false, + isSigner: false, }, { - "name": "openOrders", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'openOrders', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "account" + kind: 'account', + type: 'publicKey', + path: 'account', }, { - "kind": "const", - "type": "string", - "value": "Serum3OO" + kind: 'const', + type: 'string', + value: 'Serum3OO', }, { - "kind": "account", - "type": "publicKey", - "path": "serum_market" - } - ] - } + kind: 'account', + type: 'publicKey', + path: 'serum_market', + }, + ], + }, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + name: 'systemProgram', + isMut: false, + isSigner: false, }, { - "name": "rent", - "isMut": false, - "isSigner": false - } + name: 'rent', + isMut: false, + isSigner: false, + }, ], - "args": [] + args: [], }, { - "name": "serum3PlaceOrder", - "accounts": [ + name: 'serum3PlaceOrder', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders', + isMut: true, + isSigner: false, }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket', + isMut: false, + isSigner: false, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal', + isMut: true, + isSigner: false, }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids', + isMut: true, + isSigner: false, }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks', + isMut: true, + isSigner: false, }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false + name: 'marketEventQueue', + isMut: true, + isSigner: false, }, { - "name": "marketRequestQueue", - "isMut": true, - "isSigner": false + name: 'marketRequestQueue', + isMut: true, + isSigner: false, }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault', + isMut: true, + isSigner: false, }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault', + isMut: true, + isSigner: false, }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner', + isMut: false, + isSigner: false, }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank', + isMut: true, + isSigner: false, }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault', + isMut: true, + isSigner: false, }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank', + isMut: true, + isSigner: false, }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault', + isMut: true, + isSigner: false, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "side", - "type": { - "defined": "Serum3Side" - } + name: 'side', + type: { + defined: 'Serum3Side', + }, }, { - "name": "limitPrice", - "type": "u64" + name: 'limitPrice', + type: 'u64', }, { - "name": "maxBaseQty", - "type": "u64" + name: 'maxBaseQty', + type: 'u64', }, { - "name": "maxNativeQuoteQtyIncludingFees", - "type": "u64" + name: 'maxNativeQuoteQtyIncludingFees', + type: 'u64', }, { - "name": "selfTradeBehavior", - "type": { - "defined": "Serum3SelfTradeBehavior" - } + name: 'selfTradeBehavior', + type: { + defined: 'Serum3SelfTradeBehavior', + }, }, { - "name": "orderType", - "type": { - "defined": "Serum3OrderType" - } + name: 'orderType', + type: { + defined: 'Serum3OrderType', + }, }, { - "name": "clientOrderId", - "type": "u64" + name: 'clientOrderId', + type: 'u64', }, { - "name": "limit", - "type": "u16" - } - ] + name: 'limit', + type: 'u16', + }, + ], }, { - "name": "serum3CancelOrder", - "accounts": [ + name: 'serum3CancelOrder', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders', + isMut: true, + isSigner: false, }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket', + isMut: false, + isSigner: false, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal', + isMut: true, + isSigner: false, }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids', + isMut: true, + isSigner: false, }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks', + isMut: true, + isSigner: false, }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false - } + name: 'marketEventQueue', + isMut: true, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "side", - "type": { - "defined": "Serum3Side" - } + name: 'side', + type: { + defined: 'Serum3Side', + }, }, { - "name": "orderId", - "type": "u128" - } - ] + name: 'orderId', + type: 'u128', + }, + ], }, { - "name": "serum3SettleFunds", - "accounts": [ + name: 'serum3SettleFunds', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true + name: 'owner', + isMut: false, + isSigner: true, }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders', + isMut: true, + isSigner: false, }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket', + isMut: false, + isSigner: false, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal', + isMut: true, + isSigner: false, }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault', + isMut: true, + isSigner: false, }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault', + isMut: true, + isSigner: false, }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner', + isMut: false, + isSigner: false, }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank', + isMut: true, + isSigner: false, }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault', + isMut: true, + isSigner: false, }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank', + isMut: true, + isSigner: false, }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault', + isMut: true, + isSigner: false, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [] + args: [], }, { - "name": "serum3LiqForceCancelOrders", - "accounts": [ + name: 'serum3LiqForceCancelOrders', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "openOrders", - "isMut": true, - "isSigner": false + name: 'openOrders', + isMut: true, + isSigner: false, }, { - "name": "serumMarket", - "isMut": false, - "isSigner": false + name: 'serumMarket', + isMut: false, + isSigner: false, }, { - "name": "serumProgram", - "isMut": false, - "isSigner": false + name: 'serumProgram', + isMut: false, + isSigner: false, }, { - "name": "serumMarketExternal", - "isMut": true, - "isSigner": false + name: 'serumMarketExternal', + isMut: true, + isSigner: false, }, { - "name": "marketBids", - "isMut": true, - "isSigner": false + name: 'marketBids', + isMut: true, + isSigner: false, }, { - "name": "marketAsks", - "isMut": true, - "isSigner": false + name: 'marketAsks', + isMut: true, + isSigner: false, }, { - "name": "marketEventQueue", - "isMut": true, - "isSigner": false + name: 'marketEventQueue', + isMut: true, + isSigner: false, }, { - "name": "marketBaseVault", - "isMut": true, - "isSigner": false + name: 'marketBaseVault', + isMut: true, + isSigner: false, }, { - "name": "marketQuoteVault", - "isMut": true, - "isSigner": false + name: 'marketQuoteVault', + isMut: true, + isSigner: false, }, { - "name": "marketVaultSigner", - "isMut": false, - "isSigner": false + name: 'marketVaultSigner', + isMut: false, + isSigner: false, }, { - "name": "quoteBank", - "isMut": true, - "isSigner": false + name: 'quoteBank', + isMut: true, + isSigner: false, }, { - "name": "quoteVault", - "isMut": true, - "isSigner": false + name: 'quoteVault', + isMut: true, + isSigner: false, }, { - "name": "baseBank", - "isMut": true, - "isSigner": false + name: 'baseBank', + isMut: true, + isSigner: false, }, { - "name": "baseVault", - "isMut": true, - "isSigner": false + name: 'baseVault', + isMut: true, + isSigner: false, }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } + name: 'tokenProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "limit", - "type": "u8" - } - ] + name: 'limit', + type: 'u8', + }, + ], }, { - "name": "liqTokenWithToken", - "accounts": [ + name: 'liqTokenWithToken', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "liqor", - "isMut": true, - "isSigner": false + name: 'liqor', + isMut: true, + isSigner: false, }, { - "name": "liqorOwner", - "isMut": false, - "isSigner": true + name: 'liqorOwner', + isMut: false, + isSigner: true, }, { - "name": "liqee", - "isMut": true, - "isSigner": false - } + name: 'liqee', + isMut: true, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "assetTokenIndex", - "type": "u16" + name: 'assetTokenIndex', + type: 'u16', }, { - "name": "liabTokenIndex", - "type": "u16" + name: 'liabTokenIndex', + type: 'u16', }, { - "name": "maxLiabTransfer", - "type": { - "defined": "I80F48" - } - } - ] + name: 'maxLiabTransfer', + type: { + defined: 'I80F48', + }, + }, + ], }, { - "name": "perpCreateMarket", - "accounts": [ + name: 'perpCreateMarket', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "admin", - "isMut": false, - "isSigner": true + name: 'admin', + isMut: false, + isSigner: true, }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle', + isMut: false, + isSigner: false, }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ + name: 'perpMarket', + isMut: true, + isSigner: false, + pda: { + seeds: [ { - "kind": "account", - "type": "publicKey", - "path": "group" + kind: 'account', + type: 'publicKey', + path: 'group', }, { - "kind": "const", - "type": "string", - "value": "PerpMarket" + kind: 'const', + type: 'string', + value: 'PerpMarket', }, { - "kind": "arg", - "type": "u16", - "path": "perp_market_index" - } - ] - } + kind: 'arg', + type: 'u16', + path: 'perp_market_index', + }, + ], + }, }, { - "name": "bids", - "isMut": true, - "isSigner": false + name: 'bids', + isMut: true, + isSigner: false, }, { - "name": "asks", - "isMut": true, - "isSigner": false + name: 'asks', + isMut: true, + isSigner: false, }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false + name: 'eventQueue', + isMut: true, + isSigner: false, }, { - "name": "payer", - "isMut": true, - "isSigner": true + name: 'payer', + isMut: true, + isSigner: true, }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + name: 'systemProgram', + isMut: false, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "perpMarketIndex", - "type": "u16" + name: 'perpMarketIndex', + type: 'u16', }, { - "name": "name", - "type": "string" + name: 'name', + type: 'string', }, { - "name": "baseTokenIndexOpt", - "type": { - "option": "u16" - } + name: 'baseTokenIndexOpt', + type: { + option: 'u16', + }, }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex', + type: 'u16', }, { - "name": "quoteLotSize", - "type": "i64" + name: 'quoteLotSize', + type: 'i64', }, { - "name": "baseLotSize", - "type": "i64" + name: 'baseLotSize', + type: 'i64', }, { - "name": "maintAssetWeight", - "type": "f32" + name: 'maintAssetWeight', + type: 'f32', }, { - "name": "initAssetWeight", - "type": "f32" + name: 'initAssetWeight', + type: 'f32', }, { - "name": "maintLiabWeight", - "type": "f32" + name: 'maintLiabWeight', + type: 'f32', }, { - "name": "initLiabWeight", - "type": "f32" + name: 'initLiabWeight', + type: 'f32', }, { - "name": "liquidationFee", - "type": "f32" + name: 'liquidationFee', + type: 'f32', }, { - "name": "makerFee", - "type": "f32" + name: 'makerFee', + type: 'f32', }, { - "name": "takerFee", - "type": "f32" - } - ] + name: 'takerFee', + type: 'f32', + }, + ], }, { - "name": "perpPlaceOrder", - "accounts": [ + name: 'perpPlaceOrder', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "account", - "isMut": true, - "isSigner": false + name: 'account', + isMut: true, + isSigner: false, }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false + name: 'perpMarket', + isMut: true, + isSigner: false, }, { - "name": "asks", - "isMut": true, - "isSigner": false + name: 'asks', + isMut: true, + isSigner: false, }, { - "name": "bids", - "isMut": true, - "isSigner": false + name: 'bids', + isMut: true, + isSigner: false, }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false + name: 'eventQueue', + isMut: true, + isSigner: false, }, { - "name": "oracle", - "isMut": false, - "isSigner": false + name: 'oracle', + isMut: false, + isSigner: false, }, { - "name": "owner", - "isMut": false, - "isSigner": true - } + name: 'owner', + isMut: false, + isSigner: true, + }, ], - "args": [ + args: [ { - "name": "side", - "type": { - "defined": "Side" - } + name: 'side', + type: { + defined: 'Side', + }, }, { - "name": "priceLots", - "type": "i64" + name: 'priceLots', + type: 'i64', }, { - "name": "maxBaseLots", - "type": "i64" + name: 'maxBaseLots', + type: 'i64', }, { - "name": "maxQuoteLots", - "type": "i64" + name: 'maxQuoteLots', + type: 'i64', }, { - "name": "clientOrderId", - "type": "u64" + name: 'clientOrderId', + type: 'u64', }, { - "name": "orderType", - "type": { - "defined": "OrderType" - } + name: 'orderType', + type: { + defined: 'OrderType', + }, }, { - "name": "expiryTimestamp", - "type": "u64" + name: 'expiryTimestamp', + type: 'u64', }, { - "name": "limit", - "type": "u8" - } - ] + name: 'limit', + type: 'u8', + }, + ], }, { - "name": "perpConsumeEvents", - "accounts": [ + name: 'perpConsumeEvents', + accounts: [ { - "name": "group", - "isMut": false, - "isSigner": false + name: 'group', + isMut: false, + isSigner: false, }, { - "name": "perpMarket", - "isMut": true, - "isSigner": false + name: 'perpMarket', + isMut: true, + isSigner: false, }, { - "name": "eventQueue", - "isMut": true, - "isSigner": false - } + name: 'eventQueue', + isMut: true, + isSigner: false, + }, ], - "args": [ + args: [ { - "name": "limit", - "type": { - "defined": "usize" - } - } - ] + name: 'limit', + type: { + defined: 'usize', + }, + }, + ], }, { - "name": "benchmark", - "accounts": [], - "args": [] - } + name: 'benchmark', + accounts: [], + args: [], + }, ], - "accounts": [ + accounts: [ { - "name": "bank", - "type": { - "kind": "struct", - "fields": [ + name: 'bank', + type: { + kind: 'struct', + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name', + type: { + array: ['u8', 16], + }, }, { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "mint", - "type": "publicKey" + name: 'mint', + type: 'publicKey', }, { - "name": "vault", - "type": "publicKey" + name: 'vault', + type: 'publicKey', }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle', + type: 'publicKey', }, { - "name": "depositIndex", - "type": { - "defined": "I80F48" - } + name: 'depositIndex', + type: { + defined: 'I80F48', + }, }, { - "name": "borrowIndex", - "type": { - "defined": "I80F48" - } + name: 'borrowIndex', + type: { + defined: 'I80F48', + }, }, { - "name": "indexedTotalDeposits", - "type": { - "defined": "I80F48" - } + name: 'indexedTotalDeposits', + type: { + defined: 'I80F48', + }, }, { - "name": "indexedTotalBorrows", - "type": { - "defined": "I80F48" - } + name: 'indexedTotalBorrows', + type: { + defined: 'I80F48', + }, }, { - "name": "lastUpdated", - "type": "i64" + name: 'lastUpdated', + type: 'i64', }, { - "name": "util0", - "type": { - "defined": "I80F48" - } + name: 'util0', + type: { + defined: 'I80F48', + }, }, { - "name": "rate0", - "type": { - "defined": "I80F48" - } + name: 'rate0', + type: { + defined: 'I80F48', + }, }, { - "name": "util1", - "type": { - "defined": "I80F48" - } + name: 'util1', + type: { + defined: 'I80F48', + }, }, { - "name": "rate1", - "type": { - "defined": "I80F48" - } + name: 'rate1', + type: { + defined: 'I80F48', + }, }, { - "name": "maxRate", - "type": { - "defined": "I80F48" - } + name: 'maxRate', + type: { + defined: 'I80F48', + }, }, { - "name": "collectedFeesNative", - "type": { - "defined": "I80F48" - } + name: 'collectedFeesNative', + type: { + defined: 'I80F48', + }, }, { - "name": "loanOriginationFeeRate", - "type": { - "defined": "I80F48" - } + name: 'loanOriginationFeeRate', + type: { + defined: 'I80F48', + }, }, { - "name": "loanFeeRate", - "type": { - "defined": "I80F48" - } + name: 'loanFeeRate', + type: { + defined: 'I80F48', + }, }, { - "name": "maintAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'maintAssetWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "initAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'initAssetWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "maintLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'maintLiabWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "initLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'initLiabWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "liquidationFee", - "type": { - "defined": "I80F48" - } + name: 'liquidationFee', + type: { + defined: 'I80F48', + }, }, { - "name": "dust", - "type": { - "defined": "I80F48" - } + name: 'dust', + type: { + defined: 'I80F48', + }, }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex', + type: 'u16', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 6 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 6], + }, + }, + ], + }, }, { - "name": "bookSide", - "type": { - "kind": "struct", - "fields": [ + name: 'bookSide', + type: { + kind: 'struct', + fields: [ { - "name": "bookSideType", - "type": { - "defined": "BookSideType" - } + name: 'bookSideType', + type: { + defined: 'BookSideType', + }, }, { - "name": "bumpIndex", - "type": { - "defined": "usize" - } + name: 'bumpIndex', + type: { + defined: 'usize', + }, }, { - "name": "freeListLen", - "type": { - "defined": "usize" - } + name: 'freeListLen', + type: { + defined: 'usize', + }, }, { - "name": "freeListHead", - "type": { - "defined": "NodeHandle" - } + name: 'freeListHead', + type: { + defined: 'NodeHandle', + }, }, { - "name": "rootNode", - "type": { - "defined": "NodeHandle" - } + name: 'rootNode', + type: { + defined: 'NodeHandle', + }, }, { - "name": "leafCount", - "type": { - "defined": "usize" - } + name: 'leafCount', + type: { + defined: 'usize', + }, }, { - "name": "nodes", - "type": { - "array": [ + name: 'nodes', + type: { + array: [ { - "defined": "AnyNode" + defined: 'AnyNode', }, - 1024 - ] - } - } - ] - } + 1024, + ], + }, + }, + ], + }, }, { - "name": "group", - "type": { - "kind": "struct", - "fields": [ + name: 'group', + type: { + kind: 'struct', + fields: [ { - "name": "admin", - "type": "publicKey" + name: 'admin', + type: 'publicKey', }, { - "name": "bump", - "type": "u8" + name: 'bump', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 7 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 7], + }, + }, + ], + }, }, { - "name": "mangoAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'mangoAccount', + type: { + kind: 'struct', + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 32 - ] - } + name: 'name', + type: { + array: ['u8', 32], + }, }, { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "owner", - "type": "publicKey" + name: 'owner', + type: 'publicKey', }, { - "name": "delegate", - "type": "publicKey" + name: 'delegate', + type: 'publicKey', }, { - "name": "tokens", - "type": { - "defined": "MangoAccountTokens" - } + name: 'tokens', + type: { + defined: 'MangoAccountTokens', + }, }, { - "name": "serum3", - "type": { - "defined": "MangoAccountSerum3" - } + name: 'serum3', + type: { + defined: 'MangoAccountSerum3', + }, }, { - "name": "perps", - "type": { - "defined": "MangoAccountPerps" - } + name: 'perps', + type: { + defined: 'MangoAccountPerps', + }, }, { - "name": "beingLiquidated", - "type": "u8" + name: 'beingLiquidated', + type: 'u8', }, { - "name": "isBankrupt", - "type": "u8" + name: 'isBankrupt', + type: 'u8', }, { - "name": "accountNum", - "type": "u8" + name: 'accountNum', + type: 'u8', }, { - "name": "bump", - "type": "u8" + name: 'bump', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 4 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 4], + }, + }, + ], + }, }, { - "name": "mintInfo", - "type": { - "kind": "struct", - "fields": [ + name: 'mintInfo', + type: { + kind: 'struct', + fields: [ { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "mint", - "type": "publicKey" + name: 'mint', + type: 'publicKey', }, { - "name": "bank", - "type": "publicKey" + name: 'bank', + type: 'publicKey', }, { - "name": "vault", - "type": "publicKey" + name: 'vault', + type: 'publicKey', }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle', + type: 'publicKey', }, { - "name": "addressLookupTable", - "type": "publicKey" + name: 'addressLookupTable', + type: 'publicKey', }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex', + type: 'u16', }, { - "name": "addressLookupTableBankIndex", - "type": "u8" + name: 'addressLookupTableBankIndex', + type: 'u8', }, { - "name": "addressLookupTableOracleIndex", - "type": "u8" + name: 'addressLookupTableOracleIndex', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 4 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 4], + }, + }, + ], + }, }, { - "name": "stubOracle", - "type": { - "kind": "struct", - "fields": [ + name: 'stubOracle', + type: { + kind: 'struct', + fields: [ { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "mint", - "type": "publicKey" + name: 'mint', + type: 'publicKey', }, { - "name": "price", - "type": { - "defined": "I80F48" - } + name: 'price', + type: { + defined: 'I80F48', + }, }, { - "name": "lastUpdated", - "type": "i64" + name: 'lastUpdated', + type: 'i64', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 8 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 8], + }, + }, + ], + }, }, { - "name": "perpMarket", - "type": { - "kind": "struct", - "fields": [ + name: 'perpMarket', + type: { + kind: 'struct', + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name', + type: { + array: ['u8', 16], + }, }, { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "oracle", - "type": "publicKey" + name: 'oracle', + type: 'publicKey', }, { - "name": "bids", - "type": "publicKey" + name: 'bids', + type: 'publicKey', }, { - "name": "asks", - "type": "publicKey" + name: 'asks', + type: 'publicKey', }, { - "name": "eventQueue", - "type": "publicKey" + name: 'eventQueue', + type: 'publicKey', }, { - "name": "quoteLotSize", - "type": "i64" + name: 'quoteLotSize', + type: 'i64', }, { - "name": "baseLotSize", - "type": "i64" + name: 'baseLotSize', + type: 'i64', }, { - "name": "maintAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'maintAssetWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "initAssetWeight", - "type": { - "defined": "I80F48" - } + name: 'initAssetWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "maintLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'maintLiabWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "initLiabWeight", - "type": { - "defined": "I80F48" - } + name: 'initLiabWeight', + type: { + defined: 'I80F48', + }, }, { - "name": "liquidationFee", - "type": { - "defined": "I80F48" - } + name: 'liquidationFee', + type: { + defined: 'I80F48', + }, }, { - "name": "makerFee", - "type": { - "defined": "I80F48" - } + name: 'makerFee', + type: { + defined: 'I80F48', + }, }, { - "name": "takerFee", - "type": { - "defined": "I80F48" - } + name: 'takerFee', + type: { + defined: 'I80F48', + }, }, { - "name": "openInterest", - "type": "i64" + name: 'openInterest', + type: 'i64', }, { - "name": "seqNum", - "type": "u64" + name: 'seqNum', + type: 'u64', }, { - "name": "feesAccrued", - "type": { - "defined": "I80F48" - } + name: 'feesAccrued', + type: { + defined: 'I80F48', + }, }, { - "name": "bump", - "type": "u8" + name: 'bump', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 1 - ] - } + name: 'reserved', + type: { + array: ['u8', 1], + }, }, { - "name": "perpMarketIndex", - "type": "u16" + name: 'perpMarketIndex', + type: 'u16', }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex', + type: 'u16', }, { - "name": "quoteTokenIndex", - "type": "u16" - } - ] - } + name: 'quoteTokenIndex', + type: 'u16', + }, + ], + }, }, { - "name": "queue", - "type": { - "kind": "struct", - "fields": [ + name: 'queue', + type: { + kind: 'struct', + fields: [ { - "name": "header", - "type": { - "defined": "H" - } + name: 'header', + type: { + defined: 'H', + }, }, { - "name": "buf", - "type": { - "array": [ + name: 'buf', + type: { + array: [ { - "defined": "H::Item" + defined: 'H::Item', }, - 512 - ] - } - } - ] - } + 512, + ], + }, + }, + ], + }, }, { - "name": "eventQueueHeader", - "type": { - "kind": "struct", - "fields": [ + name: 'eventQueueHeader', + type: { + kind: 'struct', + fields: [ { - "name": "head", - "type": { - "defined": "usize" - } + name: 'head', + type: { + defined: 'usize', + }, }, { - "name": "count", - "type": { - "defined": "usize" - } + name: 'count', + type: { + defined: 'usize', + }, }, { - "name": "seqNum", - "type": { - "defined": "usize" - } - } - ] - } + name: 'seqNum', + type: { + defined: 'usize', + }, + }, + ], + }, }, { - "name": "serum3Market", - "type": { - "kind": "struct", - "fields": [ + name: 'serum3Market', + type: { + kind: 'struct', + fields: [ { - "name": "name", - "type": { - "array": [ - "u8", - 16 - ] - } + name: 'name', + type: { + array: ['u8', 16], + }, }, { - "name": "group", - "type": "publicKey" + name: 'group', + type: 'publicKey', }, { - "name": "serumProgram", - "type": "publicKey" + name: 'serumProgram', + type: 'publicKey', }, { - "name": "serumMarketExternal", - "type": "publicKey" + name: 'serumMarketExternal', + type: 'publicKey', }, { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex', + type: 'u16', }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex', + type: 'u16', }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex', + type: 'u16', }, { - "name": "bump", - "type": "u8" + name: 'bump', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 1 - ] - } - } - ] - } - } + name: 'reserved', + type: { + array: ['u8', 1], + }, + }, + ], + }, + }, ], - "types": [ + types: [ { - "name": "TokenAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'TokenAccount', + type: { + kind: 'struct', + fields: [ { - "name": "indexedValue", - "type": { - "defined": "I80F48" - } + name: 'indexedValue', + type: { + defined: 'I80F48', + }, }, { - "name": "tokenIndex", - "type": "u16" + name: 'tokenIndex', + type: 'u16', }, { - "name": "inUseCount", - "type": "u8" + name: 'inUseCount', + type: 'u8', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 5 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 5], + }, + }, + ], + }, }, { - "name": "MangoAccountTokens", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountTokens', + type: { + kind: 'struct', + fields: [ { - "name": "values", - "type": { - "array": [ + name: 'values', + type: { + array: [ { - "defined": "TokenAccount" + defined: 'TokenAccount', }, - 16 - ] - } - } - ] - } + 16, + ], + }, + }, + ], + }, }, { - "name": "Serum3Account", - "type": { - "kind": "struct", - "fields": [ + name: 'Serum3Account', + type: { + kind: 'struct', + fields: [ { - "name": "openOrders", - "type": "publicKey" + name: 'openOrders', + type: 'publicKey', }, { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex', + type: 'u16', }, { - "name": "baseTokenIndex", - "type": "u16" + name: 'baseTokenIndex', + type: 'u16', }, { - "name": "quoteTokenIndex", - "type": "u16" + name: 'quoteTokenIndex', + type: 'u16', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 2 - ] - } - } - ] - } + name: 'reserved', + type: { + array: ['u8', 2], + }, + }, + ], + }, }, { - "name": "MangoAccountSerum3", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountSerum3', + type: { + kind: 'struct', + fields: [ { - "name": "values", - "type": { - "array": [ + name: 'values', + type: { + array: [ { - "defined": "Serum3Account" + defined: 'Serum3Account', }, - 8 - ] - } - } - ] - } + 8, + ], + }, + }, + ], + }, }, { - "name": "PerpAccount", - "type": { - "kind": "struct", - "fields": [ + name: 'PerpAccount', + type: { + kind: 'struct', + fields: [ { - "name": "marketIndex", - "type": "u16" + name: 'marketIndex', + type: 'u16', }, { - "name": "reserved", - "type": { - "array": [ - "u8", - 6 - ] - } + name: 'reserved', + type: { + array: ['u8', 6], + }, }, { - "name": "basePositionLots", - "type": "i64" + name: 'basePositionLots', + type: 'i64', }, { - "name": "quotePositionNative", - "type": { - "defined": "I80F48" - } + name: 'quotePositionNative', + type: { + defined: 'I80F48', + }, }, { - "name": "bidsBaseLots", - "type": "i64" + name: 'bidsBaseLots', + type: 'i64', }, { - "name": "asksBaseLots", - "type": "i64" + name: 'asksBaseLots', + type: 'i64', }, { - "name": "takerBaseLots", - "type": "i64" + name: 'takerBaseLots', + type: 'i64', }, { - "name": "takerQuoteLots", - "type": "i64" - } - ] - } + name: 'takerQuoteLots', + type: 'i64', + }, + ], + }, }, { - "name": "MangoAccountPerps", - "type": { - "kind": "struct", - "fields": [ + name: 'MangoAccountPerps', + type: { + kind: 'struct', + fields: [ { - "name": "accounts", - "type": { - "array": [ + name: 'accounts', + type: { + array: [ { - "defined": "PerpAccount" + defined: 'PerpAccount', }, - 8 - ] - } + 8, + ], + }, }, { - "name": "orderMarket", - "type": { - "array": [ - "u16", - 8 - ] - } + name: 'orderMarket', + type: { + array: ['u16', 8], + }, }, { - "name": "orderSide", - "type": { - "array": [ + name: 'orderSide', + type: { + array: [ { - "defined": "Side" + defined: 'Side', }, - 8 - ] - } + 8, + ], + }, }, { - "name": "orderId", - "type": { - "array": [ - "i128", - 8 - ] - } + name: 'orderId', + type: { + array: ['i128', 8], + }, }, { - "name": "orderClientId", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } + name: 'orderClientId', + type: { + array: ['u64', 8], + }, + }, + ], + }, }, { - "name": "InterestRateParams", - "type": { - "kind": "struct", - "fields": [ + name: 'InterestRateParams', + type: { + kind: 'struct', + fields: [ { - "name": "util0", - "type": "f32" + name: 'util0', + type: 'f32', }, { - "name": "rate0", - "type": "f32" + name: 'rate0', + type: 'f32', }, { - "name": "util1", - "type": "f32" + name: 'util1', + type: 'f32', }, { - "name": "rate1", - "type": "f32" + name: 'rate1', + type: 'f32', }, { - "name": "maxRate", - "type": "f32" - } - ] - } + name: 'maxRate', + type: 'f32', + }, + ], + }, }, { - "name": "TokenIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'TokenIndex', + type: { + kind: 'struct', + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val', + type: 'u16', + }, + ], + }, }, { - "name": "Serum3MarketIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'Serum3MarketIndex', + type: { + kind: 'struct', + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val', + type: 'u16', + }, + ], + }, }, { - "name": "PerpMarketIndex", - "type": { - "kind": "struct", - "fields": [ + name: 'PerpMarketIndex', + type: { + kind: 'struct', + fields: [ { - "name": "val", - "type": "u16" - } - ] - } + name: 'val', + type: 'u16', + }, + ], + }, }, { - "name": "I80F48", - "type": { - "kind": "struct", - "fields": [ + name: 'I80F48', + type: { + kind: 'struct', + fields: [ { - "name": "val", - "type": "i128" - } - ] - } + name: 'val', + type: 'i128', + }, + ], + }, }, { - "name": "BookSideType", - "type": { - "kind": "enum", - "variants": [ + name: 'BookSideType', + type: { + kind: 'enum', + variants: [ { - "name": "Bids" + name: 'Bids', }, { - "name": "Asks" - } - ] - } + name: 'Asks', + }, + ], + }, }, { - "name": "HealthType", - "type": { - "kind": "enum", - "variants": [ + name: 'HealthType', + type: { + kind: 'enum', + variants: [ { - "name": "Init" + name: 'Init', }, { - "name": "Maint" - } - ] - } + name: 'Maint', + }, + ], + }, }, { - "name": "NodeTag", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeTag', + type: { + kind: 'enum', + variants: [ { - "name": "Uninitialized" + name: 'Uninitialized', }, { - "name": "InnerNode" + name: 'InnerNode', }, { - "name": "LeafNode" + name: 'LeafNode', }, { - "name": "FreeNode" + name: 'FreeNode', }, { - "name": "LastFreeNode" - } - ] - } + name: 'LastFreeNode', + }, + ], + }, }, { - "name": "NodeRef", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeRef', + type: { + kind: 'enum', + variants: [ { - "name": "Inner", - "fields": [ + name: 'Inner', + fields: [ { - "defined": "&'aInnerNode" - } - ] + defined: "&'aInnerNode", + }, + ], }, { - "name": "Leaf", - "fields": [ + name: 'Leaf', + fields: [ { - "defined": "&'aLeafNode" - } - ] - } - ] - } + defined: "&'aLeafNode", + }, + ], + }, + ], + }, }, { - "name": "NodeRefMut", - "type": { - "kind": "enum", - "variants": [ + name: 'NodeRefMut', + type: { + kind: 'enum', + variants: [ { - "name": "Inner", - "fields": [ + name: 'Inner', + fields: [ { - "defined": "&'amutInnerNode" - } - ] + defined: "&'amutInnerNode", + }, + ], }, { - "name": "Leaf", - "fields": [ + name: 'Leaf', + fields: [ { - "defined": "&'amutLeafNode" - } - ] - } - ] - } + defined: "&'amutLeafNode", + }, + ], + }, + ], + }, }, { - "name": "OracleType", - "type": { - "kind": "enum", - "variants": [ + name: 'OracleType', + type: { + kind: 'enum', + variants: [ { - "name": "Stub" + name: 'Stub', }, { - "name": "Pyth" - } - ] - } + name: 'Pyth', + }, + ], + }, }, { - "name": "OrderType", - "type": { - "kind": "enum", - "variants": [ + name: 'OrderType', + type: { + kind: 'enum', + variants: [ { - "name": "Limit" + name: 'Limit', }, { - "name": "ImmediateOrCancel" + name: 'ImmediateOrCancel', }, { - "name": "PostOnly" + name: 'PostOnly', }, { - "name": "Market" + name: 'Market', }, { - "name": "PostOnlySlide" - } - ] - } + name: 'PostOnlySlide', + }, + ], + }, }, { - "name": "Side", - "type": { - "kind": "enum", - "variants": [ + name: 'Side', + type: { + kind: 'enum', + variants: [ { - "name": "Bid" + name: 'Bid', }, { - "name": "Ask" - } - ] - } + name: 'Ask', + }, + ], + }, }, { - "name": "EventType", - "type": { - "kind": "enum", - "variants": [ + name: 'EventType', + type: { + kind: 'enum', + variants: [ { - "name": "Fill" + name: 'Fill', }, { - "name": "Out" + name: 'Out', }, { - "name": "Liquidate" - } - ] - } + name: 'Liquidate', + }, + ], + }, }, { - "name": "Serum3SelfTradeBehavior", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3SelfTradeBehavior', + type: { + kind: 'enum', + variants: [ { - "name": "DecrementTake" + name: 'DecrementTake', }, { - "name": "CancelProvide" + name: 'CancelProvide', }, { - "name": "AbortTransaction" - } - ] - } + name: 'AbortTransaction', + }, + ], + }, }, { - "name": "Serum3OrderType", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3OrderType', + type: { + kind: 'enum', + variants: [ { - "name": "Limit" + name: 'Limit', }, { - "name": "ImmediateOrCancel" + name: 'ImmediateOrCancel', }, { - "name": "PostOnly" - } - ] - } + name: 'PostOnly', + }, + ], + }, }, { - "name": "Serum3Side", - "type": { - "kind": "enum", - "variants": [ + name: 'Serum3Side', + type: { + kind: 'enum', + variants: [ { - "name": "Bid" + name: 'Bid', }, { - "name": "Ask" - } - ] - } + name: 'Ask', + }, + ], + }, }, { - "name": "ProgramInstruction", - "type": { - "kind": "enum", - "variants": [ + name: 'ProgramInstruction', + type: { + kind: 'enum', + variants: [ { - "name": "CreateLookupTable", - "fields": [ + name: 'CreateLookupTable', + fields: [ { - "name": "recent_slot", - "type": { - "defined": "Slot" - } + name: 'recent_slot', + type: { + defined: 'Slot', + }, }, { - "name": "bump_seed", - "type": "u8" - } - ] + name: 'bump_seed', + type: 'u8', + }, + ], }, { - "name": "FreezeLookupTable" + name: 'FreezeLookupTable', }, { - "name": "ExtendLookupTable", - "fields": [ + name: 'ExtendLookupTable', + fields: [ { - "name": "new_addresses", - "type": { - "vec": "publicKey" - } - } - ] + name: 'new_addresses', + type: { + vec: 'publicKey', + }, + }, + ], }, { - "name": "DeactivateLookupTable" + name: 'DeactivateLookupTable', }, { - "name": "CloseLookupTable" - } - ] - } - } + name: 'CloseLookupTable', + }, + ], + }, + }, ], - "errors": [ + errors: [ { - "code": 6000, - "name": "SomeError", - "msg": "" + code: 6000, + name: 'SomeError', + msg: '', }, { - "code": 6001, - "name": "MathError", - "msg": "" + code: 6001, + name: 'MathError', + msg: '', }, { - "code": 6002, - "name": "UnexpectedOracle", - "msg": "" + code: 6002, + name: 'UnexpectedOracle', + msg: '', }, { - "code": 6003, - "name": "UnknownOracleType", - "msg": "" + code: 6003, + name: 'UnknownOracleType', + msg: '', }, { - "code": 6004, - "name": "InvalidMarginTradeTargetCpiProgram", - "msg": "" + code: 6004, + name: 'InvalidMarginTradeTargetCpiProgram', + msg: '', }, { - "code": 6005, - "name": "HealthMustBePositive", - "msg": "" + code: 6005, + name: 'HealthMustBePositive', + msg: '', }, { - "code": 6006, - "name": "IsBankrupt", - "msg": "The account is bankrupt" - } - ] + code: 6006, + name: 'IsBankrupt', + msg: 'The account is bankrupt', + }, + ], }; diff --git a/ts/client/src/scripts/example1-admin.ts b/ts/client/src/scripts/example1-admin.ts index fb5e7cba3..770c10b98 100644 --- a/ts/client/src/scripts/example1-admin.ts +++ b/ts/client/src/scripts/example1-admin.ts @@ -136,6 +136,36 @@ async function main() { ); console.log(`...registerd serum3 market ${markets[0].publicKey}`); + // register perp market + console.log(`Registering perp market...`); + try { + await client.perpCreateMarket( + group, + btcDevnetOracle, + 0, + 'BTC/USDC', + 0, + 1, + 10, + 100, + 0.975, + 0.95, + 1.025, + 1.05, + 0.012, + 0.0002, + 0.0, + ); + } catch (error) { + console.log(error); + } + const perpMarkets = await client.perpGetMarket( + group, + group.banksMap.get('BTC')?.tokenIndex, + group.banksMap.get('USDC')?.tokenIndex, + ); + console.log(`...created perp market ${perpMarkets[0].publicKey}`); + process.exit(); } diff --git a/ts/client/src/scripts/example1-user.ts b/ts/client/src/scripts/example1-user.ts index e8989408f..ebfa79854 100644 --- a/ts/client/src/scripts/example1-user.ts +++ b/ts/client/src/scripts/example1-user.ts @@ -1,6 +1,7 @@ import { Provider, Wallet } from '@project-serum/anchor'; import { Connection, Keypair } from '@solana/web3.js'; import fs from 'fs'; +import { OrderType, Side } from '../accounts/perp'; import { Serum3OrderType, Serum3SelfTradeBehavior, @@ -156,6 +157,46 @@ async function main() { 'BTC/USDC', ); + // perps + console.log(`Placing perp bid...`); + await client.perpPlaceOrder( + group, + mangoAccount, + 'BTC/USDC', + Side.bid, + 1, + 1, + 65535, + 65535, + OrderType.limit, + 0, + 1, + ); + + console.log(`Placing perp ask...`); + await client.perpPlaceOrder( + group, + mangoAccount, + 'BTC/USDC', + Side.ask, + 1, + 1, + 65535, + 65535, + OrderType.limit, + 0, + 1, + ); + + while (true) { + // TODO: quotePositionNative might be buggy on program side, investigate... + console.log( + `Waiting for self trade to consume (note: make sure keeper crank is running)...`, + ); + await mangoAccount.reload(client); + console.log(mangoAccount.toString()); + } + process.exit(); } diff --git a/ts/client/tsconfig.json b/ts/client/tsconfig.json index 4c7b94637..b7e1a6ae0 100644 --- a/ts/client/tsconfig.json +++ b/ts/client/tsconfig.json @@ -6,6 +6,7 @@ "declaration": true, "declarationDir": "dist", "declarationMap": true, + "noErrorTruncation": true, "esModuleInterop": true, "lib": [ "es2019"