diff --git a/release.sh b/release.sh index 1950b0acd..15e8bf875 100755 --- a/release.sh +++ b/release.sh @@ -2,30 +2,33 @@ set -euo pipefail -if [[ -z "${PROVIDER_WALLET}" ]]; then - echo "Please provide path to a provider wallet keypair." - exit -1 -fi +# build program, TODO try removing --skip-lint +anchor build --skip-lint -if [[ -z "${VERSION_MANUALLY_BUMPED}" ]]; then - echo "Please bump versions in package.json and in cargo.toml." - exit -1 -fi - -# build program -anchor build - -# update on chain program and IDL, atm used for testing/developing -anchor deploy --provider.cluster devnet --provider.wallet ${PROVIDER_WALLET} -anchor idl upgrade --provider.cluster devnet --provider.wallet ${PROVIDER_WALLET}\ - --filepath target/idl/voter_stake_registry.json Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS - -# update types in npm package and publish the npm package -cp cp ./target/types/mango_v4.ts ./ts/mango_v4.ts +# update types in ts client package +cp -v ./target/types/mango_v4.ts ./ts/mango_v4.ts yarn clean && yarn build && cp package.json ./dist/ -# yarn publish dist # TODO: should this package replace mango-v3-client? -echo -echo Remember to commit and push the version update as well as the changes -echo to ts/mango_v4.tx. -echo +# if [[ -z "${PROVIDER_WALLET}" ]]; then +# echo "Please provide path to a provider wallet keypair." +# exit -1 +# fi + +# if [[ -z "${VERSION_MANUALLY_BUMPED}" ]]; then +# echo "Please bump versions in package.json and in cargo.toml." +# exit -1 +# fi + +# # update on chain program and IDL, atm used for testing/developing +# anchor deploy --provider.cluster devnet --provider.wallet ${PROVIDER_WALLET} +# anchor idl upgrade --provider.cluster devnet --provider.wallet ${PROVIDER_WALLET}\ +# --filepath target/idl/voter_stake_registry.json Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS + + +# # publish the npm package +# yarn publish dist + +# echo +# echo Remember to commit and push the version update as well as the changes +# echo to ts/mango_v4.tx. +# echo diff --git a/ts/example.ts b/ts/example.ts new file mode 100644 index 000000000..3e65d7a81 --- /dev/null +++ b/ts/example.ts @@ -0,0 +1,15 @@ +import { Provider, Wallet } from '@project-serum/anchor'; +import { Connection, Keypair } from '@solana/web3.js'; +import { MangoClient } from './client'; + +async function main() { + const options = Provider.defaultOptions(); + const connection = new Connection('https://api.devnet.solana.com', options); + const wallet = new Wallet(Keypair.generate()); + const provider = new Provider(connection, wallet, options); + const client = await MangoClient.connect(provider, true); + + // client.program.rpc.createAccount ... +} + +main(); diff --git a/ts/mango_v4.ts b/ts/mango_v4.ts index 98005db53..bed7c546f 100644 --- a/ts/mango_v4.ts +++ b/ts/mango_v4.ts @@ -14,7 +14,7 @@ export type MangoV4 = { { "kind": "const", "type": "string", - "value": "group" + "value": "Group" }, { "kind": "account", @@ -38,11 +38,6 @@ export type MangoV4 = { "name": "systemProgram", "isMut": false, "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false } ], "args": [] @@ -79,13 +74,14 @@ export type MangoV4 = { { "kind": "const", "type": "string", - "value": "TokenBank" + "value": "Bank" }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "mint" + "kind": "arg", + "type": { + "defined": "TokenIndex" + }, + "path": "token_index" } ] } @@ -104,7 +100,33 @@ export type MangoV4 = { { "kind": "const", "type": "string", - "value": "TokenVault" + "value": "Vault" + }, + { + "kind": "arg", + "type": { + "defined": "TokenIndex" + }, + "path": "token_index" + } + ] + } + }, + { + "name": "mintInfo", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "MintInfo" }, { "kind": "account", @@ -115,6 +137,16 @@ export type MangoV4 = { ] } }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "addressLookupTable", + "isMut": true, + "isSigner": false + }, { "name": "payer", "isMut": true, @@ -130,6 +162,11 @@ export type MangoV4 = { "isMut": false, "isSigner": false }, + { + "name": "addressLookupTableProgram", + "isMut": false, + "isSigner": false + }, { "name": "rent", "isMut": false, @@ -138,8 +175,26 @@ export type MangoV4 = { ], "args": [ { - "name": "decimals", - "type": "u8" + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "maintAssetWeight", + "type": "f32" + }, + { + "name": "initAssetWeight", + "type": "f32" + }, + { + "name": "maintLiabWeight", + "type": "f32" + }, + { + "name": "initLiabWeight", + "type": "f32" } ] }, @@ -165,7 +220,7 @@ export type MangoV4 = { { "kind": "const", "type": "string", - "value": "account" + "value": "MangoAccount" }, { "kind": "account", @@ -194,11 +249,6 @@ export type MangoV4 = { "name": "systemProgram", "isMut": false, "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false } ], "args": [ @@ -208,6 +258,72 @@ export type MangoV4 = { } ] }, + { + "name": "createStubOracle", + "accounts": [ + { + "name": "oracle", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "const", + "type": "string", + "value": "StubOracle" + }, + { + "kind": "account", + "type": "publicKey", + "account": "Mint", + "path": "token_mint" + } + ] + } + }, + { + "name": "tokenMint", + "isMut": false, + "isSigner": false + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + } + ] + }, + { + "name": "setStubOracle", + "accounts": [ + { + "name": "oracle", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + } + ] + }, { "name": "deposit", "accounts": [ @@ -218,66 +334,26 @@ export type MangoV4 = { }, { "name": "account", - "isMut": false, + "isMut": true, "isSigner": false }, { "name": "bank", "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "account", - "type": "publicKey", - "path": "group" - }, - { - "kind": "const", - "type": "string", - "value": "TokenBank" - }, - { - "kind": "account", - "type": "publicKey", - "account": "TokenAccount", - "path": "deposit_token.mint" - } - ] - } + "isSigner": false }, { "name": "vault", "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "account", - "type": "publicKey", - "path": "group" - }, - { - "kind": "const", - "type": "string", - "value": "TokenVault" - }, - { - "kind": "account", - "type": "publicKey", - "account": "TokenAccount", - "path": "deposit_token.mint" - } - ] - } + "isSigner": false }, { - "name": "depositToken", + "name": "tokenAccount", "isMut": true, "isSigner": false }, { - "name": "depositAuthority", + "name": "tokenAuthority", "isMut": false, "isSigner": true }, @@ -293,11 +369,773 @@ export type MangoV4 = { "type": "u64" } ] + }, + { + "name": "withdraw", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "bank", + "isMut": true, + "isSigner": false + }, + { + "name": "vault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "allowBorrow", + "type": "bool" + } + ] + }, + { + "name": "marginTrade", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "banksLen", + "type": { + "defined": "usize" + } + }, + { + "name": "cpiData", + "type": "bytes" + } + ] + }, + { + "name": "serum3RegisterMarket", + "accounts": [ + { + "name": "group", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "Serum3Market" + }, + { + "kind": "account", + "type": "publicKey", + "path": "serum_market_external" + } + ] + } + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + }, + { + "name": "serum3CreateOpenOrders", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": false, + "isSigner": false + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "account" + }, + { + "kind": "const", + "type": "string", + "value": "Serum3OO" + }, + { + "kind": "account", + "type": "publicKey", + "path": "serum_market" + } + ] + } + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "serum3PlaceOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketRequestQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "order", + "type": { + "defined": "instructions::NewOrderInstructionData" + } + } + ] + }, + { + "name": "serum3CancelOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "order", + "type": { + "defined": "instructions::CancelOrderInstructionData" + } + } + ] + }, + { + "name": "serum3SettleFunds", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "serum3LiqForceCancelOrders", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "limit", + "type": "u8" + } + ] + }, + { + "name": "createPerpMarket", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "PerpMarket" + }, + { + "kind": "arg", + "type": { + "defined": "PerpMarketIndex" + }, + "path": "perp_market_index" + } + ] + } + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventQueue", + "isMut": false, + "isSigner": false + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "perpMarketIndex", + "type": { + "defined": "PerpMarketIndex" + } + }, + { + "name": "baseTokenIndexOpt", + "type": { + "option": { + "defined": "TokenIndex" + } + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteLotSize", + "type": "i64" + }, + { + "name": "baseLotSize", + "type": "i64" + } + ] + }, + { + "name": "placePerpOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "eventQueue", + "isMut": false, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "price", + "type": "i64" + }, + { + "name": "maxBaseQuantity", + "type": "i64" + }, + { + "name": "maxQuoteQuantity", + "type": "i64" + }, + { + "name": "clientOrderId", + "type": "u64" + }, + { + "name": "orderType", + "type": { + "defined": "OrderType" + } + }, + { + "name": "expiryTimestamp", + "type": "u64" + }, + { + "name": "limit", + "type": "u8" + } + ] } ], "accounts": [ { - "name": "mangoAccount", + "name": "bank", "type": { "kind": "struct", "fields": [ @@ -306,62 +1144,17 @@ export type MangoV4 = { "type": "publicKey" }, { - "name": "owner", + "name": "mint", "type": "publicKey" }, { - "name": "delegate", + "name": "vault", "type": "publicKey" }, { - "name": "indexedPositions", - "type": { - "defined": "IndexedPositions" - } - }, - { - "name": "beingLiquidated", - "type": "bool" - }, - { - "name": "isBankrupt", - "type": "bool" - }, - { - "name": "reserved", - "type": { - "array": [ - "u8", - 5 - ] - } - } - ] - } - }, - { - "name": "mangoGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", + "name": "oracle", "type": "publicKey" }, - { - "name": "tokens", - "type": { - "defined": "Tokens" - } - } - ] - } - }, - { - "name": "TokenBank", - "type": { - "kind": "struct", - "fields": [ { "name": "depositIndex", "type": { @@ -385,19 +1178,33 @@ export type MangoV4 = { "type": { "defined": "I80F48" } - } - ] - } - } - ], - "types": [ - { - "name": "IndexedPosition", - "type": { - "kind": "struct", - "fields": [ + }, { - "name": "indexedValue", + "name": "maintAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maintLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "dust", "type": { "defined": "I80F48" } @@ -412,18 +1219,54 @@ export type MangoV4 = { } }, { - "name": "IndexedPositions", + "name": "bookSide", "type": { "kind": "struct", "fields": [ { - "name": "values", + "name": "bookSideType", + "type": { + "defined": "BookSideType" + } + }, + { + "name": "bumpIndex", + "type": { + "defined": "usize" + } + }, + { + "name": "freeListLen", + "type": { + "defined": "usize" + } + }, + { + "name": "freeListHead", + "type": { + "defined": "NodeHandle" + } + }, + { + "name": "rootNode", + "type": { + "defined": "NodeHandle" + } + }, + { + "name": "leafCount", + "type": { + "defined": "usize" + } + }, + { + "name": "nodes", "type": { "array": [ { - "defined": "IndexedPosition" + "defined": "AnyNode" }, - 32 + 1024 ] } } @@ -431,7 +1274,80 @@ export type MangoV4 = { } }, { - "name": "TokenInfo", + "name": "group", + "type": { + "kind": "struct", + "fields": [ + { + "name": "admin", + "type": "publicKey" + }, + { + "name": "bump", + "type": "u8" + } + ] + } + }, + { + "name": "mangoAccount", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "owner", + "type": "publicKey" + }, + { + "name": "delegate", + "type": "publicKey" + }, + { + "name": "tokenAccountMap", + "type": { + "defined": "TokenAccountMap" + } + }, + { + "name": "serum3AccountMap", + "type": { + "defined": "Serum3AccountMap" + } + }, + { + "name": "beingLiquidated", + "type": "bool" + }, + { + "name": "isBankrupt", + "type": "bool" + }, + { + "name": "accountNum", + "type": "u8" + }, + { + "name": "bump", + "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 5 + ] + } + } + ] + } + }, + { + "name": "mintInfo", "type": { "kind": "struct", "fields": [ @@ -440,23 +1356,231 @@ export type MangoV4 = { "type": "publicKey" }, { - "name": "decimals", + "name": "bank", + "type": "publicKey" + }, + { + "name": "vault", + "type": "publicKey" + }, + { + "name": "oracle", + "type": "publicKey" + }, + { + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "addressLookupTable", + "type": "publicKey" + }, + { + "name": "addressLookupTableBankIndex", "type": "u8" }, { - "name": "bankBump", + "name": "addressLookupTableOracleIndex", + "type": "u8" + } + ] + } + }, + { + "name": "stubOracle", + "type": { + "kind": "struct", + "fields": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + }, + { + "name": "lastUpdated", + "type": "i64" + } + ] + } + }, + { + "name": "perpMarket", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "oracle", + "type": "publicKey" + }, + { + "name": "bids", + "type": "publicKey" + }, + { + "name": "asks", + "type": "publicKey" + }, + { + "name": "eventQueue", + "type": "publicKey" + }, + { + "name": "quoteLotSize", + "type": "i64" + }, + { + "name": "baseLotSize", + "type": "i64" + }, + { + "name": "seqNum", + "type": "u64" + }, + { + "name": "bump", "type": "u8" }, { - "name": "vaultBump", - "type": "u8" + "name": "perpMarketIndex", + "type": { + "defined": "PerpMarketIndex" + } }, { - "name": "reserved", + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + } + }, + { + "name": "eventQueueHeader", + "type": { + "kind": "struct", + "fields": [ + { + "name": "metaData", + "type": { + "defined": "MetaData" + } + }, + { + "name": "head", + "type": { + "defined": "usize" + } + }, + { + "name": "count", + "type": { + "defined": "usize" + } + }, + { + "name": "seqNum", + "type": { + "defined": "usize" + } + } + ] + } + }, + { + "name": "serum3Market", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "serumProgram", + "type": "publicKey" + }, + { + "name": "serumMarketExternal", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "bump", + "type": "u8" + } + ] + } + } + ], + "types": [ + { + "name": "TokenAccount", + "type": { + "kind": "struct", + "fields": [ + { + "name": "indexedValue", + "type": { + "defined": "I80F48" + } + }, + { + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "inUseCount", + "type": "u8" + } + ] + } + }, + { + "name": "TokenAccountMap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "values", "type": { "array": [ - "u8", - 30 + { + "defined": "TokenAccount" + }, + 16 ] } } @@ -464,23 +1588,293 @@ export type MangoV4 = { } }, { - "name": "Tokens", + "name": "Serum3Account", "type": { "kind": "struct", "fields": [ { - "name": "infos", + "name": "openOrders", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + } + }, + { + "name": "Serum3AccountMap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "values", "type": { "array": [ { - "defined": "TokenInfo" + "defined": "Serum3Account" }, - 100 + 8 ] } } ] } + }, + { + "name": "BookSideType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bids" + }, + { + "name": "Asks" + } + ] + } + }, + { + "name": "DataType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "MangoGroup" + }, + { + "name": "MangoAccount" + }, + { + "name": "RootBank" + }, + { + "name": "NodeBank" + }, + { + "name": "PerpMarket" + }, + { + "name": "Bids" + }, + { + "name": "Asks" + }, + { + "name": "MangoCache" + }, + { + "name": "EventQueue" + }, + { + "name": "AdvancedOrders" + }, + { + "name": "ReferrerMemory" + }, + { + "name": "ReferrerIdRecord" + } + ] + } + }, + { + "name": "NodeTag", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Uninitialized" + }, + { + "name": "InnerNode" + }, + { + "name": "LeafNode" + }, + { + "name": "FreeNode" + }, + { + "name": "LastFreeNode" + } + ] + } + }, + { + "name": "NodeRef", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Inner", + "fields": [ + { + "defined": "&'aInnerNode" + } + ] + }, + { + "name": "Leaf", + "fields": [ + { + "defined": "&'aLeafNode" + } + ] + } + ] + } + }, + { + "name": "NodeRefMut", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Inner", + "fields": [ + { + "defined": "&'amutInnerNode" + } + ] + }, + { + "name": "Leaf", + "fields": [ + { + "defined": "&'amutLeafNode" + } + ] + } + ] + } + }, + { + "name": "OracleType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Stub" + }, + { + "name": "Pyth" + } + ] + } + }, + { + "name": "OrderType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Limit" + }, + { + "name": "ImmediateOrCancel" + }, + { + "name": "PostOnly" + }, + { + "name": "Market" + }, + { + "name": "PostOnlySlide" + } + ] + } + }, + { + "name": "Side", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bid" + }, + { + "name": "Ask" + } + ] + } + }, + { + "name": "EventType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Fill" + }, + { + "name": "Out" + }, + { + "name": "Liquidate" + } + ] + } + }, + { + "name": "ProgramInstruction", + "type": { + "kind": "enum", + "variants": [ + { + "name": "CreateLookupTable", + "fields": [ + { + "name": "recent_slot", + "type": { + "defined": "Slot" + } + }, + { + "name": "bump_seed", + "type": "u8" + } + ] + }, + { + "name": "FreezeLookupTable" + }, + { + "name": "ExtendLookupTable", + "fields": [ + { + "name": "new_addresses", + "type": { + "vec": "publicKey" + } + } + ] + }, + { + "name": "DeactivateLookupTable" + }, + { + "name": "CloseLookupTable" + } + ] + } } ], "errors": [ @@ -488,6 +1882,31 @@ export type MangoV4 = { "code": 6000, "name": "SomeError", "msg": "" + }, + { + "code": 6001, + "name": "MathError", + "msg": "" + }, + { + "code": 6002, + "name": "UnexpectedOracle", + "msg": "" + }, + { + "code": 6003, + "name": "UnknownOracleType", + "msg": "" + }, + { + "code": 6004, + "name": "InvalidMarginTradeTargetCpiProgram", + "msg": "" + }, + { + "code": 6005, + "name": "HealthMustBePositive", + "msg": "" } ] }; @@ -508,7 +1927,7 @@ export const IDL: MangoV4 = { { "kind": "const", "type": "string", - "value": "group" + "value": "Group" }, { "kind": "account", @@ -532,11 +1951,6 @@ export const IDL: MangoV4 = { "name": "systemProgram", "isMut": false, "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false } ], "args": [] @@ -573,13 +1987,14 @@ export const IDL: MangoV4 = { { "kind": "const", "type": "string", - "value": "TokenBank" + "value": "Bank" }, { - "kind": "account", - "type": "publicKey", - "account": "Mint", - "path": "mint" + "kind": "arg", + "type": { + "defined": "TokenIndex" + }, + "path": "token_index" } ] } @@ -598,7 +2013,33 @@ export const IDL: MangoV4 = { { "kind": "const", "type": "string", - "value": "TokenVault" + "value": "Vault" + }, + { + "kind": "arg", + "type": { + "defined": "TokenIndex" + }, + "path": "token_index" + } + ] + } + }, + { + "name": "mintInfo", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "MintInfo" }, { "kind": "account", @@ -609,6 +2050,16 @@ export const IDL: MangoV4 = { ] } }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "addressLookupTable", + "isMut": true, + "isSigner": false + }, { "name": "payer", "isMut": true, @@ -624,6 +2075,11 @@ export const IDL: MangoV4 = { "isMut": false, "isSigner": false }, + { + "name": "addressLookupTableProgram", + "isMut": false, + "isSigner": false + }, { "name": "rent", "isMut": false, @@ -632,8 +2088,26 @@ export const IDL: MangoV4 = { ], "args": [ { - "name": "decimals", - "type": "u8" + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "maintAssetWeight", + "type": "f32" + }, + { + "name": "initAssetWeight", + "type": "f32" + }, + { + "name": "maintLiabWeight", + "type": "f32" + }, + { + "name": "initLiabWeight", + "type": "f32" } ] }, @@ -659,7 +2133,7 @@ export const IDL: MangoV4 = { { "kind": "const", "type": "string", - "value": "account" + "value": "MangoAccount" }, { "kind": "account", @@ -688,11 +2162,6 @@ export const IDL: MangoV4 = { "name": "systemProgram", "isMut": false, "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false } ], "args": [ @@ -702,6 +2171,72 @@ export const IDL: MangoV4 = { } ] }, + { + "name": "createStubOracle", + "accounts": [ + { + "name": "oracle", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "const", + "type": "string", + "value": "StubOracle" + }, + { + "kind": "account", + "type": "publicKey", + "account": "Mint", + "path": "token_mint" + } + ] + } + }, + { + "name": "tokenMint", + "isMut": false, + "isSigner": false + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + } + ] + }, + { + "name": "setStubOracle", + "accounts": [ + { + "name": "oracle", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + } + ] + }, { "name": "deposit", "accounts": [ @@ -712,66 +2247,26 @@ export const IDL: MangoV4 = { }, { "name": "account", - "isMut": false, + "isMut": true, "isSigner": false }, { "name": "bank", "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "account", - "type": "publicKey", - "path": "group" - }, - { - "kind": "const", - "type": "string", - "value": "TokenBank" - }, - { - "kind": "account", - "type": "publicKey", - "account": "TokenAccount", - "path": "deposit_token.mint" - } - ] - } + "isSigner": false }, { "name": "vault", "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "account", - "type": "publicKey", - "path": "group" - }, - { - "kind": "const", - "type": "string", - "value": "TokenVault" - }, - { - "kind": "account", - "type": "publicKey", - "account": "TokenAccount", - "path": "deposit_token.mint" - } - ] - } + "isSigner": false }, { - "name": "depositToken", + "name": "tokenAccount", "isMut": true, "isSigner": false }, { - "name": "depositAuthority", + "name": "tokenAuthority", "isMut": false, "isSigner": true }, @@ -787,11 +2282,773 @@ export const IDL: MangoV4 = { "type": "u64" } ] + }, + { + "name": "withdraw", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "bank", + "isMut": true, + "isSigner": false + }, + { + "name": "vault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "allowBorrow", + "type": "bool" + } + ] + }, + { + "name": "marginTrade", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "banksLen", + "type": { + "defined": "usize" + } + }, + { + "name": "cpiData", + "type": "bytes" + } + ] + }, + { + "name": "serum3RegisterMarket", + "accounts": [ + { + "name": "group", + "isMut": true, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "Serum3Market" + }, + { + "kind": "account", + "type": "publicKey", + "path": "serum_market_external" + } + ] + } + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + }, + { + "name": "serum3CreateOpenOrders", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": false, + "isSigner": false + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "account" + }, + { + "kind": "const", + "type": "string", + "value": "Serum3OO" + }, + { + "kind": "account", + "type": "publicKey", + "path": "serum_market" + } + ] + } + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "serum3PlaceOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketRequestQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "order", + "type": { + "defined": "instructions::NewOrderInstructionData" + } + } + ] + }, + { + "name": "serum3CancelOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "order", + "type": { + "defined": "instructions::CancelOrderInstructionData" + } + } + ] + }, + { + "name": "serum3SettleFunds", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "serum3LiqForceCancelOrders", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "openOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarketExternal", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBids", + "isMut": true, + "isSigner": false + }, + { + "name": "marketAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "marketEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "marketBaseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketQuoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "marketVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "quoteBank", + "isMut": true, + "isSigner": false + }, + { + "name": "quoteVault", + "isMut": true, + "isSigner": false + }, + { + "name": "baseBank", + "isMut": true, + "isSigner": false + }, + { + "name": "baseVault", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "limit", + "type": "u8" + } + ] + }, + { + "name": "createPerpMarket", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false, + "pda": { + "seeds": [ + { + "kind": "account", + "type": "publicKey", + "path": "group" + }, + { + "kind": "const", + "type": "string", + "value": "PerpMarket" + }, + { + "kind": "arg", + "type": { + "defined": "PerpMarketIndex" + }, + "path": "perp_market_index" + } + ] + } + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "eventQueue", + "isMut": false, + "isSigner": false + }, + { + "name": "payer", + "isMut": true, + "isSigner": true + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "perpMarketIndex", + "type": { + "defined": "PerpMarketIndex" + } + }, + { + "name": "baseTokenIndexOpt", + "type": { + "option": { + "defined": "TokenIndex" + } + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteLotSize", + "type": "i64" + }, + { + "name": "baseLotSize", + "type": "i64" + } + ] + }, + { + "name": "placePerpOrder", + "accounts": [ + { + "name": "group", + "isMut": false, + "isSigner": false + }, + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "perpMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "asks", + "isMut": true, + "isSigner": false + }, + { + "name": "bids", + "isMut": true, + "isSigner": false + }, + { + "name": "eventQueue", + "isMut": false, + "isSigner": false + }, + { + "name": "oracle", + "isMut": false, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "price", + "type": "i64" + }, + { + "name": "maxBaseQuantity", + "type": "i64" + }, + { + "name": "maxQuoteQuantity", + "type": "i64" + }, + { + "name": "clientOrderId", + "type": "u64" + }, + { + "name": "orderType", + "type": { + "defined": "OrderType" + } + }, + { + "name": "expiryTimestamp", + "type": "u64" + }, + { + "name": "limit", + "type": "u8" + } + ] } ], "accounts": [ { - "name": "mangoAccount", + "name": "bank", "type": { "kind": "struct", "fields": [ @@ -800,62 +3057,17 @@ export const IDL: MangoV4 = { "type": "publicKey" }, { - "name": "owner", + "name": "mint", "type": "publicKey" }, { - "name": "delegate", + "name": "vault", "type": "publicKey" }, { - "name": "indexedPositions", - "type": { - "defined": "IndexedPositions" - } - }, - { - "name": "beingLiquidated", - "type": "bool" - }, - { - "name": "isBankrupt", - "type": "bool" - }, - { - "name": "reserved", - "type": { - "array": [ - "u8", - 5 - ] - } - } - ] - } - }, - { - "name": "mangoGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", + "name": "oracle", "type": "publicKey" }, - { - "name": "tokens", - "type": { - "defined": "Tokens" - } - } - ] - } - }, - { - "name": "TokenBank", - "type": { - "kind": "struct", - "fields": [ { "name": "depositIndex", "type": { @@ -879,19 +3091,33 @@ export const IDL: MangoV4 = { "type": { "defined": "I80F48" } - } - ] - } - } - ], - "types": [ - { - "name": "IndexedPosition", - "type": { - "kind": "struct", - "fields": [ + }, { - "name": "indexedValue", + "name": "maintAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maintLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "dust", "type": { "defined": "I80F48" } @@ -906,18 +3132,54 @@ export const IDL: MangoV4 = { } }, { - "name": "IndexedPositions", + "name": "bookSide", "type": { "kind": "struct", "fields": [ { - "name": "values", + "name": "bookSideType", + "type": { + "defined": "BookSideType" + } + }, + { + "name": "bumpIndex", + "type": { + "defined": "usize" + } + }, + { + "name": "freeListLen", + "type": { + "defined": "usize" + } + }, + { + "name": "freeListHead", + "type": { + "defined": "NodeHandle" + } + }, + { + "name": "rootNode", + "type": { + "defined": "NodeHandle" + } + }, + { + "name": "leafCount", + "type": { + "defined": "usize" + } + }, + { + "name": "nodes", "type": { "array": [ { - "defined": "IndexedPosition" + "defined": "AnyNode" }, - 32 + 1024 ] } } @@ -925,7 +3187,80 @@ export const IDL: MangoV4 = { } }, { - "name": "TokenInfo", + "name": "group", + "type": { + "kind": "struct", + "fields": [ + { + "name": "admin", + "type": "publicKey" + }, + { + "name": "bump", + "type": "u8" + } + ] + } + }, + { + "name": "mangoAccount", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "owner", + "type": "publicKey" + }, + { + "name": "delegate", + "type": "publicKey" + }, + { + "name": "tokenAccountMap", + "type": { + "defined": "TokenAccountMap" + } + }, + { + "name": "serum3AccountMap", + "type": { + "defined": "Serum3AccountMap" + } + }, + { + "name": "beingLiquidated", + "type": "bool" + }, + { + "name": "isBankrupt", + "type": "bool" + }, + { + "name": "accountNum", + "type": "u8" + }, + { + "name": "bump", + "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 5 + ] + } + } + ] + } + }, + { + "name": "mintInfo", "type": { "kind": "struct", "fields": [ @@ -934,23 +3269,231 @@ export const IDL: MangoV4 = { "type": "publicKey" }, { - "name": "decimals", + "name": "bank", + "type": "publicKey" + }, + { + "name": "vault", + "type": "publicKey" + }, + { + "name": "oracle", + "type": "publicKey" + }, + { + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "addressLookupTable", + "type": "publicKey" + }, + { + "name": "addressLookupTableBankIndex", "type": "u8" }, { - "name": "bankBump", + "name": "addressLookupTableOracleIndex", + "type": "u8" + } + ] + } + }, + { + "name": "stubOracle", + "type": { + "kind": "struct", + "fields": [ + { + "name": "price", + "type": { + "defined": "I80F48" + } + }, + { + "name": "lastUpdated", + "type": "i64" + } + ] + } + }, + { + "name": "perpMarket", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "oracle", + "type": "publicKey" + }, + { + "name": "bids", + "type": "publicKey" + }, + { + "name": "asks", + "type": "publicKey" + }, + { + "name": "eventQueue", + "type": "publicKey" + }, + { + "name": "quoteLotSize", + "type": "i64" + }, + { + "name": "baseLotSize", + "type": "i64" + }, + { + "name": "seqNum", + "type": "u64" + }, + { + "name": "bump", "type": "u8" }, { - "name": "vaultBump", - "type": "u8" + "name": "perpMarketIndex", + "type": { + "defined": "PerpMarketIndex" + } }, { - "name": "reserved", + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + } + }, + { + "name": "eventQueueHeader", + "type": { + "kind": "struct", + "fields": [ + { + "name": "metaData", + "type": { + "defined": "MetaData" + } + }, + { + "name": "head", + "type": { + "defined": "usize" + } + }, + { + "name": "count", + "type": { + "defined": "usize" + } + }, + { + "name": "seqNum", + "type": { + "defined": "usize" + } + } + ] + } + }, + { + "name": "serum3Market", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "serumProgram", + "type": "publicKey" + }, + { + "name": "serumMarketExternal", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "bump", + "type": "u8" + } + ] + } + } + ], + "types": [ + { + "name": "TokenAccount", + "type": { + "kind": "struct", + "fields": [ + { + "name": "indexedValue", + "type": { + "defined": "I80F48" + } + }, + { + "name": "tokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "inUseCount", + "type": "u8" + } + ] + } + }, + { + "name": "TokenAccountMap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "values", "type": { "array": [ - "u8", - 30 + { + "defined": "TokenAccount" + }, + 16 ] } } @@ -958,23 +3501,293 @@ export const IDL: MangoV4 = { } }, { - "name": "Tokens", + "name": "Serum3Account", "type": { "kind": "struct", "fields": [ { - "name": "infos", + "name": "openOrders", + "type": "publicKey" + }, + { + "name": "marketIndex", + "type": { + "defined": "Serum3MarketIndex" + } + }, + { + "name": "baseTokenIndex", + "type": { + "defined": "TokenIndex" + } + }, + { + "name": "quoteTokenIndex", + "type": { + "defined": "TokenIndex" + } + } + ] + } + }, + { + "name": "Serum3AccountMap", + "type": { + "kind": "struct", + "fields": [ + { + "name": "values", "type": { "array": [ { - "defined": "TokenInfo" + "defined": "Serum3Account" }, - 100 + 8 ] } } ] } + }, + { + "name": "BookSideType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bids" + }, + { + "name": "Asks" + } + ] + } + }, + { + "name": "DataType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "MangoGroup" + }, + { + "name": "MangoAccount" + }, + { + "name": "RootBank" + }, + { + "name": "NodeBank" + }, + { + "name": "PerpMarket" + }, + { + "name": "Bids" + }, + { + "name": "Asks" + }, + { + "name": "MangoCache" + }, + { + "name": "EventQueue" + }, + { + "name": "AdvancedOrders" + }, + { + "name": "ReferrerMemory" + }, + { + "name": "ReferrerIdRecord" + } + ] + } + }, + { + "name": "NodeTag", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Uninitialized" + }, + { + "name": "InnerNode" + }, + { + "name": "LeafNode" + }, + { + "name": "FreeNode" + }, + { + "name": "LastFreeNode" + } + ] + } + }, + { + "name": "NodeRef", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Inner", + "fields": [ + { + "defined": "&'aInnerNode" + } + ] + }, + { + "name": "Leaf", + "fields": [ + { + "defined": "&'aLeafNode" + } + ] + } + ] + } + }, + { + "name": "NodeRefMut", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Inner", + "fields": [ + { + "defined": "&'amutInnerNode" + } + ] + }, + { + "name": "Leaf", + "fields": [ + { + "defined": "&'amutLeafNode" + } + ] + } + ] + } + }, + { + "name": "OracleType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Stub" + }, + { + "name": "Pyth" + } + ] + } + }, + { + "name": "OrderType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Limit" + }, + { + "name": "ImmediateOrCancel" + }, + { + "name": "PostOnly" + }, + { + "name": "Market" + }, + { + "name": "PostOnlySlide" + } + ] + } + }, + { + "name": "Side", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bid" + }, + { + "name": "Ask" + } + ] + } + }, + { + "name": "EventType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Fill" + }, + { + "name": "Out" + }, + { + "name": "Liquidate" + } + ] + } + }, + { + "name": "ProgramInstruction", + "type": { + "kind": "enum", + "variants": [ + { + "name": "CreateLookupTable", + "fields": [ + { + "name": "recent_slot", + "type": { + "defined": "Slot" + } + }, + { + "name": "bump_seed", + "type": "u8" + } + ] + }, + { + "name": "FreezeLookupTable" + }, + { + "name": "ExtendLookupTable", + "fields": [ + { + "name": "new_addresses", + "type": { + "vec": "publicKey" + } + } + ] + }, + { + "name": "DeactivateLookupTable" + }, + { + "name": "CloseLookupTable" + } + ] + } } ], "errors": [ @@ -982,6 +3795,31 @@ export const IDL: MangoV4 = { "code": 6000, "name": "SomeError", "msg": "" + }, + { + "code": 6001, + "name": "MathError", + "msg": "" + }, + { + "code": 6002, + "name": "UnexpectedOracle", + "msg": "" + }, + { + "code": 6003, + "name": "UnknownOracleType", + "msg": "" + }, + { + "code": 6004, + "name": "InvalidMarginTradeTargetCpiProgram", + "msg": "" + }, + { + "code": 6005, + "name": "HealthMustBePositive", + "msg": "" } ] };