diff --git a/Cargo.toml b/Cargo.toml index 654f997..d4d7cb4 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ solana-rpc-client-api = "3.1.4" solana-transaction-status = "3.1.4" solana-account-decoder = "3.1.4" solana-hash = "4.0.1" -solana-entry = "3.1.4" +solana-entry = { version = "3.1.4", features = ["agave-unstable-api"] } solana-rpc-client-nonce-utils = "3.1.4" solana-perf = "3.1.4" solana-metrics = "3.1.4" diff --git a/idl/pump_amm.json b/idl/pump_amm.json index a0d4167..47d7b95 100644 --- a/idl/pump_amm.json +++ b/idl/pump_amm.json @@ -290,6 +290,10 @@ }, { "name": "buy", + "docs": [ + "For cashback coins, optionally pass user_volume_accumulator_wsol_ata as remaining_accounts[0].", + "If provided and valid, the ATA will be initialized if needed." + ], "discriminator": [ 102, 6, @@ -716,7 +720,10 @@ "Make sure the payer has enough SOL to cover creation of the following accounts (unless already created):", "- protocol_fee_recipient_token_account: rent.minimum_balance(TokenAccount::LEN)", "- coin_creator_vault_ata: rent.minimum_balance(TokenAccount::LEN)", - "- user_volume_accumulator: rent.minimum_balance(UserVolumeAccumulator::LEN)" + "- user_volume_accumulator: rent.minimum_balance(UserVolumeAccumulator::LEN)", + "", + "For cashback coins, optionally pass user_volume_accumulator_wsol_ata as remaining_accounts[0].", + "If provided and valid, the ATA will be initialized if needed." ], "discriminator": [ 198, @@ -1133,6 +1140,223 @@ } ] }, + { + "name": "claim_cashback", + "discriminator": [ + 37, + 58, + 35, + 126, + 190, + 53, + 228, + 197 + ], + "accounts": [ + { + "name": "user", + "writable": true + }, + { + "name": "user_volume_accumulator", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 117, + 115, + 101, + 114, + 95, + 118, + 111, + 108, + 117, + 109, + 101, + 95, + 97, + 99, + 99, + 117, + 109, + 117, + 108, + 97, + 116, + 111, + 114 + ] + }, + { + "kind": "account", + "path": "user" + } + ] + } + }, + { + "name": "quote_mint" + }, + { + "name": "quote_token_program" + }, + { + "name": "user_volume_accumulator_wsol_token_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "user_volume_accumulator" + }, + { + "kind": "account", + "path": "quote_token_program" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "user_wsol_token_account", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "account", + "path": "user" + }, + { + "kind": "account", + "path": "quote_token_program" + }, + { + "kind": "account", + "path": "quote_mint" + } + ], + "program": { + "kind": "const", + "value": [ + 140, + 151, + 37, + 143, + 78, + 36, + 137, + 241, + 187, + 61, + 16, + 41, + 20, + 142, + 13, + 131, + 11, + 90, + 19, + 153, + 218, + 255, + 16, + 132, + 4, + 142, + 123, + 216, + 219, + 233, + 248, + 89 + ] + } + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program", + "address": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA" + } + ], + "args": [] + }, { "name": "claim_token_incentives", "discriminator": [ @@ -2087,6 +2311,14 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_coin", + "type": { + "defined": { + "name": "OptionBool" + } + } } ] }, @@ -3378,6 +3610,70 @@ ], "args": [] }, + { + "name": "toggle_cashback_enabled", + "discriminator": [ + 115, + 103, + 224, + 255, + 189, + 89, + 86, + 195 + ], + "accounts": [ + { + "name": "admin", + "signer": true, + "relations": [ + "global_config" + ] + }, + { + "name": "global_config", + "writable": true + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "enabled", + "type": "bool" + } + ] + }, { "name": "toggle_mayhem_mode", "discriminator": [ @@ -4075,6 +4371,19 @@ 119 ] }, + { + "name": "ClaimCashbackEvent", + "discriminator": [ + 226, + 214, + 246, + 33, + 7, + 242, + 147, + 229 + ] + }, { "name": "ClaimTokenIncentivesEvent", "discriminator": [ @@ -4510,6 +4819,23 @@ "code": 6048, "name": "CreatorVaultMigratedToSharingConfig", "msg": "creator_vault has been migrated to sharing config, use pump:distribute_creator_fees instead" + }, + { + "code": 6049, + "name": "CashbackNotEnabled", + "msg": "Cashback is disabled" + }, + { + "code": 6050, + "name": "OnlyPumpPoolsCashback" + }, + { + "code": 6051, + "name": "CashbackNotInDesiredState" + }, + { + "code": 6052, + "name": "CashbackEarnedDoesNotMatchTokenInVault" } ], "types": [ @@ -4617,6 +4943,10 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_coin", + "type": "bool" } ] } @@ -4748,6 +5078,42 @@ { "name": "ix_name", "type": "string" + }, + { + "name": "cashback_fee_basis_points", + "type": "u64" + }, + { + "name": "cashback", + "type": "u64" + } + ] + } + }, + { + "name": "ClaimCashbackEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "user", + "type": "pubkey" + }, + { + "name": "amount", + "type": "u64" + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "total_claimed", + "type": "u64" + }, + { + "name": "total_cashback_earned", + "type": "u64" } ] } @@ -5276,6 +5642,10 @@ 7 ] } + }, + { + "name": "is_cashback_enabled", + "type": "bool" } ] } @@ -5434,6 +5804,10 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_coin", + "type": "bool" } ] } @@ -5559,6 +5933,14 @@ { "name": "coin_creator_fee", "type": "u64" + }, + { + "name": "cashback_fee_basis_points", + "type": "u64" + }, + { + "name": "cashback", + "type": "u64" } ] } @@ -5798,6 +6180,14 @@ { "name": "has_total_claimed_tokens", "type": "bool" + }, + { + "name": "cashback_earned", + "type": "u64" + }, + { + "name": "total_cashback_claimed", + "type": "u64" } ] } @@ -5875,4 +6265,4 @@ } } ] -} +} \ No newline at end of file diff --git a/idl/pumpfun.json b/idl/pumpfun.json index 5aff348..9977ae3 100644 --- a/idl/pumpfun.json +++ b/idl/pumpfun.json @@ -1185,6 +1185,103 @@ } ] }, + { + "name": "claim_cashback", + "discriminator": [ + 37, + 58, + 35, + 126, + 190, + 53, + 228, + 197 + ], + "accounts": [ + { + "name": "user", + "writable": true + }, + { + "name": "user_volume_accumulator", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 117, + 115, + 101, + 114, + 95, + 118, + 111, + 108, + 117, + 109, + 101, + 95, + 97, + 99, + 99, + 117, + 109, + 117, + 108, + 97, + 116, + 111, + 114 + ] + }, + { + "kind": "account", + "path": "user" + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program", + "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" + } + ], + "args": [] + }, { "name": "claim_token_incentives", "discriminator": [ @@ -2378,6 +2475,14 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_enabled", + "type": { + "defined": { + "name": "OptionBool" + } + } } ] }, @@ -3578,7 +3683,10 @@ { "name": "sell", "docs": [ - "Sells tokens into a bonding curve." + "Sells tokens into a bonding curve.", + "For cashback coins, optionally pass user_volume_accumulator as remaining_accounts[0].", + "If provided and valid, creator_fee goes to user_volume_accumulator.", + "Otherwise, falls back to transferring creator_fee to creator_vault." ], "discriminator": [ 51, @@ -4806,6 +4914,86 @@ ], "args": [] }, + { + "name": "toggle_cashback_enabled", + "discriminator": [ + 115, + 103, + 224, + 255, + 189, + 89, + 86, + 195 + ], + "accounts": [ + { + "name": "global", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 103, + 108, + 111, + 98, + 97, + 108 + ] + } + ] + } + }, + { + "name": "authority", + "writable": true, + "signer": true, + "relations": [ + "global" + ] + }, + { + "name": "event_authority", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 95, + 95, + 101, + 118, + 101, + 110, + 116, + 95, + 97, + 117, + 116, + 104, + 111, + 114, + 105, + 116, + 121 + ] + } + ] + } + }, + { + "name": "program" + } + ], + "args": [ + { + "name": "enabled", + "type": "bool" + } + ] + }, { "name": "toggle_create_v2", "discriminator": [ @@ -5164,6 +5352,19 @@ 222 ] }, + { + "name": "ClaimCashbackEvent", + "discriminator": [ + 226, + 214, + 246, + 33, + 7, + 242, + 147, + 229 + ] + }, { "name": "ClaimTokenIncentivesEvent", "discriminator": [ @@ -5677,6 +5878,11 @@ "code": 6055, "name": "InvalidShareBps", "msg": "Share bps must be greater than 0" + }, + { + "code": 6056, + "name": "CashbackNotEnabled", + "msg": "Cashback is not enabled" } ], "types": [ @@ -5796,6 +6002,38 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_coin", + "type": "bool" + } + ] + } + }, + { + "name": "ClaimCashbackEvent", + "type": { + "kind": "struct", + "fields": [ + { + "name": "user", + "type": "pubkey" + }, + { + "name": "amount", + "type": "u64" + }, + { + "name": "timestamp", + "type": "i64" + }, + { + "name": "total_claimed", + "type": "u64" + }, + { + "name": "total_cashback_earned", + "type": "u64" } ] } @@ -6022,6 +6260,10 @@ { "name": "is_mayhem_mode", "type": "bool" + }, + { + "name": "is_cashback_enabled", + "type": "bool" } ] } @@ -6270,6 +6512,10 @@ 7 ] } + }, + { + "name": "is_cashback_enabled", + "type": "bool" } ] } @@ -6728,6 +6974,14 @@ { "name": "mayhem_mode", "type": "bool" + }, + { + "name": "cashback_fee_basis_points", + "type": "u64" + }, + { + "name": "cashback", + "type": "u64" } ] } @@ -6828,9 +7082,17 @@ { "name": "has_total_claimed_tokens", "type": "bool" + }, + { + "name": "cashback_earned", + "type": "u64" + }, + { + "name": "total_cashback_claimed", + "type": "u64" } ] } } ] -} +} \ No newline at end of file diff --git a/idl/raydium_amm_v4.json b/idl/raydium_amm_v4.json new file mode 100644 index 0000000..b85dcfe --- /dev/null +++ b/idl/raydium_amm_v4.json @@ -0,0 +1,2291 @@ +{ + "version": "0.3.0", + "name": "raydium_amm", + "instructions": [ + { + "name": "initialize", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMintAddress", + "isMut": true, + "isSigner": false + }, + { + "name": "coinMintAddress", + "isMut": false, + "isSigner": false + }, + { + "name": "pcMintAddress", + "isMut": false, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "poolWithdrawQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "poolTargetOrdersAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolTempLpTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "userWallet", + "isMut": true, + "isSigner": true + } + ], + "args": [ + { + "name": "nonce", + "type": "u8" + }, + { + "name": "openTime", + "type": "u64" + } + ] + }, + { + "name": "initialize2", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "splAssociatedTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMint", + "isMut": true, + "isSigner": false + }, + { + "name": "coinMint", + "isMut": false, + "isSigner": false + }, + { + "name": "pcMint", + "isMut": false, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolWithdrawQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolTempLp", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "userWallet", + "isMut": true, + "isSigner": true + }, + { + "name": "userTokenCoin", + "isMut": true, + "isSigner": false + }, + { + "name": "userTokenPc", + "isMut": true, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "nonce", + "type": "u8" + }, + { + "name": "openTime", + "type": "u64" + }, + { + "name": "initPcAmount", + "type": "u64" + }, + { + "name": "initCoinAmount", + "type": "u64" + } + ] + }, + { + "name": "monitorStep", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "clock", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolWithdrawQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "serumReqQ", + "isMut": true, + "isSigner": false + }, + { + "name": "serumEventQ", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "planOrderLimit", + "type": "u16" + }, + { + "name": "placeOrderLimit", + "type": "u16" + }, + { + "name": "cancelOrderLimit", + "type": "u16" + } + ] + }, + { + "name": "deposit", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": false, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMintAddress", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "userCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userOwner", + "isMut": false, + "isSigner": true + }, + { + "name": "serumEventQueue", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "maxCoinAmount", + "type": "u64" + }, + { + "name": "maxPcAmount", + "type": "u64" + }, + { + "name": "baseSide", + "type": "u64" + } + ] + }, + { + "name": "withdraw", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "lpMintAddress", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolWithdrawQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "poolTempLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "userLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userOwner", + "isMut": false, + "isSigner": true + }, + { + "name": "serumEventQ", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "migrateToOpenBook", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTokenCoin", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTokenPc", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVault", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVault", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "newAmmOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "newSerumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "newSerumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "admin", + "isMut": true, + "isSigner": true + } + ], + "args": [] + }, + { + "name": "setParams", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammCoinVault", + "isMut": true, + "isSigner": false + }, + { + "name": "ammPcVault", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVault", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVault", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAdminAccount", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "value", + "type": { + "option": "u64" + } + }, + { + "name": "newPubkey", + "type": { + "option": "publicKey" + } + }, + { + "name": "fees", + "type": { + "option": { + "defined": "Fees" + } + } + }, + { + "name": "lastOrderDistance", + "type": { + "option": { + "defined": "LastOrderDistance" + } + } + }, + { + "name": "needTakeAmounts", + "type": { + "option": { + "defined": "NeedTake" + } + } + } + ] + }, + { + "name": "withdrawPnl", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammConfig", + "isMut": false, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "coinPnlTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "pcPnlTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "pnlOwnerAccount", + "isMut": false, + "isSigner": true + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": false, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "withdrawSrm", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOwnerAccount", + "isMut": false, + "isSigner": true + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "srmToken", + "isMut": true, + "isSigner": false + }, + { + "name": "destSrmToken", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + } + ] + }, + { + "name": "swapBaseIn", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "userSourceTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userDestinationTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userSourceOwner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "amountIn", + "type": "u64" + }, + { + "name": "minimumAmountOut", + "type": "u64" + } + ] + }, + { + "name": "preInitialize", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolWithdrawQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "lpMintAddress", + "isMut": true, + "isSigner": false + }, + { + "name": "coinMintAddress", + "isMut": false, + "isSigner": false + }, + { + "name": "pcMintAddress", + "isMut": false, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolTempLpTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "userWallet", + "isMut": true, + "isSigner": true + } + ], + "args": [ + { + "name": "nonce", + "type": "u8" + } + ] + }, + { + "name": "swapBaseOut", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": true, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "userSourceTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userDestinationTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "userSourceOwner", + "isMut": false, + "isSigner": true + } + ], + "args": [ + { + "name": "maxAmountIn", + "type": "u64" + }, + { + "name": "amountOut", + "type": "u64" + } + ] + }, + { + "name": "simulateInfo", + "accounts": [ + { + "name": "amm", + "isMut": false, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": false, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": false, + "isSigner": false + }, + { + "name": "lpMintAddress", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": false, + "isSigner": false + }, + { + "name": "serumEventQueue", + "isMut": false, + "isSigner": false + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "swapBaseInValue", + "type": { + "option": { + "defined": "SwapInstructionBaseIn" + } + } + }, + { + "name": "swapBaseOutValue", + "type": { + "option": { + "defined": "SwapInstructionBaseOut" + } + } + } + ] + }, + { + "name": "adminCancelOrders", + "accounts": [ + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "amm", + "isMut": false, + "isSigner": false + }, + { + "name": "ammAuthority", + "isMut": false, + "isSigner": false + }, + { + "name": "ammOpenOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "ammTargetOrders", + "isMut": true, + "isSigner": false + }, + { + "name": "poolCoinTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "poolPcTokenAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "ammOwnerAccount", + "isMut": false, + "isSigner": true + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "serumProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "serumMarket", + "isMut": true, + "isSigner": false + }, + { + "name": "serumCoinVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumPcVaultAccount", + "isMut": true, + "isSigner": false + }, + { + "name": "serumVaultSigner", + "isMut": false, + "isSigner": false + }, + { + "name": "serumEventQ", + "isMut": true, + "isSigner": false + }, + { + "name": "serumBids", + "isMut": true, + "isSigner": false + }, + { + "name": "serumAsks", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "limit", + "type": "u16" + } + ] + }, + { + "name": "createConfigAccount", + "accounts": [ + { + "name": "admin", + "isMut": true, + "isSigner": true + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false + }, + { + "name": "owner", + "isMut": false, + "isSigner": false + }, + { + "name": "systemProgram", + "isMut": false, + "isSigner": false + }, + { + "name": "rent", + "isMut": false, + "isSigner": false + } + ], + "args": [] + }, + { + "name": "updateConfigAccount", + "accounts": [ + { + "name": "admin", + "isMut": false, + "isSigner": true + }, + { + "name": "ammConfig", + "isMut": true, + "isSigner": false + } + ], + "args": [ + { + "name": "param", + "type": "u8" + }, + { + "name": "owner", + "type": "publicKey" + } + ] + } + ], + "accounts": [ + { + "name": "TargetOrders", + "type": { + "kind": "struct", + "fields": [ + { + "name": "owner", + "type": { + "array": ["u64", 4] + } + }, + { + "name": "buyOrders", + "type": { + "array": [ + { + "defined": "TargetOrder" + }, + 50 + ] + } + }, + { + "name": "padding1", + "type": { + "array": ["u64", 8] + } + }, + { + "name": "targetX", + "type": "u128" + }, + { + "name": "targetY", + "type": "u128" + }, + { + "name": "planXBuy", + "type": "u128" + }, + { + "name": "planYBuy", + "type": "u128" + }, + { + "name": "planXSell", + "type": "u128" + }, + { + "name": "planYSell", + "type": "u128" + }, + { + "name": "placedX", + "type": "u128" + }, + { + "name": "placedY", + "type": "u128" + }, + { + "name": "calcPnlX", + "type": "u128" + }, + { + "name": "calcPnlY", + "type": "u128" + }, + { + "name": "sellOrders", + "type": { + "array": [ + { + "defined": "TargetOrder" + }, + 50 + ] + } + }, + { + "name": "padding2", + "type": { + "array": ["u64", 6] + } + }, + { + "name": "replaceBuyClientId", + "type": { + "array": ["u64", 10] + } + }, + { + "name": "replaceSellClientId", + "type": { + "array": ["u64", 10] + } + }, + { + "name": "lastOrderNumerator", + "type": "u64" + }, + { + "name": "lastOrderDenominator", + "type": "u64" + }, + { + "name": "planOrdersCur", + "type": "u64" + }, + { + "name": "placeOrdersCur", + "type": "u64" + }, + { + "name": "validBuyOrderNum", + "type": "u64" + }, + { + "name": "validSellOrderNum", + "type": "u64" + }, + { + "name": "padding3", + "type": { + "array": ["u64", 10] + } + }, + { + "name": "freeSlotBits", + "type": "u128" + } + ] + } + }, + { + "name": "Fees", + "type": { + "kind": "struct", + "fields": [ + { + "name": "minSeparateNumerator", + "type": "u64" + }, + { + "name": "minSeparateDenominator", + "type": "u64" + }, + { + "name": "tradeFeeNumerator", + "type": "u64" + }, + { + "name": "tradeFeeDenominator", + "type": "u64" + }, + { + "name": "pnlNumerator", + "type": "u64" + }, + { + "name": "pnlDenominator", + "type": "u64" + }, + { + "name": "swapFeeNumerator", + "type": "u64" + }, + { + "name": "swapFeeDenominator", + "type": "u64" + } + ] + } + }, + { + "name": "AmmInfo", + "type": { + "kind": "struct", + "fields": [ + { + "name": "status", + "type": "u64" + }, + { + "name": "nonce", + "type": "u64" + }, + { + "name": "orderNum", + "type": "u64" + }, + { + "name": "depth", + "type": "u64" + }, + { + "name": "coinDecimals", + "type": "u64" + }, + { + "name": "pcDecimals", + "type": "u64" + }, + { + "name": "state", + "type": "u64" + }, + { + "name": "resetFlag", + "type": "u64" + }, + { + "name": "minSize", + "type": "u64" + }, + { + "name": "volMaxCutRatio", + "type": "u64" + }, + { + "name": "amountWave", + "type": "u64" + }, + { + "name": "coinLotSize", + "type": "u64" + }, + { + "name": "pcLotSize", + "type": "u64" + }, + { + "name": "minPriceMultiplier", + "type": "u64" + }, + { + "name": "maxPriceMultiplier", + "type": "u64" + }, + { + "name": "sysDecimalValue", + "type": "u64" + }, + { + "name": "fees", + "type": { + "defined": "Fees" + } + }, + { + "name": "outPut", + "type": { + "defined": "OutPutData" + } + }, + { + "name": "tokenCoin", + "type": "publicKey" + }, + { + "name": "tokenPc", + "type": "publicKey" + }, + { + "name": "coinMint", + "type": "publicKey" + }, + { + "name": "pcMint", + "type": "publicKey" + }, + { + "name": "lpMint", + "type": "publicKey" + }, + { + "name": "openOrders", + "type": "publicKey" + }, + { + "name": "market", + "type": "publicKey" + }, + { + "name": "serumDex", + "type": "publicKey" + }, + { + "name": "targetOrders", + "type": "publicKey" + }, + { + "name": "withdrawQueue", + "type": "publicKey" + }, + { + "name": "tokenTempLp", + "type": "publicKey" + }, + { + "name": "ammOwner", + "type": "publicKey" + }, + { + "name": "lpAmount", + "type": "u64" + }, + { + "name": "clientOrderId", + "type": "u64" + }, + { + "name": "padding", + "type": { + "array": ["u64", 2] + } + } + ] + } + } + ], + "types": [ + { + "name": "WithdrawDestToken", + "type": { + "kind": "struct", + "fields": [ + { + "name": "withdrawAmount", + "type": "u64" + }, + { + "name": "coinAmount", + "type": "u64" + }, + { + "name": "pcAmount", + "type": "u64" + }, + { + "name": "destTokenCoin", + "type": "publicKey" + }, + { + "name": "destTokenPc", + "type": "publicKey" + } + ] + } + }, + { + "name": "WithdrawQueue", + "type": { + "kind": "struct", + "fields": [ + { + "name": "owner", + "type": { + "array": ["u64", 4] + } + }, + { + "name": "head", + "type": "u64" + }, + { + "name": "count", + "type": "u64" + }, + { + "name": "buf", + "type": { + "array": [ + { + "defined": "WithdrawDestToken" + }, + 64 + ] + } + } + ] + } + }, + { + "name": "TargetOrder", + "type": { + "kind": "struct", + "fields": [ + { + "name": "price", + "type": "u64" + }, + { + "name": "vol", + "type": "u64" + } + ] + } + }, + { + "name": "OutPutData", + "type": { + "kind": "struct", + "fields": [ + { + "name": "needTakePnlCoin", + "type": "u64" + }, + { + "name": "needTakePnlPc", + "type": "u64" + }, + { + "name": "totalPnlPc", + "type": "u64" + }, + { + "name": "totalPnlCoin", + "type": "u64" + }, + { + "name": "poolOpenTime", + "type": "u64" + }, + { + "name": "punishPcAmount", + "type": "u64" + }, + { + "name": "punishCoinAmount", + "type": "u64" + }, + { + "name": "orderbookToInitTime", + "type": "u64" + }, + { + "name": "swapCoinInAmount", + "type": "u128" + }, + { + "name": "swapPcOutAmount", + "type": "u128" + }, + { + "name": "swapTakePcFee", + "type": "u64" + }, + { + "name": "swapPcInAmount", + "type": "u128" + }, + { + "name": "swapCoinOutAmount", + "type": "u128" + }, + { + "name": "swapTakeCoinFee", + "type": "u64" + } + ] + } + }, + { + "name": "AmmConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "pnlOwner", + "type": "publicKey" + }, + { + "name": "cancelOwner", + "type": "publicKey" + }, + { + "name": "pending1", + "type": { + "array": ["u64", 28] + } + }, + { + "name": "pending2", + "type": { + "array": ["u64", 32] + } + } + ] + } + }, + { + "name": "LastOrderDistance", + "type": { + "kind": "struct", + "fields": [ + { + "name": "lastOrderNumerator", + "type": "u64" + }, + { + "name": "lastOrderDenominator", + "type": "u64" + } + ] + } + }, + { + "name": "NeedTake", + "type": { + "kind": "struct", + "fields": [ + { + "name": "needTakePc", + "type": "u64" + }, + { + "name": "needTakeCoin", + "type": "u64" + } + ] + } + }, + { + "name": "SwapInstructionBaseIn", + "type": { + "kind": "struct", + "fields": [ + { + "name": "amountIn", + "type": "u64" + }, + { + "name": "minimumAmountOut", + "type": "u64" + } + ] + } + }, + { + "name": "SwapInstructionBaseOut", + "type": { + "kind": "struct", + "fields": [ + { + "name": "maxAmountIn", + "type": "u64" + }, + { + "name": "amountOut", + "type": "u64" + } + ] + } + } + ], + "errors": [ + { + "code": 0, + "name": "AlreadyInUse", + "msg": "AlreadyInUse" + }, + { + "code": 1, + "name": "InvalidProgramAddress", + "msg": "InvalidProgramAddress" + }, + { + "code": 2, + "name": "ExpectedMint", + "msg": "ExpectedMint" + }, + { + "code": 3, + "name": "ExpectedAccount", + "msg": "ExpectedAccount" + }, + { + "code": 4, + "name": "InvalidCoinVault", + "msg": "InvalidCoinVault" + }, + { + "code": 5, + "name": "InvalidPCVault", + "msg": "InvalidPCVault" + }, + { + "code": 6, + "name": "InvalidTokenLP", + "msg": "InvalidTokenLP" + }, + { + "code": 7, + "name": "InvalidDestTokenCoin", + "msg": "InvalidDestTokenCoin" + }, + { + "code": 8, + "name": "InvalidDestTokenPC", + "msg": "InvalidDestTokenPC" + }, + { + "code": 9, + "name": "InvalidPoolMint", + "msg": "InvalidPoolMint" + }, + { + "code": 10, + "name": "InvalidOpenOrders", + "msg": "InvalidOpenOrders" + }, + { + "code": 11, + "name": "InvalidSerumMarket", + "msg": "InvalidSerumMarket" + }, + { + "code": 12, + "name": "InvalidSerumProgram", + "msg": "InvalidSerumProgram" + }, + { + "code": 13, + "name": "InvalidTargetOrders", + "msg": "InvalidTargetOrders" + }, + { + "code": 14, + "name": "InvalidWithdrawQueue", + "msg": "InvalidWithdrawQueue" + }, + { + "code": 15, + "name": "InvalidTempLp", + "msg": "InvalidTempLp" + }, + { + "code": 16, + "name": "InvalidCoinMint", + "msg": "InvalidCoinMint" + }, + { + "code": 17, + "name": "InvalidPCMint", + "msg": "InvalidPCMint" + }, + { + "code": 18, + "name": "InvalidOwner", + "msg": "InvalidOwner" + }, + { + "code": 19, + "name": "InvalidSupply", + "msg": "InvalidSupply" + }, + { + "code": 20, + "name": "InvalidDelegate", + "msg": "InvalidDelegate" + }, + { + "code": 21, + "name": "InvalidSignAccount", + "msg": "Invalid Sign Account" + }, + { + "code": 22, + "name": "InvalidStatus", + "msg": "InvalidStatus" + }, + { + "code": 23, + "name": "InvalidInstruction", + "msg": "Invalid instruction" + }, + { + "code": 24, + "name": "WrongAccountsNumber", + "msg": "Wrong accounts number" + }, + { + "code": 25, + "name": "WithdrawTransferBusy", + "msg": "Withdraw_transfer is busy" + }, + { + "code": 26, + "name": "WithdrawQueueFull", + "msg": "WithdrawQueue is full" + }, + { + "code": 27, + "name": "WithdrawQueueEmpty", + "msg": "WithdrawQueue is empty" + }, + { + "code": 28, + "name": "InvalidParamsSet", + "msg": "Params Set is invalid" + }, + { + "code": 29, + "name": "InvalidInput", + "msg": "InvalidInput" + }, + { + "code": 30, + "name": "ExceededSlippage", + "msg": "instruction exceeds desired slippage limit" + }, + { + "code": 31, + "name": "CalculationExRateFailure", + "msg": "CalculationExRateFailure" + }, + { + "code": 32, + "name": "CheckedSubOverflow", + "msg": "Checked_Sub Overflow" + }, + { + "code": 33, + "name": "CheckedAddOverflow", + "msg": "Checked_Add Overflow" + }, + { + "code": 34, + "name": "CheckedMulOverflow", + "msg": "Checked_Mul Overflow" + }, + { + "code": 35, + "name": "CheckedDivOverflow", + "msg": "Checked_Div Overflow" + }, + { + "code": 36, + "name": "CheckedEmptyFunds", + "msg": "Empty Funds" + }, + { + "code": 37, + "name": "CalcPnlError", + "msg": "Calc pnl error" + }, + { + "code": 38, + "name": "InvalidSplTokenProgram", + "msg": "InvalidSplTokenProgram" + }, + { + "code": 39, + "name": "TakePnlError", + "msg": "Take Pnl error" + }, + { + "code": 40, + "name": "InsufficientFunds", + "msg": "Insufficient funds" + }, + { + "code": 41, + "name": "ConversionFailure", + "msg": "Conversion to u64 failed with an overflow or underflow" + }, + { + "code": 42, + "name": "InvalidUserToken", + "msg": "user token input does not match amm" + }, + { + "code": 43, + "name": "InvalidSrmMint", + "msg": "InvalidSrmMint" + }, + { + "code": 44, + "name": "InvalidSrmToken", + "msg": "InvalidSrmToken" + }, + { + "code": 45, + "name": "TooManyOpenOrders", + "msg": "TooManyOpenOrders" + }, + { + "code": 46, + "name": "OrderAtSlotIsPlaced", + "msg": "OrderAtSlotIsPlaced" + }, + { + "code": 47, + "name": "InvalidSysProgramAddress", + "msg": "InvalidSysProgramAddress" + }, + { + "code": 48, + "name": "InvalidFee", + "msg": "The provided fee does not match the program owner's constraints" + }, + { + "code": 49, + "name": "RepeatCreateAmm", + "msg": "Repeat create amm about market" + }, + { + "code": 50, + "name": "NotAllowZeroLP", + "msg": "Not allow Zero LP" + }, + { + "code": 51, + "name": "InvalidCloseAuthority", + "msg": "Token account has a close authority" + }, + { + "code": 52, + "name": "InvalidFreezeAuthority", + "msg": "Pool token mint has a freeze authority" + }, + { + "code": 53, + "name": "InvalidReferPCMint", + "msg": "InvalidReferPCMint" + }, + { + "code": 54, + "name": "InvalidConfigAccount", + "msg": "InvalidConfigAccount" + }, + { + "code": 55, + "name": "RepeatCreateConfigAccount", + "msg": "Repeat create staking config account" + }, + { + "code": 56, + "name": "UnknownAmmError", + "msg": "Unknown Amm Error" + } + ], + "metadata": { + "instruction_selector_type": "index", + "address": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" + } +} diff --git a/src/streaming/common/simd_utils.rs b/src/streaming/common/simd_utils.rs index 8e60461..bb17fcf 100644 --- a/src/streaming/common/simd_utils.rs +++ b/src/streaming/common/simd_utils.rs @@ -1,5 +1,4 @@ use wide::*; -use wide::CmpEq; /// SIMD-accelerated data parsing utilities pub struct SimdUtils; diff --git a/src/streaming/event_parser/core/merger_event.rs b/src/streaming/event_parser/core/merger_event.rs index 8fcfd12..3dd6371 100644 --- a/src/streaming/event_parser/core/merger_event.rs +++ b/src/streaming/event_parser/core/merger_event.rs @@ -21,6 +21,11 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) { e.creator = cpie.creator; e.creator_fee_basis_points = cpie.creator_fee_basis_points; e.creator_fee = cpie.creator_fee; + e.ix_name = cpie.ix_name.clone(); + e.mayhem_mode = cpie.mayhem_mode; + e.cashback_fee_basis_points = cpie.cashback_fee_basis_points; + e.cashback = cpie.cashback; + e.is_cashback_coin = cpie.is_cashback_coin; } _ => {} }, @@ -37,6 +42,7 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) { e.token_total_supply = cpie.token_total_supply; e.token_program = cpie.token_program; e.is_mayhem_mode = cpie.is_mayhem_mode; + e.is_cashback_enabled = cpie.is_cashback_enabled; } _ => {} }, @@ -53,6 +59,7 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) { e.token_total_supply = cpie.token_total_supply; e.token_program = cpie.token_program; e.is_mayhem_mode = cpie.is_mayhem_mode; + e.is_cashback_enabled = cpie.is_cashback_enabled; } _ => {} }, diff --git a/src/streaming/event_parser/protocols/pumpfun/events.rs b/src/streaming/event_parser/protocols/pumpfun/events.rs index 16e89d6..1c34613 100755 --- a/src/streaming/event_parser/protocols/pumpfun/events.rs +++ b/src/streaming/event_parser/protocols/pumpfun/events.rs @@ -25,6 +25,9 @@ pub struct PumpFunCreateTokenEvent { pub token_program: Pubkey, #[borsh(skip)] pub is_mayhem_mode: bool, + /// Whether cashback is enabled (IDL CreateEvent.is_cashback_enabled) + #[borsh(skip)] + pub is_cashback_enabled: bool, #[borsh(skip)] pub mint_authority: Pubkey, #[borsh(skip)] @@ -49,6 +52,8 @@ pub struct PumpFunCreateV2TokenEvent { pub token_total_supply: u64, pub token_program: Pubkey, pub is_mayhem_mode: bool, + /// Whether cashback is enabled (IDL CreateEvent.is_cashback_enabled) + pub is_cashback_enabled: bool, #[borsh(skip)] pub mint_authority: Pubkey, #[borsh(skip)] @@ -58,7 +63,7 @@ pub struct PumpFunCreateV2TokenEvent { pub fn pumpfun_create_v2_token_event_log_decode(data: &[u8]) -> Option { let mut offset = 0; - // 解析 name 字符串: [长度(4字节 u32)][字符串内容] + // Parse name string: [length (4 bytes u32)][string bytes] if data.len() < offset + 4 { return None; } @@ -70,7 +75,7 @@ pub fn pumpfun_create_v2_token_event_log_decode(data: &[u8]) -> Option Option Option Option Option= offset + 33 { + // If data length allows, parse V2 extra fields: token_program (32 bytes) + is_mayhem_mode (1 byte) + is_cashback_enabled (1 byte) + let (token_program, is_mayhem_mode, is_cashback_enabled) = if data.len() >= offset + 34 { let token_program = Pubkey::new_from_array(data[offset..offset + 32].try_into().ok()?); - let is_mayhem_mode = data[offset + 32] == 1; - (token_program, is_mayhem_mode) + let is_mayhem_mode = data[offset + 32] != 0; + let is_cashback_enabled = data[offset + 33] != 0; + (token_program, is_mayhem_mode, is_cashback_enabled) + } else if data.len() >= offset + 33 { + // Backward compat: only token_program + is_mayhem_mode, no is_cashback_enabled + let token_program = Pubkey::new_from_array(data[offset..offset + 32].try_into().ok()?); + let is_mayhem_mode = data[offset + 32] != 0; + (token_program, is_mayhem_mode, false) } else { - (Pubkey::default(), false) + (Pubkey::default(), false, false) }; Some(PumpFunCreateV2TokenEvent { @@ -174,6 +185,7 @@ pub fn pumpfun_create_v2_token_event_log_decode(data: &[u8]) -> Option 0) + #[borsh(skip)] + pub is_cashback_coin: bool, } -pub const PUMPFUN_TRADE_EVENT_LOG_SIZE: usize = 250; +/// Borsh byte length of TradeEvent fixed fields (IDL order; excludes ix_name and following variable part). +/// Layout: mint(32)+sol_amount(8)+token_amount(8)+is_buy(1)+user(32)+timestamp(8)+virtual_sol(8)+virtual_token(8)+real_sol(8)+real_token(8)+fee_recipient(32)+fee_basis_points(8)+fee(8)+creator(32)+creator_fee_bps(8)+creator_fee(8)+track_volume(1)+total_unclaimed(8)+total_claimed(8)+current_sol_volume(8)+last_update_timestamp(8) = 274 +pub const PUMPFUN_TRADE_EVENT_LOG_SIZE: usize = 274; +/// Decode TradeEvent log; if data.len() > 274 then parse ix_name, mayhem_mode, cashback (IDL-aligned). pub fn pumpfun_trade_event_log_decode(data: &[u8]) -> Option { if data.len() < PUMPFUN_TRADE_EVENT_LOG_SIZE { return None; } - borsh::from_slice::(&data[..PUMPFUN_TRADE_EVENT_LOG_SIZE]).ok() + let mut event = borsh::from_slice::(&data[..PUMPFUN_TRADE_EVENT_LOG_SIZE]).ok()?; + let mut offset = PUMPFUN_TRADE_EVENT_LOG_SIZE; + if offset < data.len() { + let (ix_name, inc) = read_borsh_string(data, offset).unwrap_or((String::new(), 0)); + offset += inc; + event.ix_name = ix_name; + } + if offset + 1 <= data.len() { + event.mayhem_mode = data[offset] != 0; + offset += 1; + } + if offset + 8 <= data.len() { + event.cashback_fee_basis_points = u64::from_le_bytes(data[offset..offset + 8].try_into().ok()?); + offset += 8; + } + if offset + 8 <= data.len() { + event.cashback = u64::from_le_bytes(data[offset..offset + 8].try_into().ok()?); + } + event.is_cashback_coin = event.cashback_fee_basis_points > 0; + Some(event) +} + +#[inline] +fn read_borsh_string(data: &[u8], start: usize) -> Option<(String, usize)> { + if start + 4 > data.len() { + return None; + } + let len = u32::from_le_bytes(data[start..start + 4].try_into().ok()?) as usize; + let start = start + 4; + if start + len > data.len() { + return None; + } + let s = String::from_utf8_lossy(&data[start..start + len]).to_string(); + Some((s, 4 + len)) } #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] @@ -323,7 +384,7 @@ pub fn pumpfun_migrate_event_log_decode(data: &[u8]) -> Option(&data[..PUMPFUN_MIGRATE_EVENT_LOG_SIZE]).ok() } -/// 铸币曲线 +/// Bonding curve #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] pub struct PumpFunBondingCurveAccountEvent { #[borsh(skip)] @@ -336,7 +397,7 @@ pub struct PumpFunBondingCurveAccountEvent { pub bonding_curve: BondingCurve, } -/// 全局配置 +/// Global config #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] pub struct PumpFunGlobalAccountEvent { #[borsh(skip)] @@ -349,9 +410,9 @@ pub struct PumpFunGlobalAccountEvent { pub global: Global, } -/// 事件鉴别器常量 +/// Event discriminator constants pub mod discriminators { - // 事件鉴别器 + // Event discriminators // pub const CREATE_TOKEN_EVENT: &str = "0xe445a52e51cb9a1d1b72a94ddeeb6376"; pub const CREATE_TOKEN_EVENT: &[u8] = &[228, 69, 165, 46, 81, 203, 154, 29, 27, 114, 169, 77, 222, 235, 99, 118]; @@ -362,7 +423,7 @@ pub mod discriminators { pub const COMPLETE_PUMP_AMM_MIGRATION_EVENT: &[u8] = &[228, 69, 165, 46, 81, 203, 154, 29, 189, 233, 93, 185, 92, 148, 234, 148]; - // 指令鉴别器 + // Instruction discriminators pub const CREATE_TOKEN_IX: &[u8] = &[24, 30, 200, 40, 5, 28, 7, 119]; pub const CREATE_V2_TOKEN_IX: &[u8] = &[214, 144, 76, 236, 95, 139, 49, 180]; pub const BUY_IX: &[u8] = &[102, 6, 61, 18, 1, 218, 235, 234]; @@ -370,7 +431,7 @@ pub mod discriminators { pub const SELL_IX: &[u8] = &[51, 230, 133, 164, 1, 127, 131, 173]; pub const MIGRATE_IX: &[u8] = &[155, 234, 231, 146, 236, 158, 162, 30]; - // 账户鉴别器 + // Account discriminators pub const BONDING_CURVE_ACCOUNT: &[u8] = &[23, 183, 248, 55, 96, 216, 172, 96]; pub const GLOBAL_ACCOUNT: &[u8] = &[167, 232, 232, 177, 200, 108, 114, 127]; }