UNPKG

@solsdk/relay_sdk

Version:

Pumpfun SDK — create, buy, sell tokens with support for Jito bundles and multiple relayer integrations. Rebuilt and fixed pumpdotfun-sdk.

2,210 lines (2,203 loc) 195 kB
import { Program } from "@coral-xyz/anchor"; import { PublicKey, SendTransactionError, TransactionMessage, VersionedTransaction, Transaction, ComputeBudgetProgram, SystemProgram, } from "@solana/web3.js"; import { getAssociatedTokenAddress, getAccount, createAssociatedTokenAccountInstruction, } from "@solana/spl-token"; import { struct, u64, bool, publicKey } from "@coral-xyz/borsh"; import { searcherClient } from "jito-ts/dist/sdk/block-engine/searcher.js"; import { Bundle } from "jito-ts/dist/sdk/block-engine/types.js"; import http from "http"; import https from "https"; import { Keypair as UtilsKeypair } from "@nealireverse_dev/utils"; var address = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; var metadata = { name: "pump", version: "0.1.0", spec: "0.1.0", description: "Created with Anchor", }; var instructions = [ { name: "buy", docs: ["Buys tokens from a bonding curve."], discriminator: [102, 6, 61, 18, 1, 218, 235, 234], accounts: [ { name: "global", pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "fee_recipient", writable: true, }, { name: "mint", }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { name: "associated_bonding_curve", writable: true, pda: { seeds: [ { kind: "account", path: "bonding_curve", }, { kind: "const", value: [ 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, 245, 133, 126, 255, 0, 169, ], }, { kind: "account", path: "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: "associated_user", writable: true, }, { name: "user", writable: true, signer: true, }, { name: "system_program", address: "11111111111111111111111111111111", }, { name: "token_program", address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", }, { name: "creator_vault", writable: true, pda: { seeds: [ { kind: "const", value: [ 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116, ], }, { kind: "account", path: "bonding_curve.creator", account: "BondingCurve", }, ], }, }, { 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: "amount", type: "u64", }, { name: "max_sol_cost", type: "u64", }, ], }, { name: "collect_creator_fee", docs: [ "Collects creator_fee from creator_vault to the coin creator account", ], discriminator: [20, 22, 86, 123, 198, 28, 219, 132], accounts: [ { name: "creator", writable: true, signer: true, }, { name: "creator_vault", writable: true, pda: { seeds: [ { kind: "const", value: [ 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116, ], }, { kind: "account", path: "creator", }, ], }, }, { 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", }, ], args: [], }, { name: "create", docs: ["Creates a new coin and bonding curve."], discriminator: [24, 30, 200, 40, 5, 28, 7, 119], accounts: [ { name: "mint", writable: true, signer: true, }, { name: "mint_authority", pda: { seeds: [ { kind: "const", value: [ 109, 105, 110, 116, 45, 97, 117, 116, 104, 111, 114, 105, 116, 121, ], }, ], }, }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { name: "associated_bonding_curve", writable: true, pda: { seeds: [ { kind: "account", path: "bonding_curve", }, { kind: "const", value: [ 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, 245, 133, 126, 255, 0, 169, ], }, { kind: "account", path: "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: "global", pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "mpl_token_metadata", address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s", }, { name: "metadata", writable: true, pda: { seeds: [ { kind: "const", value: [109, 101, 116, 97, 100, 97, 116, 97], }, { kind: "const", value: [ 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, 188, 3, 248, 41, 70, ], }, { kind: "account", path: "mint", }, ], program: { kind: "account", path: "mpl_token_metadata", }, }, }, { name: "user", writable: true, signer: true, }, { name: "system_program", address: "11111111111111111111111111111111", }, { name: "token_program", address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", }, { name: "associated_token_program", address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", }, { name: "rent", address: "SysvarRent111111111111111111111111111111111", }, { 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: "name", type: "string", }, { name: "symbol", type: "string", }, { name: "uri", type: "string", }, { name: "creator", type: "pubkey", }, ], }, { name: "extend_account", docs: ["Extends the size of program-owned accounts"], discriminator: [234, 102, 194, 203, 150, 72, 62, 229], accounts: [ { name: "account", writable: true, }, { name: "user", signer: true, }, { 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", }, ], args: [], }, { name: "initialize", docs: ["Creates the global state."], discriminator: [175, 175, 109, 31, 13, 152, 155, 237], accounts: [ { name: "global", writable: true, pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "user", writable: true, signer: true, }, { name: "system_program", address: "11111111111111111111111111111111", }, ], args: [], }, { name: "migrate", docs: ["Migrates liquidity to pump_amm if the bonding curve is complete"], discriminator: [155, 234, 231, 146, 236, 158, 162, 30], accounts: [ { name: "global", pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "withdraw_authority", writable: true, relations: ["global"], }, { name: "mint", }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { name: "associated_bonding_curve", writable: true, pda: { seeds: [ { kind: "account", path: "bonding_curve", }, { kind: "const", value: [ 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, 245, 133, 126, 255, 0, 169, ], }, { kind: "account", path: "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", signer: true, }, { name: "system_program", address: "11111111111111111111111111111111", }, { name: "token_program", address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", }, { name: "pump_amm", address: "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA", }, { name: "pool", writable: true, pda: { seeds: [ { kind: "const", value: [112, 111, 111, 108], }, { kind: "const", value: [0, 0], }, { kind: "account", path: "pool_authority", }, { kind: "account", path: "mint", }, { kind: "account", path: "wsol_mint", }, ], program: { kind: "account", path: "pump_amm", }, }, }, { name: "pool_authority", writable: true, pda: { seeds: [ { kind: "const", value: [ 112, 111, 111, 108, 45, 97, 117, 116, 104, 111, 114, 105, 116, 121, ], }, { kind: "account", path: "mint", }, ], }, }, { name: "pool_authority_mint_account", writable: true, pda: { seeds: [ { kind: "account", path: "pool_authority", }, { kind: "account", path: "token_program", }, { kind: "account", path: "mint", }, ], program: { kind: "account", path: "associated_token_program", }, }, }, { name: "pool_authority_wsol_account", writable: true, pda: { seeds: [ { kind: "account", path: "pool_authority", }, { kind: "account", path: "token_program", }, { kind: "account", path: "wsol_mint", }, ], program: { kind: "account", path: "associated_token_program", }, }, }, { name: "amm_global_config", pda: { seeds: [ { kind: "const", value: [ 103, 108, 111, 98, 97, 108, 95, 99, 111, 110, 102, 105, 103, ], }, ], program: { kind: "account", path: "pump_amm", }, }, }, { name: "wsol_mint", address: "So11111111111111111111111111111111111111112", }, { name: "lp_mint", writable: true, pda: { seeds: [ { kind: "const", value: [112, 111, 111, 108, 95, 108, 112, 95, 109, 105, 110, 116], }, { kind: "account", path: "pool", }, ], program: { kind: "account", path: "pump_amm", }, }, }, { name: "user_pool_token_account", writable: true, pda: { seeds: [ { kind: "account", path: "pool_authority", }, { kind: "account", path: "token_2022_program", }, { kind: "account", path: "lp_mint", }, ], program: { kind: "account", path: "associated_token_program", }, }, }, { name: "pool_base_token_account", writable: true, pda: { seeds: [ { kind: "account", path: "pool", }, { kind: "account", path: "token_program", }, { kind: "account", path: "mint", }, ], program: { kind: "account", path: "associated_token_program", }, }, }, { name: "pool_quote_token_account", writable: true, pda: { seeds: [ { kind: "account", path: "pool", }, { kind: "account", path: "token_program", }, { kind: "account", path: "wsol_mint", }, ], program: { kind: "account", path: "associated_token_program", }, }, }, { name: "token_2022_program", address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", }, { name: "associated_token_program", address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", }, { name: "pump_amm_event_authority", pda: { seeds: [ { kind: "const", value: [ 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111, 114, 105, 116, 121, ], }, ], program: { kind: "account", path: "pump_amm", }, }, }, { 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: "sell", docs: ["Sells tokens into a bonding curve."], discriminator: [51, 230, 133, 164, 1, 127, 131, 173], accounts: [ { name: "global", pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "fee_recipient", writable: true, }, { name: "mint", }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { name: "associated_bonding_curve", writable: true, pda: { seeds: [ { kind: "account", path: "bonding_curve", }, { kind: "const", value: [ 6, 221, 246, 225, 215, 101, 161, 147, 217, 203, 225, 70, 206, 235, 121, 172, 28, 180, 133, 237, 95, 91, 55, 145, 58, 140, 245, 133, 126, 255, 0, 169, ], }, { kind: "account", path: "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: "associated_user", writable: true, }, { name: "user", writable: true, signer: true, }, { name: "system_program", address: "11111111111111111111111111111111", }, { name: "creator_vault", writable: true, pda: { seeds: [ { kind: "const", value: [ 99, 114, 101, 97, 116, 111, 114, 45, 118, 97, 117, 108, 116, ], }, { kind: "account", path: "bonding_curve.creator", account: "BondingCurve", }, ], }, }, { name: "token_program", address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", }, { 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: "amount", type: "u64", }, { name: "min_sol_output", type: "u64", }, ], }, { name: "set_creator", docs: [ "Allows Global::set_creator_authority to set the bonding curve creator from Metaplex metadata or input argument", ], discriminator: [254, 148, 255, 112, 207, 142, 170, 165], accounts: [ { name: "set_creator_authority", signer: true, relations: ["global"], }, { name: "global", pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "mint", }, { name: "metadata", pda: { seeds: [ { kind: "const", value: [109, 101, 116, 97, 100, 97, 116, 97], }, { kind: "const", value: [ 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, 188, 3, 248, 41, 70, ], }, { kind: "account", path: "mint", }, ], program: { kind: "const", value: [ 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, 188, 3, 248, 41, 70, ], }, }, }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { 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: "creator", type: "pubkey", }, ], }, { name: "set_metaplex_creator", docs: [ "Syncs the bonding curve creator with the Metaplex metadata creator if it exists", ], discriminator: [138, 96, 174, 217, 48, 85, 197, 246], accounts: [ { name: "mint", }, { name: "metadata", pda: { seeds: [ { kind: "const", value: [109, 101, 116, 97, 100, 97, 116, 97], }, { kind: "const", value: [ 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, 188, 3, 248, 41, 70, ], }, { kind: "account", path: "mint", }, ], program: { kind: "const", value: [ 11, 112, 101, 177, 227, 209, 124, 69, 56, 157, 82, 127, 107, 4, 195, 205, 88, 184, 108, 115, 26, 160, 253, 181, 73, 182, 209, 188, 3, 248, 41, 70, ], }, }, }, { name: "bonding_curve", writable: true, pda: { seeds: [ { kind: "const", value: [ 98, 111, 110, 100, 105, 110, 103, 45, 99, 117, 114, 118, 101, ], }, { kind: "account", path: "mint", }, ], }, }, { 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: "set_params", docs: ["Sets the global state parameters."], discriminator: [27, 234, 178, 52, 147, 2, 187, 141], 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: "initial_virtual_token_reserves", type: "u64", }, { name: "initial_virtual_sol_reserves", type: "u64", }, { name: "initial_real_token_reserves", type: "u64", }, { name: "token_total_supply", type: "u64", }, { name: "fee_basis_points", type: "u64", }, { name: "withdraw_authority", type: "pubkey", }, { name: "enable_migrate", type: "bool", }, { name: "pool_migration_fee", type: "u64", }, { name: "creator_fee_basis_points", type: "u64", }, { name: "set_creator_authority", type: "pubkey", }, ], }, { name: "update_global_authority", discriminator: [227, 181, 74, 196, 208, 21, 97, 213], accounts: [ { name: "global", writable: true, pda: { seeds: [ { kind: "const", value: [103, 108, 111, 98, 97, 108], }, ], }, }, { name: "authority", signer: true, relations: ["global"], }, { name: "new_authority", }, { 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: [], }, ]; var accounts = [ { name: "BondingCurve", discriminator: [23, 183, 248, 55, 96, 216, 172, 96], }, { name: "Global", discriminator: [167, 232, 232, 177, 200, 108, 114, 127], }, ]; var events = [ { name: "CollectCreatorFeeEvent", discriminator: [122, 2, 127, 1, 14, 191, 12, 175], }, { name: "CompleteEvent", discriminator: [95, 114, 97, 156, 212, 46, 152, 8], }, { name: "CompletePumpAmmMigrationEvent", discriminator: [189, 233, 93, 185, 92, 148, 234, 148], }, { name: "CreateEvent", discriminator: [27, 114, 169, 77, 222, 235, 99, 118], }, { name: "ExtendAccountEvent", discriminator: [97, 97, 215, 144, 93, 146, 22, 124], }, { name: "SetCreatorEvent", discriminator: [237, 52, 123, 37, 245, 251, 72, 210], }, { name: "SetMetaplexCreatorEvent", discriminator: [142, 203, 6, 32, 127, 105, 191, 162], }, { name: "SetParamsEvent", discriminator: [223, 195, 159, 246, 62, 48, 143, 131], }, { name: "TradeEvent", discriminator: [189, 219, 127, 211, 78, 230, 97, 238], }, { name: "UpdateGlobalAuthorityEvent", discriminator: [182, 195, 137, 42, 35, 206, 207, 247], }, ]; var errors = [ { code: 6000, name: "NotAuthorized", msg: "The given account is not authorized to execute this instruction.", }, { code: 6001, name: "AlreadyInitialized", msg: "The program is already initialized.", }, { code: 6002, name: "TooMuchSolRequired", msg: "slippage: Too much SOL required to buy the given amount of tokens.", }, { code: 6003, name: "TooLittleSolReceived", msg: "slippage: Too little SOL received to sell the given amount of tokens.", }, { code: 6004, name: "MintDoesNotMatchBondingCurve", msg: "The mint does not match the bonding curve.", }, { code: 6005, name: "BondingCurveComplete", msg: "The bonding curve has completed and liquidity migrated to raydium.", }, { code: 6006, name: "BondingCurveNotComplete", msg: "The bonding curve has not completed.", }, { code: 6007, name: "NotInitialized", msg: "The program is not initialized.", }, { code: 6008, name: "WithdrawTooFrequent", msg: "Withdraw too frequent", }, { code: 6009, name: "NewSizeShouldBeGreaterThanCurrentSize", msg: "new_size should be > current_size", }, { code: 6010, name: "AccountTypeNotSupported", msg: "Account type not supported", }, { code: 6011, name: "InitialRealTokenReservesShouldBeLessThanTokenTotalSupply", msg: "initial_real_token_reserves should be less than token_total_supply", }, { code: 6012, name: "InitialVirtualTokenReservesShouldBeGreaterThanInitialRealTokenReserves", msg: "initial_virtual_token_reserves should be greater than initial_real_token_reserves", }, { code: 6013, name: "FeeBasisPointsGreaterThanMaximum", msg: "fee_basis_points greater than maximum", }, { code: 6014, name: "AllZerosWithdrawAuthority", msg: "Withdraw authority cannot be set to System Program ID", }, { code: 6015, name: "PoolMigrationFeeShouldBeLessThanFinalRealSolReserves", msg: "pool_migration_fee should be less than final_real_sol_reserves", }, { code: 6016, name: "PoolMigrationFeeShouldBeGreaterThanCreatorFeePlusMaxMigrateFees", msg: "pool_migration_fee should be greater than creator_fee + MAX_MIGRATE_FEES", }, { code: 6017, name: "DisabledWithdraw", msg: "Migrate instruction is disabled", }, { code: 6018, name: "DisabledMigrate", msg: "Migrate instruction is disabled", }, { code: 6019, name: "InvalidCreator", msg: "Invalid creator pubkey", }, { code: 6020, name: "BuyZeroAmount", msg: "Buy zero amount", }, { code: 6021, name: "NotEnoughTokensToBuy", msg: "Not enough tokens to buy", }, { code: 6022, name: "SellZeroAmount", msg: "Sell zero amount", }, { code: 6023, name: "NotEnoughTokensToSell", msg: "Not enough tokens to sell", }, { code: 6024, name: "Overflow", msg: "Overflow", }, { code: 6025, name: "Truncation", msg: "Truncation", }, { code: 6026, name: "DivisionByZero", msg: "Division by zero", }, { code: 6027, name: "NotEnoughRemainingAccounts", msg: "Not enough remaining accounts", }, { code: 6028, name: "AllFeeRecipientsShouldBeNonZero", msg: "All fee recipients should be non-zero", }, { code: 6029, name: "UnsortedNotUniqueFeeRecipients", msg: "Unsorted or not unique fee recipients", }, { code: 6030, name: "CreatorShouldNotBeZero", msg: "Creator should not be zero", }, ]; var types = [ { name: "BondingCurve", type: { kind: "struct", fields: [ { name: "virtual_token_reserves", type: "u64", }, { name: "virtual_sol_reserves", type: "u64", }, { name: "real_token_reserves", type: "u64", }, { name: "real_sol_reserves", type: "u64", }, { name: "token_total_supply", type: "u64", }, { name: "complete", type: "bool", }, { name: "creator", type: "pubkey", }, ], }, }, { name: "CollectCreatorFeeEvent", type: { kind: "struct", fields: [ { name: "timestamp", type: "i64", }, { name: "creator", type: "pubkey", }, { name: "creator_fee", type: "u64", }, ], }, }, { name: "CompleteEvent", type: { kind: "struct", fields: [ { name: "user", type: "pubkey", }, { name: "mint", type: "pubkey", }, { name: "bonding_curve", type: "pubkey", }, { name: "timestamp", type: "i64", }, ], }, }, { name: "CompletePumpAmmMigrationEvent", type: { kind: "struct", fields: [ { name: "user", type: "pubkey", }, { name: "mint", type: "pubkey", }, { name: "mint_amount", type: "u64", }, { name: "sol_amount", type: "u64", }, { name: "pool_migration_fee", type: "u64", }, { name: "bonding_curve", type: "pubkey", }, { name: "timestamp", type: "i64", }, { name: "pool", type: "pubkey", }, ], }, }, { name: "CreateEvent", type: { kind: "struct", fields: [ { name: "name", type: "string", }, { name: "symbol", type: "string", }, { name: "uri", type: "string", }, { name: "mint", type: "pubkey", }, { name: "bonding_curve", type: "pubkey", }, { name: "user", type: "pubkey", }, { name: "creator", type: "pubkey", }, { name: "timestamp", type: "i64", }, { name: "virtual_token_reserves", type: "u64", }, { name: "virtual_sol_reserves", type: "u64", }, { name: "real_token_reserves", type: "u64", }, { name: "token_total_supply", type: "u64", }, ], }, }, { name: "ExtendAccountEvent", type: { kind: "struct", fields: [ { name: "account", type: "pubkey", }, { name: "user", type: "pubkey", }, { name: "current_size", type: "u64", }, { name: "new_size", type: "u64", }, { name: "timestamp", type: "i64", }, ], }, }, { name: "Global", type: { kind: "struct", fields: [ { name: "initialized", docs: ["Unused"], type: "bool", }, { name: "authority", type: "pubkey", }, { name: "fee_recipient", type: "pubkey", }, { name: "initial_virtual_token_reserves", type: "u64", }, { name: "initial_virtual_sol_reserves", type: "u64", }, { name: "initial_real_token_reserves", type: "u64", }, { name: "token_total_supply", type: "u64", }, { name: "fee_basis_points", type: "u64", }, { name: "withdraw_authority", type: "pubkey", }, { name: "enable_migrate", docs: ["Unused"], type: "bool", }, { name: "pool_migration_fee", type: "u64", }, { name: "creator_fee_basis_points", type: "u64", }, { name: "fee_recipients", type: { array: ["pubkey", 7], }, }, { name: "set_creator_authority", type: "pubkey", }, ], }, }, { name: "SetCreatorEvent", type: { kind: "struct", fields: [ { name: "timestamp", type: "i64", }, { name: "mint", type: "pubkey", }, { name: "bonding_curve", type: "pubkey", }, { name: "creator", type: "pubkey", }, ], }, }, { name: "SetMetaplexCreatorEvent", type: { kind: "struct", fields: [ { name: "timestamp", type: "i64", }, { name: "mint", type: "pubkey", }, { name: "bonding_curve", type: "pubkey", }, { name: "metadata", type: "pubkey", }, { name: "creator", type: "pubkey", }, ], }, }, { name: "SetParamsEvent", type: { kind: "struct", fields: [ { name: "initial_virtual_token_reserves", type: "u64", }, { name: "initial_virtual_sol_reserves", type: "u64", }, { name: "initial_real_token_reserves", type: "u64", }, { name: "final_real_sol_reserves", type: "u64", }, { name: "token_total_supply", type: "u64", }, { name: "fee_basis_points", type: "u64", }, { name: "withdraw_authority", type: "pubkey", }, { name: "enable_migrate", type: "bool", }, { name: "pool_migration_fee", type: "u64", }, { name: "creator_fee_basis_points", type: "u64", }, { name: "fee_recipients", type: { array: ["pubkey", 8], }, }, { name: "timestamp", type: "i64", }, { name: "set_creator_authority", type: "pubkey", }, ], }, }, { name: "TradeEvent", type: { kind: "struct", fields: [ { name: "mint", type: "pubkey", }, { name: "sol_amount", type: "u64", }, { name: "token_amount", type: "u64", }, { name: "is_buy", type: "bool", }, { name: "user", type: "pubkey", }, { name: "timestamp", type: "i64", }, { name: "virtual_sol_reserves", type: "u64", }, { name: "virtual_token_reserves", type: "u64", }, { name: "real_sol_reserves", type: "u64", }, { name: "real_token_reserves", type: "u64", }, { name: "fee_recipient", type: "pubkey", }, { name: "fee_basis_points", type: "u64", }, { name: "fee", type: "u64", }, { name: "creator", type: "pubkey", }, { name: "creator_fee_basis_points", type: "u64", }, { name: "creator_fee", type: "u64", }, ], }, }, { name: "UpdateGlobalAuthorityEvent", type: { kind: "struct", fields: [ { name: "global", type: "pubkey", }, { name: "authority", type: "pubkey", }, { name: "new_authority", type: "pubkey", }, { name: "timestamp", type: "i64", }, ], }, }, ]; var IDL = { address: address, metadata: metadata, instructions: instructions, accounts: accounts, events: events, errors: errors, types: types, }; const toPubKey = (v) => new PublicKey(v); const toBigInt = (v) => BigInt(v); function toCollectCreatorFeeEvent(e) { return { timestamp: Number(e.timestamp), creator: toPubKey(e.creator), creatorFee: toBigInt(e.creatorFee), }; } function toCompleteEvent(e) { return { user: toPubKey(e.user), mint: toPubKey(e.mint), bondingCurve: toPubKey(e.bondingCurve), timestamp: Number(e.timestamp), }; } function toCompletePumpAmmMigrationEvent(e) { return { user: toPubKey(e.user), mint: toPubKey(e.mint), mintAmount: toBigInt(e.mintAmount), solAmount: toBigInt(e.solAmount), poolMigrationFee: toBigInt(e.poolMigrationFee), bondingCurve: toPubKey(e.bondingCurve), timestamp: Number(e.timestamp), pool: toPubKey(e.pool), }; } function toCreateEvent(e) { return { name: e.name, symbol: e.symbol, uri: e.uri, mint: toPubKey(e.mint), bondingCurve: toPubKey(e.bondingCurve), user: toPubKey(e.user), creator: toPubKey(e.creator), timestamp: Number(e.timestamp), virtualTokenReserves: toBigInt(e.virtualTokenReserves), virtualSolReserves: toBigInt(e.virtualSolReserves), realTokenReserves: toBigInt(e.realTokenReserves), tokenTotalSupply: toBigInt(e.tokenTotalSupply), }; } function toExtendAccountEvent(e) { return { account: toPubKey(e.account), user: toPubKey(e.user), currentSize: toBigInt(e.currentSize), newSize: toBigInt(e.newSize), timestamp: Number(e.timestamp), }; } function toSetCreatorEvent(e) { return { timestamp: Number(e.timestamp), mint: toPubKey(e.mint), bondingCurve: toPubKey(e.bondingCurve), creator: toPubKey(e.creator), }; } function toSetMetaplexCreatorEvent(e) { return { timestamp: Number(e.timestamp), mint: toPubKey(e.mint), bondingCurve: toPubKey(e.bondingCurve), metadata: toPubKey(e.metadata), creator: toPubKey(e.creator), }; } function toSetParamsEvent(e) { return { initialVirtualTokenReserves: toBigInt(e.initialVirtualTokenReserves), initialVirtualSolReserves: toBigInt(e.initialVirtualSolReserves), initialRealTokenReserves: toBigInt(e.initialRealTokenReserves), finalRealSolReserves: toBigInt(e.finalRealSolReserves), tokenTotalSupply: toBigInt(e.tokenTotalSupply), feeBasisPoints: toBigInt(e.feeBasisPoints), withdrawAuthority: toPubKey(e.withdrawAuthority), enableMigrate: Boolean(e.enableMigrate), poolMigrationFee: toBigInt(e.poolMigrationFee), creatorFeeBasisPoints: toBigInt(e.creatorFeeBasisPoints), feeRecipients: e.feeRecipients.map(toPubKey), timestamp: Number(e.timestamp), setCreatorAuthority: toPubKey(e.setCreatorAuthority), }; } function toTradeEvent(e) { return { mint: toPubKey(e.mint), solAmount: toBigInt(e.solAmount), tokenAmount: toBigInt(e.tokenAmount), isBuy: Boolean(e.isBuy), user: toPubKey(e.user), timestamp: Number(e.timestamp), virtualSolReserves: toBigInt(e.virtualSolReserves), virtualTokenReserves: toBigInt(e.virtualTokenReserves), realSolReserves: toBigInt(e.realSolReserves), realTokenReserves: toBigInt(e.realTokenReserves), feeRecipient: toPubKey(e.feeRecipient), feeBasisPoints: toBigInt(e.feeBasisPoints), fee: toBigInt(e.fee), creator: toPubKey(e.creator), creatorFeeBasisPoints: toBigInt(e.creatorFeeBasisPoints), creatorFee: toBigInt(e.creatorFee), }; } function toUpdateGlobalAuthorityEvent(e) { return { global: toPubKey(e.global), authority: toPubKey(e.authority), newAuthority: toPubKey(e.newAuthority), timestamp: Number(e.timestamp), }; } const converters = { createEvent: toCreateEvent, tradeEvent: toTradeEvent, completeEvent: toCompleteEvent, setParamsEvent: toSetParamsEvent, collectCreatorFeeEvent: toCollectCreatorFeeEvent, completePumpAmmMigrationEvent: toCompletePumpAmmMigrationEvent, extendAccountEvent: toExtendAccountEvent, setCreatorEvent: toSetCreatorEvent, setMetaplexCreatorEvent: toSetMetaplexCreatorEvent, updateGlobalAuthorityEvent: toUpdateGlobalAuthorityEvent, }; class EventModule { sdk; constructor(sdk) { this.sdk = sdk; } addEventListener(eventType, callback) { return this.sdk.program.addEventListener( eventType, (event, slot, signature) => { try { const convert = converters[eventType]; if (!convert) throw new Error(`No converter for event type: ${eventType}`); callback(convert(event), slot, signature); } catch (err) { console.error(`Failed to handle ${eventType}:`, err); } } ); } removeEventListener(id) { this.sdk.program.removeEventListener(id); } } var Region; (function (Region) { Region["Frankfurt"] = "fra"; Region["NY"] = "ny"; Region["Tokyo"] = "tokyo"; Region["Amsterdam"] = "ams"; Region["LosAngeles"] = "la"; })(Region || (Region = {})); const MPL_TOKEN_METADATA_PROGRAM_ID = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"; const GLOBAL_ACCOUNT_SEED = "global"; const MINT_AUTHORITY_SEED = "mint-authority"; const BONDING_CURVE_SEED = "bonding-curve"; const METADATA_SEED = "metadata"; const EVENT_AUTHORITY_SEED = "__event_authority"; const DEFAULT_DECIMALS = 6; const DEFAULT_COMMITMENT = "finalized"; const DEFAULT_FINALITY = "finalized"; const SLOT_ENDPOINT_BY_REGION = { [Region.Frankfurt]: "de1.0slot.trade", [Region.NY]: "ny1.0slot.trade", [Region.Tokyo]: "jp.0slot.trade", [Region.Amsterdam]: "ams1.0slot.trade", [Region.LosAngeles]: "la1.0slot.trade", }; const ASTRA_ENDPOINT_BY_REGION = { [Region.Frankfurt]: "fr.gateway.astralane.io", [Region.NY]: "ny.gateway.astralane.io", [Region.Tokyo]: "jp.gateway.astralane.io", [Region.Amsterdam]: "ams.gateway.astralane.io", }; const NODE1_ENDPOINT_BY_REGION = { [Region.NY]: "ny.node1.me", [Region.Tokyo]: "ny.node1.me", [Region.Amsterdam]: "ams.node1.me", [Region.Frankfurt]: "fra.node1.me", }; const NEXTBLOCK_ENDPOINT_BY_REGION = { [Region.Tokyo]: "tokyo.nextblock.io", [Region.Frankfurt]: "fra.nextblock.io", [Region.NY]: "ny.nextblock.io", }; const getHealthBody = JSON.stringify({ jsonrpc: "2.0", id: 1, method: "getHealth", }); class BondingCurveAccount { discriminator; virtualTokenReserves; virtualSolReserves; realTokenReserves; realSolReserves; tokenTotalSupply; complete; constructor( discriminator, virtualTokenReserves, virtualSolReserves, realTokenReserves, realSolReserves, tokenTotalSupply, complete ) { this.discriminator = discriminator; this.virtualTokenReserves = virtualTokenReserves; this.virtualSolReserves = virtualSolReserves; this.realTokenReserves = realTokenReserves; this.realSolReserves = realSolReserves; this.tokenTotalSupply = tokenTotalSupply; this.complete = complete; } getBuyPrice(amount) { if (this.complete) { throw new Error("Curve is complete"); } if (amount <= 0n) { return 0n; } // Calculate the product of virtual reserves let n = this.virtualSolReserves * this.virtualTokenReserves; // Calculate the new virtual sol reserves after the purchase let i = this.virtualSolReserves + amount; // Calculate the new virtual token reserves after the purchase let r = n / i + 1n; // Calculate the amount of tokens to be purchased let s = this.virtualTokenReserves - r; // Return the minimum of the calculated tokens and real token reserves return s < this.realTokenReserves ? s : this.realTokenReserves; } getSellPrice(amount, feeBasisPoints) { if (this.complete) { throw new Error("Curve is complet