From f20bdd490ab6a99a3233e786287dcc45d805f1ab Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Thu, 6 Aug 2026 05:22:30 +0200 Subject: [PATCH] Testing pump buy --- Cargo.lock | 594 ++++++++++----------------------------- Cargo.toml | 6 +- src/executor/pump_fun.rs | 93 ++++-- 3 files changed, 221 insertions(+), 472 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b00ced7..c7b394d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -106,229 +106,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "anchor-attribute-access-control" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc4b6b3c3f3e37a0b7d537e03a36bfb0415ee11b4443fa4190437cf26a874b6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-attribute-account" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e8b1468add67e6a69732883e58d23a18be51538994adaae69c9b3fe967e6be" -dependencies = [ - "anchor-syn", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-attribute-constant" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e1e3ade39ba05716ddc3b792859d838cccf43f5f4913ae8a163de7a2ed7f7e" -dependencies = [ - "anchor-syn", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-attribute-error" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e026f0ff09d740fd1821bbf97d9ac649c123ff92f04b9197b002494af4acf1" -dependencies = [ - "anchor-syn", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-attribute-event" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aafc8e26eb16a0c4129661f6857c42f301859fc2ee10f4e5287d571f0ea07f5" -dependencies = [ - "anchor-syn", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-attribute-program" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6844e657ffe049b073389efb843bb281d08579b8a47ef294365f729b35ed3dca" -dependencies = [ - "anchor-lang-idl", - "anchor-syn", - "anyhow", - "heck", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-derive-accounts" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c87a6769d7cf2deed8d3351d6d1d8aa05a3a07751f1418ab6b34aaa307bd34b" -dependencies = [ - "anchor-syn", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-derive-serde" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f014d99530ae48a81f710f150688c5c542fdeee3af8998010e147a64d7a697c" -dependencies = [ - "anchor-syn", - "proc-macro-crate 3.5.0", - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-derive-space" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ba30c2d844e7440c491ad5f3e25f93115c6c9319df480eda460ce96030832b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "anchor-lang" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa6708f356398752b8d7a08fb701c9c17395e103786fb1b33615a7267a6f4774" -dependencies = [ - "anchor-attribute-access-control", - "anchor-attribute-account", - "anchor-attribute-constant", - "anchor-attribute-error", - "anchor-attribute-event", - "anchor-attribute-program", - "anchor-derive-accounts", - "anchor-derive-serde", - "anchor-derive-space", - "anchor-lang-error", - "base64 0.21.7", - "bincode", - "borsh 1.8.0", - "bytemuck", - "const-crypto", - "solana-account-info", - "solana-clock", - "solana-cpi", - "solana-define-syscall 3.0.0", - "solana-feature-gate-interface", - "solana-instruction", - "solana-instructions-sysvar", - "solana-invoke", - "solana-loader-v3-interface", - "solana-msg", - "solana-program-entrypoint", - "solana-program-error", - "solana-program-memory", - "solana-program-option", - "solana-program-pack", - "solana-pubkey 3.0.0", - "solana-sdk-ids", - "solana-stake-interface", - "solana-system-interface 2.0.0", - "solana-sysvar 3.1.1", - "solana-sysvar-id", - "thiserror 1.0.69", -] - -[[package]] -name = "anchor-lang-error" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20760a8d5b7ddd1aea7a347c43c702ea4e962ccb7b9908c952e4b372b2d9e1f7" -dependencies = [ - "anchor-attribute-error", - "borsh 1.8.0", - "solana-msg", - "solana-program-error", - "solana-pubkey 3.0.0", -] - -[[package]] -name = "anchor-lang-idl" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47914b4290ae2bdf4ec203aa821e6eba86d7c78ef497918938038dcc6919f953" -dependencies = [ - "anchor-lang-idl-spec", - "anyhow", - "heck", - "serde", - "serde_json", - "sha2 0.10.9", -] - -[[package]] -name = "anchor-lang-idl-spec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838" -dependencies = [ - "anyhow", - "serde", -] - -[[package]] -name = "anchor-spl" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f698a45d424351ff695df413adcb3fa603f2c791a0b4a937ebcd2e93a052c77" -dependencies = [ - "anchor-lang", - "mpl-token-metadata", - "solana-sysvar 3.1.1", - "spl-associated-token-account-interface", - "spl-pod", - "spl-token-2022-interface", - "spl-token-group-interface", - "spl-token-interface", - "spl-token-metadata-interface", -] - -[[package]] -name = "anchor-syn" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f6c61ef5b47db60700087bb6e419284b3461ba8f59040e1f6827aa9e9a5bc4" -dependencies = [ - "anyhow", - "bs58", - "heck", - "proc-macro2", - "quote", - "serde", - "sha2 0.11.0", - "syn 2.0.119", - "thiserror 1.0.69", -] - [[package]] name = "anstream" version = "1.0.0" @@ -509,12 +286,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -584,40 +355,17 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "borsh" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" -dependencies = [ - "borsh-derive 0.10.4", - "hashbrown 0.13.2", -] - [[package]] name = "borsh" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" dependencies = [ - "borsh-derive 1.8.0", + "borsh-derive", "bytes", "cfg_aliases", ] -[[package]] -name = "borsh-derive" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", -] - [[package]] name = "borsh-derive" version = "1.8.0" @@ -625,34 +373,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8f347189c62a579b8cd5f80714efa178f52e461dc2e6d701d264f5ff22e566c" dependencies = [ "once_cell", - "proc-macro-crate 3.5.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.119", ] -[[package]] -name = "borsh-derive-internal" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "brotli" version = "8.0.4" @@ -864,16 +590,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "const-crypto" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c06f1eb05f06cf2e380fdded278fbf056a38974299d77960555a311dcf91a52" -dependencies = [ - "keccak-const", - "sha2-const-stable", -] - [[package]] name = "const-oid" version = "0.9.6" @@ -1260,7 +976,7 @@ dependencies = [ "ed25519", "rand_core 0.6.4", "serde", - "sha2 0.10.9", + "sha2", "subtle", "zeroize", ] @@ -1274,7 +990,7 @@ dependencies = [ "derivation-path", "ed25519-dalek", "hmac", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -1651,15 +1367,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -1672,15 +1379,6 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "hermit-abi" version = "0.5.2" @@ -2128,19 +1826,10 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2 0.10.9", + "sha2", "signature", ] -[[package]] -name = "kaigan" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f25ded719a2354f6b1a51d0c0741c25bc7afe038617664eb37f6418439eb084" -dependencies = [ - "borsh 0.10.4", -] - [[package]] name = "keccak" version = "0.1.6" @@ -2150,12 +1839,6 @@ dependencies = [ "cpufeatures 0.2.17", ] -[[package]] -name = "keccak-const" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d8d8ce877200136358e0bbff3a77965875db3af755a11e1fa6b1b3e2df13ea" - [[package]] name = "lazy_static" version = "1.5.0" @@ -2261,21 +1944,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "mpl-token-metadata" -version = "5.1.2-alpha.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9824d84a8e23b634256591ce2f05b3180f7be5fcd193d939c43764c804aac5ef" -dependencies = [ - "borsh 1.8.0", - "kaigan", - "num-derive 0.3.3", - "num-traits", - "solana-program", - "solana-program-error", - "thiserror 1.0.69", -] - [[package]] name = "native-tls" version = "0.2.18" @@ -2367,17 +2035,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -2455,7 +2112,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ - "proc-macro-crate 3.5.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.119", @@ -2672,15 +2329,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -2699,18 +2347,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "pump-rust-client" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b506959627ec272b37c54769180010d413df3a153f4adebda2879eea76e98345" -dependencies = [ - "anchor-lang", - "anchor-spl", - "fastrand", - "solana-program", -] - [[package]] name = "qstring" version = "0.7.2" @@ -3346,17 +2982,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sha2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.3", -] - [[package]] name = "sha2-const-stable" version = "0.1.0" @@ -3463,11 +3088,13 @@ dependencies = [ "env_logger", "futures-util", "log", - "pump-rust-client", "serde", "serde_json", "solana-client", + "solana-program 4.0.0", "solana-sdk", + "spl-associated-token-account", + "spl-token", "tokio", "tokio-tungstenite 0.30.0", "wincode 0.5.5", @@ -3594,7 +3221,7 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f08236dacd0e6dc8234becef58e27c8567856644ef509d7e97957d55a91dc72" dependencies = [ - "borsh 1.8.0", + "borsh", "bytemuck", "bytemuck_derive", "curve25519-dalek", @@ -3668,7 +3295,7 @@ version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c04abbae16f57178a163125805637b8a076175bb5c0002fb04f4792bea901cf7" dependencies = [ - "borsh 1.8.0", + "borsh", ] [[package]] @@ -3948,6 +3575,23 @@ dependencies = [ "thiserror 2.0.19", ] +[[package]] +name = "solana-example-mocks" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eb265ff95e28eceda117e2e3d2d2a611ecbbfe911dfeeeecd1521814540ffab" +dependencies = [ + "serde", + "serde_derive", + "solana-hash 4.2.0", + "solana-instruction", + "solana-nonce", + "solana-pubkey 4.1.0", + "solana-sdk-ids", + "solana-system-interface 3.1.0", + "thiserror 2.0.19", +] + [[package]] name = "solana-feature-gate-interface" version = "3.1.0" @@ -4003,7 +3647,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8064ea1d591ec791be95245058ca40f4f5345d390c200069d0f79bbf55bfae55" dependencies = [ - "borsh 1.8.0", + "borsh", "bytemuck", "bytemuck_derive", "five8", @@ -4031,7 +3675,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a97881335fc698deb46c6571945969aae6d93a14e2fff792a368b4fac872f116" dependencies = [ "bincode", - "borsh 1.8.0", + "borsh", "serde", "serde_derive", "solana-define-syscall 5.2.0", @@ -4069,19 +3713,6 @@ dependencies = [ "solana-sysvar-id", ] -[[package]] -name = "solana-invoke" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4065031f5c7dd29ef5f5003c1a353011eeabbafa6c5a5033da0cedbfca824b94" -dependencies = [ - "solana-account-info", - "solana-define-syscall 3.0.0", - "solana-instruction", - "solana-program-entrypoint", - "solana-stable-layout", -] - [[package]] name = "solana-keccak-hasher" version = "3.1.0" @@ -4137,7 +3768,6 @@ dependencies = [ "solana-instruction", "solana-pubkey 4.1.0", "solana-sdk-ids", - "solana-system-interface 3.1.0", ] [[package]] @@ -4363,7 +3993,7 @@ dependencies = [ "solana-epoch-rewards", "solana-epoch-schedule", "solana-epoch-stake", - "solana-example-mocks", + "solana-example-mocks 3.0.0", "solana-fee-calculator", "solana-hash 3.1.0", "solana-instruction", @@ -4393,6 +4023,53 @@ dependencies = [ "solana-sysvar-id", ] +[[package]] +name = "solana-program" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778f08fb0eaf52c9a3bef2978247f7fab0ccfddc44cfddb936d5ad9f98ede886" +dependencies = [ + "memoffset", + "solana-account-info", + "solana-big-mod-exp", + "solana-blake3-hasher", + "solana-borsh", + "solana-clock", + "solana-cpi", + "solana-define-syscall 5.2.0", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-epoch-stake", + "solana-example-mocks 4.0.0", + "solana-fee-calculator", + "solana-hash 4.2.0", + "solana-instruction", + "solana-instruction-error", + "solana-instructions-sysvar", + "solana-keccak-hasher", + "solana-last-restart-slot", + "solana-msg", + "solana-native-token", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-program-option", + "solana-program-pack", + "solana-pubkey 4.1.0", + "solana-rent 4.2.1", + "solana-sdk-ids", + "solana-secp256k1-recover", + "solana-serde-varint", + "solana-serialize-utils", + "solana-sha256-hasher", + "solana-short-vec", + "solana-slot-hashes", + "solana-slot-history", + "solana-stable-layout", + "solana-sysvar 4.0.0", + "solana-sysvar-id", +] + [[package]] name = "solana-program-entrypoint" version = "3.1.1" @@ -4411,7 +4088,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f04fa578707b3612b095f0c8e19b66a1233f7c42ca8082fcb3b745afcc0add6" dependencies = [ - "borsh 1.8.0", + "borsh", "serde", "serde_derive", ] @@ -4693,7 +4370,7 @@ dependencies = [ "solana-message 4.0.0", "solana-offchain-message", "solana-presigner", - "solana-program", + "solana-program 3.0.0", "solana-program-memory", "solana-pubkey 4.1.0", "solana-sanitize", @@ -4762,7 +4439,7 @@ checksum = "dc905b200a95f2ea9146e43f2a7181e3aeb55de6bc12afb36462d00a3c7310de" dependencies = [ "hmac", "pbkdf2", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -4800,7 +4477,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f" dependencies = [ - "sha2 0.10.9", + "sha2", "solana-define-syscall 4.0.1", "solana-hash 4.2.0", ] @@ -5040,6 +4717,8 @@ checksum = "1632b69b4f72489db5949a10e8308c229dfa003f99ecaa7477b376807c7b81f4" dependencies = [ "base64 0.22.1", "bincode", + "bytemuck", + "bytemuck_derive", "lazy_static", "serde", "serde_derive", @@ -5277,7 +4956,7 @@ checksum = "d444ce30b6b4f9c281ba06061ea96638d063b53c2171b1e41ba02ebff79ed28f" dependencies = [ "bincode", "cfg_eval", - "num-derive 0.4.2", + "num-derive", "num-traits", "serde", "serde_derive", @@ -5301,7 +4980,7 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd3183a7934dd7e6490ae86732616cd70361f5ab9401b9a375ab62f7fa17b112" dependencies = [ - "borsh 1.8.0", + "borsh", "bytemuck", "bytemuck_derive", ] @@ -5322,7 +5001,7 @@ dependencies = [ "itertools 0.12.1", "js-sys", "merlin", - "num-derive 0.4.2", + "num-derive", "num-traits", "rand 0.8.7", "serde", @@ -5353,12 +5032,39 @@ dependencies = [ "der", ] +[[package]] +name = "spl-associated-token-account" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0242277e290c023de8826f504abcf9206b3cd4e18d9ace4ec59a698b2828e88b" +dependencies = [ + "borsh", + "num-derive", + "num-traits", + "solana-account-info", + "solana-cpi", + "solana-instruction", + "solana-msg", + "solana-program-entrypoint", + "solana-program-error", + "solana-pubkey 3.0.0", + "solana-rent 3.1.0", + "solana-sdk-ids", + "solana-system-interface 2.0.0", + "solana-sysvar 3.1.1", + "spl-associated-token-account-interface", + "spl-token-2022-interface", + "spl-token-interface", + "thiserror 2.0.19", +] + [[package]] name = "spl-associated-token-account-interface" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6433917b60441d68d99a17e121d9db0ea15a9a69c0e5afa34649cf5ba12612f" dependencies = [ + "borsh", "solana-instruction", "solana-pubkey 3.0.0", ] @@ -5394,7 +5100,7 @@ checksum = "5d1dbc82ab91422345b6df40a79e2b78c7bce1ebb366da323572dd60b7076b67" dependencies = [ "proc-macro2", "quote", - "sha2 0.10.9", + "sha2", "syn 2.0.119", "thiserror 1.0.69", ] @@ -5415,10 +5121,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f9c6e142cdf1e7e77f480053ec9f0ce989890768ddf91f619b50f39d1b456f5" dependencies = [ - "borsh 1.8.0", + "borsh", "bytemuck", "bytemuck_derive", - "num-derive 0.4.2", + "num-derive", "num-traits", "num_enum", "solana-program-error", @@ -5429,6 +5135,34 @@ dependencies = [ "thiserror 2.0.19", ] +[[package]] +name = "spl-token" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878b0183d51fcd8a53e1604f4c13321894cf53227e6773c529b0d03d499a8dfd" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive", + "num-traits", + "num_enum", + "solana-account-info", + "solana-cpi", + "solana-instruction", + "solana-msg", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-program-option", + "solana-program-pack", + "solana-pubkey 3.0.0", + "solana-rent 3.1.0", + "solana-sdk-ids", + "solana-sysvar 3.1.1", + "spl-token-interface", + "thiserror 2.0.19", +] + [[package]] name = "spl-token-2022-interface" version = "2.1.0" @@ -5437,7 +5171,7 @@ checksum = "2fcd81188211f4b3c8a5eba7fd534c7142f9dd026123b3472492782cc72f4dc6" dependencies = [ "arrayref", "bytemuck", - "num-derive 0.4.2", + "num-derive", "num-traits", "num_enum", "solana-account-info", @@ -5495,7 +5229,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841cbd6f2322d02719be4da1affedbe6495b1048b7b985ec9796032564026e22" dependencies = [ "bytemuck", - "num-derive 0.4.2", + "num-derive", "num-traits", "num_enum", "solana-address 2.5.0", @@ -5515,7 +5249,7 @@ checksum = "8c564ac05a7c8d8b12e988a37d82695b5ba4db376d07ea98bc4882c81f96c7f3" dependencies = [ "arrayref", "bytemuck", - "num-derive 0.4.2", + "num-derive", "num-traits", "num_enum", "solana-instruction", @@ -5533,8 +5267,8 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c467c7c3bd056f8fe60119e7ec34ddd6f23052c2fa8f1f51999098063b72676" dependencies = [ - "borsh 1.8.0", - "num-derive 0.4.2", + "borsh", + "num-derive", "num-traits", "solana-borsh", "solana-instruction", @@ -5553,7 +5287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2504631748c48d2a937414d64a12dcac4588d34bd07d355d648619c189d29435" dependencies = [ "bytemuck", - "num-derive 0.4.2", + "num-derive", "num-traits", "num_enum", "solana-account-info", @@ -5581,17 +5315,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.119" @@ -5845,15 +5568,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml_datetime" version = "1.1.1+spec-1.1.0" @@ -6009,12 +5723,6 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-segmentation" -version = "1.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" - [[package]] name = "unicode-width" version = "0.2.2" diff --git a/Cargo.toml b/Cargo.toml index 841c447..64c5c72 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,9 +11,13 @@ serde = { version = "1.0.229", features = ["derive", "serde_derive"] } serde_json = "1.0.151" wincode = "=0.5.5" + solana-client = "=4.0.0" solana-sdk = "=4.0.0" -pump-rust-client = { version = "0.1.9", default-features = false } +solana-program = "=4.0.0" + +spl-token = "=9.0.0" +spl-associated-token-account = "=8.0.0" tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread"] } tokio-tungstenite = { version = "0.30.0", features = ["native-tls"] } diff --git a/src/executor/pump_fun.rs b/src/executor/pump_fun.rs index 4037fe9..fe15774 100644 --- a/src/executor/pump_fun.rs +++ b/src/executor/pump_fun.rs @@ -1,40 +1,77 @@ -use pump_rust_client::{ - AccountWrapper, PumpSdk, pump::pump::accounts::BondingCurve, state::Global, +use solana_sdk::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, }; +use std::str::FromStr; -use crate::executor::Executor; +pub mod system_program { + use solana_sdk::declare_id; -pub const PROGRAM_ID: &str = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; - -pub struct PumpFun { - pub private_key: String, - pub sdk: PumpSdk, - - pub global: Global, + declare_id!("11111111111111111111111111111111"); } -impl Executor for PumpFun { - async fn buy(&self, token: solana_sdk::pubkey::Pubkey, amount: u64) -> anyhow::Result<()> { - log::info!("Buying {token}"); +/// Derives the bonding curve and associated bonding curve tokens for a given mint. +pub fn derive_bonding_curve_pdas(mint: &Pubkey, program_id: &Pubkey) -> (Pubkey, Pubkey) { + let (bonding_curve, _) = + Pubkey::find_program_address(&[b"bonding-curve", mint.as_ref()], program_id); - // let bonding_curve: AccountWrapper = _; + let (associated_bonding_curve, _) = Pubkey::find_program_address( + &[ + bonding_curve.as_ref(), + spl_token::ID.as_ref(), + mint.as_ref(), + ], + &spl_associated_token_account::ID, + ); - // self.sdk.buy_v2_instructions( - // &self.global, - // &bonding_curve, - // token, - // quote_token_program, - // user, - // amount, - // max_quote_tokens, - // ); + (bonding_curve, associated_bonding_curve) +} - Ok(()) - } +/// Constructs a raw pump.fun buy instruction +pub fn create_pump_buy_instruction( + payer: Pubkey, + mint: Pubkey, + ata_token_account: Pubkey, // User's associated token account for this mint + token_amount: u64, // Amount of tokens to purchase + max_sol_cost: u64, // Max lamports to spend (Slippage protection) +) -> Instruction { + let program_id = Pubkey::from_str("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5AMX787Nz").unwrap(); - async fn sell(&self, token: solana_sdk::pubkey::Pubkey, amount: u64) -> anyhow::Result<()> { - log::info!("Selling {token}"); + // Constant global state accounts used by pump.fun + let global_account = Pubkey::from_str("4wTV1YmiEkRvAtN4S7mJP2bXax2p18e4LK8LCHWwEQ2F").unwrap(); + let fee_recipient = Pubkey::from_str("CebN5WG3QfR6EPEDZgbu6wN6sfg92v7S759DcGTR8b61").unwrap(); - Ok(()) + // Derive the PDAs for the bonding curves + let (bonding_curve, associated_bonding_curve) = derive_bonding_curve_pdas(&mint, &program_id); + + // 1. Build the data payload (Discriminator + Args) + // Anchor discriminator for 'buy': [102, 139, 25, 211, 85, 210, 149, 228] + let mut instruction_data = vec![102, 139, 25, 211, 85, 210, 149, 228]; + instruction_data.extend_from_slice(&token_amount.to_le_bytes()); + instruction_data.extend_from_slice(&max_sol_cost.to_le_bytes()); + + // 2. Map required accounts in correct order + let accounts = vec![ + AccountMeta::new_readonly(global_account, false), + AccountMeta::new(fee_recipient, false), + AccountMeta::new_readonly(mint, false), + AccountMeta::new(bonding_curve, false), + AccountMeta::new(associated_bonding_curve, false), + AccountMeta::new(ata_token_account, false), + AccountMeta::new(payer, true), // Signer + AccountMeta::new_readonly(system_program::ID, false), + AccountMeta::new_readonly(spl_token::ID, false), + AccountMeta::new_readonly(solana_program::sysvar::rent::ID, false), + AccountMeta::new_readonly( + Pubkey::from_str("Ce6TQqeHC9p8KBAayQr27Pyy6wJaCdE7wXw8msu3vA8Q").unwrap(), + false, + ), // Event Authority + AccountMeta::new_readonly(program_id, false), + ]; + + Instruction { + program_id, + accounts, + data: instruction_data, } }