diff --git a/programs/mango-v4/src/instructions/mod.rs b/programs/mango-v4/src/instructions/mod.rs index acaf8680e..66fb44ce7 100644 --- a/programs/mango-v4/src/instructions/mod.rs +++ b/programs/mango-v4/src/instructions/mod.rs @@ -1,13 +1,13 @@ pub use self::margin_trade::*; pub use close_account::*; -pub use consume_events::*; pub use create_account::*; pub use create_group::*; -pub use create_perp_market::*; pub use create_stub_oracle::*; pub use deposit::*; pub use liq_token_with_token::*; -pub use place_perp_order::*; +pub use perp_consume_events::*; +pub use perp_create_market::*; +pub use perp_place_order::*; pub use register_token::*; pub use serum3_cancel_order::*; pub use serum3_create_open_orders::*; @@ -19,15 +19,15 @@ pub use set_stub_oracle::*; pub use withdraw::*; mod close_account; -mod consume_events; mod create_account; mod create_group; -mod create_perp_market; mod create_stub_oracle; mod deposit; mod liq_token_with_token; mod margin_trade; -mod place_perp_order; +mod perp_consume_events; +mod perp_create_market; +mod perp_place_order; mod register_token; mod serum3_cancel_order; mod serum3_create_open_orders; diff --git a/programs/mango-v4/src/instructions/consume_events.rs b/programs/mango-v4/src/instructions/perp_consume_events.rs similarity index 96% rename from programs/mango-v4/src/instructions/consume_events.rs rename to programs/mango-v4/src/instructions/perp_consume_events.rs index 2b1b30450..38d403036 100644 --- a/programs/mango-v4/src/instructions/consume_events.rs +++ b/programs/mango-v4/src/instructions/perp_consume_events.rs @@ -10,7 +10,7 @@ use crate::{ }; #[derive(Accounts)] -pub struct ConsumeEvents<'info> { +pub struct PerpConsumeEvents<'info> { pub group: AccountLoader<'info, Group>, #[account( @@ -23,7 +23,7 @@ pub struct ConsumeEvents<'info> { pub event_queue: AccountLoader<'info, Queue>, } -pub fn consume_events(ctx: Context, limit: usize) -> Result<()> { +pub fn perp_consume_events(ctx: Context, limit: usize) -> Result<()> { let limit = std::cmp::min(limit, 8); let mut perp_market = ctx.accounts.perp_market.load_mut()?; diff --git a/programs/mango-v4/src/instructions/create_perp_market.rs b/programs/mango-v4/src/instructions/perp_create_market.rs similarity index 96% rename from programs/mango-v4/src/instructions/create_perp_market.rs rename to programs/mango-v4/src/instructions/perp_create_market.rs index e775438d6..b788cda82 100644 --- a/programs/mango-v4/src/instructions/create_perp_market.rs +++ b/programs/mango-v4/src/instructions/perp_create_market.rs @@ -6,7 +6,7 @@ use crate::state::*; #[derive(Accounts)] #[instruction(perp_market_index: PerpMarketIndex)] -pub struct CreatePerpMarket<'info> { +pub struct PerpCreateMarket<'info> { #[account( has_one = admin, )] @@ -40,8 +40,8 @@ pub struct CreatePerpMarket<'info> { } #[allow(clippy::too_many_arguments)] -pub fn create_perp_market( - ctx: Context, +pub fn perp_create_market( + ctx: Context, perp_market_index: PerpMarketIndex, base_token_index_opt: Option, quote_token_index: TokenIndex, diff --git a/programs/mango-v4/src/instructions/place_perp_order.rs b/programs/mango-v4/src/instructions/perp_place_order.rs similarity index 96% rename from programs/mango-v4/src/instructions/place_perp_order.rs rename to programs/mango-v4/src/instructions/perp_place_order.rs index e7b9abbba..c2813f824 100644 --- a/programs/mango-v4/src/instructions/place_perp_order.rs +++ b/programs/mango-v4/src/instructions/perp_place_order.rs @@ -6,7 +6,7 @@ use crate::state::{ }; #[derive(Accounts)] -pub struct PlacePerpOrder<'info> { +pub struct PerpPlaceOrder<'info> { pub group: AccountLoader<'info, Group>, #[account( @@ -39,8 +39,8 @@ pub struct PlacePerpOrder<'info> { // TODO #[allow(clippy::too_many_arguments)] -pub fn place_perp_order( - ctx: Context, +pub fn perp_place_order( + ctx: Context, side: Side, price: i64, max_base_quantity: i64, diff --git a/programs/mango-v4/src/lib.rs b/programs/mango-v4/src/lib.rs index fc890aa12..07159d815 100644 --- a/programs/mango-v4/src/lib.rs +++ b/programs/mango-v4/src/lib.rs @@ -149,8 +149,8 @@ pub mod mango_v4 { /// #[allow(clippy::too_many_arguments)] - pub fn create_perp_market( - ctx: Context, + pub fn perp_create_market( + ctx: Context, perp_market_index: PerpMarketIndex, base_token_index_opt: Option, quote_token_index: TokenIndex, @@ -164,7 +164,7 @@ pub mod mango_v4 { maker_fee: f32, taker_fee: f32, ) -> Result<()> { - instructions::create_perp_market( + instructions::perp_create_market( ctx, perp_market_index, base_token_index_opt, @@ -182,8 +182,8 @@ pub mod mango_v4 { } #[allow(clippy::too_many_arguments)] - pub fn place_perp_order( - ctx: Context, + pub fn perp_place_order( + ctx: Context, side: Side, price: i64, max_base_quantity: i64, @@ -193,7 +193,7 @@ pub mod mango_v4 { expiry_timestamp: u64, limit: u8, ) -> Result<()> { - instructions::place_perp_order( + instructions::perp_place_order( ctx, side, price, @@ -206,8 +206,8 @@ pub mod mango_v4 { ) } - pub fn consume_events(ctx: Context, limit: usize) -> Result<()> { - instructions::consume_events(ctx, limit) + pub fn perp_consume_events(ctx: Context, limit: usize) -> Result<()> { + instructions::perp_consume_events(ctx, limit) } /// diff --git a/programs/mango-v4/tests/program_test/mango_client.rs b/programs/mango-v4/tests/program_test/mango_client.rs index 12d842101..8828fe25c 100644 --- a/programs/mango-v4/tests/program_test/mango_client.rs +++ b/programs/mango-v4/tests/program_test/mango_client.rs @@ -1233,7 +1233,7 @@ impl<'keypair> ClientInstruction for LiqTokenWithTokenInstruction<'keypair> { } } -pub struct CreatePerpMarketInstruction<'keypair> { +pub struct PerpCreateMarketInstruction<'keypair> { pub group: Pubkey, pub admin: &'keypair Keypair, pub oracle: Pubkey, @@ -1255,9 +1255,9 @@ pub struct CreatePerpMarketInstruction<'keypair> { pub taker_fee: f32, } #[async_trait::async_trait(?Send)] -impl<'keypair> ClientInstruction for CreatePerpMarketInstruction<'keypair> { - type Accounts = mango_v4::accounts::CreatePerpMarket; - type Instruction = mango_v4::instruction::CreatePerpMarket; +impl<'keypair> ClientInstruction for PerpCreateMarketInstruction<'keypair> { + type Accounts = mango_v4::accounts::PerpCreateMarket; + type Instruction = mango_v4::instruction::PerpCreateMarket; async fn to_instruction( &self, _loader: impl ClientAccountLoader + 'async_trait, @@ -1309,7 +1309,7 @@ impl<'keypair> ClientInstruction for CreatePerpMarketInstruction<'keypair> { } } -pub struct PlacePerpOrderInstruction<'keypair> { +pub struct PerpPlaceOrderInstruction<'keypair> { pub group: Pubkey, pub account: Pubkey, pub perp_market: Pubkey, @@ -1323,9 +1323,9 @@ pub struct PlacePerpOrderInstruction<'keypair> { pub quantity: i64, } #[async_trait::async_trait(?Send)] -impl<'keypair> ClientInstruction for PlacePerpOrderInstruction<'keypair> { - type Accounts = mango_v4::accounts::PlacePerpOrder; - type Instruction = mango_v4::instruction::PlacePerpOrder; +impl<'keypair> ClientInstruction for PerpPlaceOrderInstruction<'keypair> { + type Accounts = mango_v4::accounts::PerpPlaceOrder; + type Instruction = mango_v4::instruction::PerpPlaceOrder; async fn to_instruction( &self, _loader: impl ClientAccountLoader + 'async_trait, diff --git a/programs/mango-v4/tests/test_perp.rs b/programs/mango-v4/tests/test_perp.rs index 91f5bfdfd..00e1c1a30 100644 --- a/programs/mango-v4/tests/test_perp.rs +++ b/programs/mango-v4/tests/test_perp.rs @@ -79,7 +79,7 @@ async fn test_perp() -> Result<(), TransportError> { // // TEST: Create a perp market // - let mango_v4::accounts::CreatePerpMarket { + let mango_v4::accounts::PerpCreateMarket { perp_market, asks, bids, @@ -87,7 +87,7 @@ async fn test_perp() -> Result<(), TransportError> { .. } = send_tx( solana, - CreatePerpMarketInstruction { + PerpCreateMarketInstruction { group, admin, oracle: tokens[0].oracle, @@ -125,7 +125,7 @@ async fn test_perp() -> Result<(), TransportError> { send_tx( solana, - PlacePerpOrderInstruction { + PerpPlaceOrderInstruction { group, account, perp_market, @@ -144,7 +144,7 @@ async fn test_perp() -> Result<(), TransportError> { send_tx( solana, - PlacePerpOrderInstruction { + PerpPlaceOrderInstruction { group, account, perp_market, diff --git a/release.sh b/release.sh index d3a07f2d9..a366ac919 100755 --- a/release.sh +++ b/release.sh @@ -20,7 +20,7 @@ solana --url https://mango.devnet.rpcpool.com program deploy --program-id $PROGR -k $WALLET_WITH_FUNDS target/deploy/mango_v4.so # publish idl -anchor idl init --provider.cluster https://mango.devnet.rpcpool.com --provider.wallet $WALLET_WITH_FUNDS \ +anchor idl upgrade --provider.cluster https://mango.devnet.rpcpool.com --provider.wallet $WALLET_WITH_FUNDS \ --filepath target/idl/mango_v4.json $PROGRAM_ID # build npm package diff --git a/ts/mango_v4.ts b/ts/mango_v4.ts index 145402354..6c98316ba 100644 --- a/ts/mango_v4.ts +++ b/ts/mango_v4.ts @@ -246,6 +246,32 @@ export type MangoV4 = { } ] }, + { + "name": "closeAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "solDestination", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, { "name": "createStubOracle", "accounts": [ @@ -980,7 +1006,7 @@ export type MangoV4 = { ] }, { - "name": "createPerpMarket", + "name": "perpCreateMarket", "accounts": [ { "name": "group", @@ -1101,7 +1127,7 @@ export type MangoV4 = { ] }, { - "name": "placePerpOrder", + "name": "perpPlaceOrder", "accounts": [ { "name": "group", @@ -1184,7 +1210,7 @@ export type MangoV4 = { ] }, { - "name": "consumeEvents", + "name": "perpConsumeEvents", "accounts": [ { "name": "group", @@ -1302,59 +1328,13 @@ export type MangoV4 = { { "name": "tokenIndex", "type": "u16" - } - ] - } - }, - { - "name": "bookSide", - "type": { - "kind": "struct", - "fields": [ - { - "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", + "name": "reserved", "type": { "array": [ - { - "defined": "AnyNode" - }, - 1024 + "u8", + 6 ] } } @@ -1373,6 +1353,15 @@ export type MangoV4 = { { "name": "bump", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 7 + ] + } } ] } @@ -1499,14 +1488,14 @@ export type MangoV4 = { "name": "oracle", "type": "publicKey" }, - { - "name": "tokenIndex", - "type": "u16" - }, { "name": "addressLookupTable", "type": "publicKey" }, + { + "name": "tokenIndex", + "type": "u16" + }, { "name": "addressLookupTableBankIndex", "type": "u8" @@ -1514,6 +1503,15 @@ export type MangoV4 = { { "name": "addressLookupTableOracleIndex", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 4 + ] + } } ] } @@ -1536,6 +1534,112 @@ export type MangoV4 = { ] } }, + { + "name": "bookSide", + "type": { + "kind": "struct", + "fields": [ + { + "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": "AnyNode" + }, + 1024 + ] + } + } + ] + } + }, + { + "name": "queue", + "type": { + "kind": "struct", + "fields": [ + { + "name": "header", + "type": { + "defined": "H" + } + }, + { + "name": "buf", + "type": { + "array": [ + { + "defined": "H::Item" + }, + 512 + ] + } + } + ] + } + }, + { + "name": "eventQueueHeader", + "type": { + "kind": "struct", + "fields": [ + { + "name": "head", + "type": { + "defined": "usize" + } + }, + { + "name": "count", + "type": { + "defined": "usize" + } + }, + { + "name": "seqNum", + "type": { + "defined": "usize" + } + } + ] + } + }, { "name": "perpMarket", "type": { @@ -1644,57 +1748,6 @@ export type MangoV4 = { ] } }, - { - "name": "queue", - "type": { - "kind": "struct", - "fields": [ - { - "name": "header", - "type": { - "defined": "H" - } - }, - { - "name": "buf", - "type": { - "array": [ - { - "defined": "H::Item" - }, - 512 - ] - } - } - ] - } - }, - { - "name": "eventQueueHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "head", - "type": { - "defined": "usize" - } - }, - { - "name": "count", - "type": { - "defined": "usize" - } - }, - { - "name": "seqNum", - "type": { - "defined": "usize" - } - } - ] - } - }, { "name": "serum3Market", "type": { @@ -1727,6 +1780,15 @@ export type MangoV4 = { { "name": "bump", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 1 + ] + } } ] } @@ -1950,15 +2012,44 @@ export type MangoV4 = { } }, { - "name": "BookSideType", + "name": "ProgramInstruction", "type": { "kind": "enum", "variants": [ { - "name": "Bids" + "name": "CreateLookupTable", + "fields": [ + { + "name": "recent_slot", + "type": { + "defined": "Slot" + } + }, + { + "name": "bump_seed", + "type": "u8" + } + ] }, { - "name": "Asks" + "name": "FreezeLookupTable" + }, + { + "name": "ExtendLookupTable", + "fields": [ + { + "name": "new_addresses", + "type": { + "vec": "publicKey" + } + } + ] + }, + { + "name": "DeactivateLookupTable" + }, + { + "name": "CloseLookupTable" } ] } @@ -1977,6 +2068,34 @@ export type MangoV4 = { ] } }, + { + "name": "OracleType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Stub" + }, + { + "name": "Pyth" + } + ] + } + }, + { + "name": "BookSideType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bids" + }, + { + "name": "Asks" + } + ] + } + }, { "name": "NodeTag", "type": { @@ -2048,20 +2167,6 @@ export type MangoV4 = { ] } }, - { - "name": "OracleType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Stub" - }, - { - "name": "Pyth" - } - ] - } - }, { "name": "OrderType", "type": { @@ -2115,49 +2220,6 @@ export type MangoV4 = { } ] } - }, - { - "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": [ @@ -2447,6 +2509,32 @@ export const IDL: MangoV4 = { } ] }, + { + "name": "closeAccount", + "accounts": [ + { + "name": "account", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": true + }, + { + "name": "solDestination", + "isMut": true, + "isSigner": false + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, { "name": "createStubOracle", "accounts": [ @@ -3181,7 +3269,7 @@ export const IDL: MangoV4 = { ] }, { - "name": "createPerpMarket", + "name": "perpCreateMarket", "accounts": [ { "name": "group", @@ -3302,7 +3390,7 @@ export const IDL: MangoV4 = { ] }, { - "name": "placePerpOrder", + "name": "perpPlaceOrder", "accounts": [ { "name": "group", @@ -3385,7 +3473,7 @@ export const IDL: MangoV4 = { ] }, { - "name": "consumeEvents", + "name": "perpConsumeEvents", "accounts": [ { "name": "group", @@ -3503,59 +3591,13 @@ export const IDL: MangoV4 = { { "name": "tokenIndex", "type": "u16" - } - ] - } - }, - { - "name": "bookSide", - "type": { - "kind": "struct", - "fields": [ - { - "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", + "name": "reserved", "type": { "array": [ - { - "defined": "AnyNode" - }, - 1024 + "u8", + 6 ] } } @@ -3574,6 +3616,15 @@ export const IDL: MangoV4 = { { "name": "bump", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 7 + ] + } } ] } @@ -3700,14 +3751,14 @@ export const IDL: MangoV4 = { "name": "oracle", "type": "publicKey" }, - { - "name": "tokenIndex", - "type": "u16" - }, { "name": "addressLookupTable", "type": "publicKey" }, + { + "name": "tokenIndex", + "type": "u16" + }, { "name": "addressLookupTableBankIndex", "type": "u8" @@ -3715,6 +3766,15 @@ export const IDL: MangoV4 = { { "name": "addressLookupTableOracleIndex", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 4 + ] + } } ] } @@ -3737,6 +3797,112 @@ export const IDL: MangoV4 = { ] } }, + { + "name": "bookSide", + "type": { + "kind": "struct", + "fields": [ + { + "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": "AnyNode" + }, + 1024 + ] + } + } + ] + } + }, + { + "name": "queue", + "type": { + "kind": "struct", + "fields": [ + { + "name": "header", + "type": { + "defined": "H" + } + }, + { + "name": "buf", + "type": { + "array": [ + { + "defined": "H::Item" + }, + 512 + ] + } + } + ] + } + }, + { + "name": "eventQueueHeader", + "type": { + "kind": "struct", + "fields": [ + { + "name": "head", + "type": { + "defined": "usize" + } + }, + { + "name": "count", + "type": { + "defined": "usize" + } + }, + { + "name": "seqNum", + "type": { + "defined": "usize" + } + } + ] + } + }, { "name": "perpMarket", "type": { @@ -3845,57 +4011,6 @@ export const IDL: MangoV4 = { ] } }, - { - "name": "queue", - "type": { - "kind": "struct", - "fields": [ - { - "name": "header", - "type": { - "defined": "H" - } - }, - { - "name": "buf", - "type": { - "array": [ - { - "defined": "H::Item" - }, - 512 - ] - } - } - ] - } - }, - { - "name": "eventQueueHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "head", - "type": { - "defined": "usize" - } - }, - { - "name": "count", - "type": { - "defined": "usize" - } - }, - { - "name": "seqNum", - "type": { - "defined": "usize" - } - } - ] - } - }, { "name": "serum3Market", "type": { @@ -3928,6 +4043,15 @@ export const IDL: MangoV4 = { { "name": "bump", "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 1 + ] + } } ] } @@ -4151,15 +4275,44 @@ export const IDL: MangoV4 = { } }, { - "name": "BookSideType", + "name": "ProgramInstruction", "type": { "kind": "enum", "variants": [ { - "name": "Bids" + "name": "CreateLookupTable", + "fields": [ + { + "name": "recent_slot", + "type": { + "defined": "Slot" + } + }, + { + "name": "bump_seed", + "type": "u8" + } + ] }, { - "name": "Asks" + "name": "FreezeLookupTable" + }, + { + "name": "ExtendLookupTable", + "fields": [ + { + "name": "new_addresses", + "type": { + "vec": "publicKey" + } + } + ] + }, + { + "name": "DeactivateLookupTable" + }, + { + "name": "CloseLookupTable" } ] } @@ -4178,6 +4331,34 @@ export const IDL: MangoV4 = { ] } }, + { + "name": "OracleType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Stub" + }, + { + "name": "Pyth" + } + ] + } + }, + { + "name": "BookSideType", + "type": { + "kind": "enum", + "variants": [ + { + "name": "Bids" + }, + { + "name": "Asks" + } + ] + } + }, { "name": "NodeTag", "type": { @@ -4249,20 +4430,6 @@ export const IDL: MangoV4 = { ] } }, - { - "name": "OracleType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Stub" - }, - { - "name": "Pyth" - } - ] - } - }, { "name": "OrderType", "type": { @@ -4316,49 +4483,6 @@ export const IDL: MangoV4 = { } ] } - }, - { - "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": [