From 04a2a75eba0a0144bff4e4228ad638e653385ff7 Mon Sep 17 00:00:00 2001 From: KellianDev Date: Tue, 3 Dec 2024 08:15:46 +0400 Subject: [PATCH 1/5] add soon program ids --- Cargo.lock | 437 +++++++++--------- Cargo.toml | 1 + client/src/instructions/amm_instructions.rs | 7 +- programs/amm/Cargo.toml | 2 +- .../amm/src/instructions/open_position.rs | 15 +- .../amm/src/instructions/open_position_v2.rs | 8 +- programs/amm/src/lib.rs | 24 +- 7 files changed, 256 insertions(+), 238 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5c4e6d0..058d682a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,8 +123,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5f619f1d04f53621925ba8a2e633ba5a6081f2ae14758cbb67f38fd823e0a3e" dependencies = [ "anchor-syn", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -135,9 +135,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f2a3e1df4685f18d12a943a9f2a7456305401af21a07c9fe076ef9ecd6e400" dependencies = [ "anchor-syn", - "bs58 0.5.0", - "proc-macro2 1.0.69", - "quote 1.0.33", + "bs58 0.5.1", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -148,7 +148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9423945cb55627f0b30903288e78baf6f62c6c8ab28fb344b6b25f1ffee3dca7" dependencies = [ "anchor-syn", - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -159,7 +159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93ed12720033cc3c3bf3cfa293349c2275cd5ab99936e33dd4bf283aaad3e241" dependencies = [ "anchor-syn", - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -170,8 +170,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eef4dc0371eba2d8c8b54794b0b0eb786a234a559b77593d6f80825b6d2c77a2" dependencies = [ "anchor-syn", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -182,7 +182,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b18c4f191331e078d4a6a080954d1576241c29c56638783322a18d308ab27e4f" dependencies = [ "anchor-syn", - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -212,7 +212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5de10d6e9620d3bcea56c56151cad83c5992f50d5960b3a9bebc4a50390ddc3c" dependencies = [ "anchor-syn", - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -224,8 +224,8 @@ checksum = "f4e2e5be518ec6053d90a2a7f26843dbee607583c779e6c8395951b9739bdfbe" dependencies = [ "anchor-syn", "borsh-derive-internal 0.10.3", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -235,8 +235,8 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ecc31d19fa54840e74b7a979d44bcea49d70459de846088a1d71e87ba53c419" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -286,10 +286,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9101b84702fed2ea57bd22992f75065da5648017135b844283a2f6d74f27825" dependencies = [ "anyhow", - "bs58 0.5.0", + "bs58 0.5.1", "heck 0.3.3", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde", "serde_json", "sha2 0.10.8", @@ -416,7 +416,7 @@ dependencies = [ "derivative", "digest 0.10.7", "itertools", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "paste", "rustc_version", @@ -429,7 +429,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -439,10 +439,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -468,7 +468,7 @@ dependencies = [ "ark-serialize-derive", "ark-std", "digest 0.10.7", - "num-bigint 0.4.4", + "num-bigint 0.4.6", ] [[package]] @@ -477,8 +477,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -538,8 +538,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", "synstructure", ] @@ -550,8 +550,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -601,9 +601,9 @@ version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -694,9 +694,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitmaps" @@ -709,9 +709,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.0" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" dependencies = [ "arrayref", "arrayvec", @@ -775,7 +775,7 @@ dependencies = [ "borsh-derive-internal 0.9.3", "borsh-schema-derive-internal 0.9.3", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.69", + "proc-macro2 1.0.92", "syn 1.0.109", ] @@ -788,7 +788,7 @@ dependencies = [ "borsh-derive-internal 0.10.3", "borsh-schema-derive-internal 0.10.3", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.69", + "proc-macro2 1.0.92", "syn 1.0.109", ] @@ -798,8 +798,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -809,8 +809,8 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -820,8 +820,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -831,8 +831,8 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -865,9 +865,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bs58" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ "tinyvec", ] @@ -899,13 +899,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.5.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -953,12 +953,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -1060,9 +1061,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -1089,7 +1090,7 @@ dependencies = [ "anyhow", "arrayref", "bincode", - "bs58 0.5.0", + "bs58 0.5.1", "clap 4.4.7", "colorful", "configparser", @@ -1192,9 +1193,9 @@ checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation" @@ -1340,10 +1341,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "strsim 0.10.0", - "syn 2.0.38", + "syn 2.0.90", ] [[package]] @@ -1353,8 +1354,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", - "quote 1.0.33", - "syn 2.0.38", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -1392,7 +1393,7 @@ dependencies = [ "asn1-rs", "displaydoc", "nom", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", "rusticata-macros", ] @@ -1418,8 +1419,8 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -1491,9 +1492,9 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -1567,8 +1568,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -1608,9 +1609,9 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -1619,11 +1620,11 @@ version = "3.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" dependencies = [ - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-traits", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -1774,9 +1775,9 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -2210,19 +2211,20 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -2334,9 +2336,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" @@ -2460,8 +2462,8 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -2523,7 +2525,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12989bc45715b0ee91944855130131479f9c772e198a910c3eb0ea327d5bffc3" dependencies = [ - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -2533,7 +2535,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a739019e11d93661a64ef5fe108ab17c79b35961e944442ff6efdd460ad01a" dependencies = [ - "quote 1.0.33", + "quote 1.0.37", "syn 1.0.109", ] @@ -2598,11 +2600,10 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -2629,8 +2630,8 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -2640,18 +2641,17 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] @@ -2680,9 +2680,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -2732,8 +2732,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -2744,9 +2744,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -2756,9 +2756,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -2846,8 +2846,8 @@ checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -2937,9 +2937,9 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -3039,8 +3039,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", "version_check", ] @@ -3051,8 +3051,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "version_check", ] @@ -3067,9 +3067,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -3082,7 +3082,7 @@ checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.0", + "bitflags 2.6.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -3182,11 +3182,11 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "proc-macro2 1.0.69", + "proc-macro2 1.0.92", ] [[package]] @@ -3543,7 +3543,7 @@ version = "0.38.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -3607,9 +3607,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rusty-fork" @@ -3668,9 +3668,9 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -3714,31 +3714,31 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.190" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.12" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -3781,9 +3781,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -3871,8 +3871,8 @@ version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63927d22a1e8b74bda98cc6e151fcdf178b7abb0dc6c4f81e0bbf5ffe2fc4ec8" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "shank_macro_impl", "syn 1.0.109", ] @@ -3884,8 +3884,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce03403df682f80f4dc1efafa87a4d0cb89b03726d0565e6364bdca5b9a441" dependencies = [ "anyhow", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "serde", "syn 1.0.109", ] @@ -3905,6 +3905,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -4272,10 +4278,10 @@ version = "1.16.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bced1b3c0421605312fd7eae7ceb6850d3b1d2e939da349c928e6d46a945c829" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "rustc_version", - "syn 2.0.38", + "syn 2.0.90", ] [[package]] @@ -4408,7 +4414,7 @@ dependencies = [ "libsecp256k1", "log", "memoffset 0.9.0", - "num-bigint 0.4.4", + "num-bigint 0.4.6", "num-derive 0.3.3", "num-traits", "parking_lot", @@ -4758,10 +4764,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1fae2d1f62d655f88280a39711db401973d1bbe54fec9f795be80b9d76837ae" dependencies = [ "bs58 0.4.0", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "rustversion", - "syn 2.0.38", + "syn 2.0.90", ] [[package]] @@ -5085,9 +5091,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" dependencies = [ - "quote 1.0.33", + "quote 1.0.37", "spl-discriminator-syn", - "syn 2.0.38", + "syn 2.0.90", ] [[package]] @@ -5096,10 +5102,10 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e5f2044ca42c8938d54d1255ce599c79a1ffd86b677dfab695caa20f9ffc3f2" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "sha2 0.10.8", - "syn 2.0.38", + "syn 2.0.90", "thiserror", ] @@ -5153,10 +5159,10 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5269c8e868da17b6552ef35a51355a017bd8e0eae269c201fef830d35fa52c" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "sha2 0.10.8", - "syn 2.0.38", + "syn 2.0.90", ] [[package]] @@ -5345,8 +5351,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "rustversion", "syn 1.0.109", ] @@ -5380,19 +5386,19 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.38" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "unicode-ident", ] @@ -5402,8 +5408,8 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", "unicode-xid 0.2.4", ] @@ -5470,8 +5476,8 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", + "proc-macro2 1.0.92", + "quote 1.0.37", "syn 1.0.109", ] @@ -5514,22 +5520,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -5632,9 +5638,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -5741,9 +5747,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -5781,9 +5787,9 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] @@ -6052,26 +6058,27 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", "wasm-bindgen-shared", ] @@ -6089,32 +6096,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ - "quote 1.0.33", + "quote 1.0.37", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "web-sys" @@ -6408,9 +6415,9 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 2.0.38", + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 73403210..9f72a6b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ opt-level = 0 [profile.release] lto = "fat" codegen-units = 1 +overflow-checks = true [profile.release.build-override] opt-level = 3 diff --git a/client/src/instructions/amm_instructions.rs b/client/src/instructions/amm_instructions.rs index f5082626..7ba7a7d5 100644 --- a/client/src/instructions/amm_instructions.rs +++ b/client/src/instructions/amm_instructions.rs @@ -2,6 +2,7 @@ use anchor_client::{Client, Cluster}; use anchor_lang::prelude::AccountMeta; use anyhow::Result; use mpl_token_metadata::state::PREFIX as MPL_PREFIX; +use raydium_amm_v3::soon_metadata_program; use solana_sdk::{ instruction::Instruction, pubkey::Pubkey, signature::Signer, system_program, sysvar, }; @@ -224,10 +225,10 @@ pub fn open_position_instr( let (metadata_account_key, _bump) = Pubkey::find_program_address( &[ MPL_PREFIX.as_bytes(), - mpl_token_metadata::id().to_bytes().as_ref(), + soon_metadata_program::id().to_bytes().as_ref(), nft_mint_key.to_bytes().as_ref(), ], - &mpl_token_metadata::id(), + &soon_metadata_program::id(), ); let (protocol_position_key, __bump) = Pubkey::find_program_address( &[ @@ -279,7 +280,7 @@ pub fn open_position_instr( system_program: system_program::id(), token_program: spl_token::id(), associated_token_program: spl_associated_token_account::id(), - metadata_program: mpl_token_metadata::id(), + metadata_program: soon_metadata_program::id(), token_program_2022: spl_token_2022::id(), vault_0_mint: token_mint_0, vault_1_mint: token_mint_1, diff --git a/programs/amm/Cargo.toml b/programs/amm/Cargo.toml index 16f0ebcf..2d6ba166 100644 --- a/programs/amm/Cargo.toml +++ b/programs/amm/Cargo.toml @@ -19,7 +19,7 @@ client = [] no-log-ix-name = [] init_if_needed = [] enable-log = [] -devnet = [] +testnet = [] paramset = [] [dependencies] diff --git a/programs/amm/src/instructions/open_position.rs b/programs/amm/src/instructions/open_position.rs index ea8b875d..8a00c2dc 100644 --- a/programs/amm/src/instructions/open_position.rs +++ b/programs/amm/src/instructions/open_position.rs @@ -1,13 +1,13 @@ use crate::error::ErrorCode; use crate::libraries::liquidity_math; use crate::libraries::tick_math; +use crate::soon_metadata_program; use crate::states::*; use crate::util::*; use anchor_lang::prelude::*; use anchor_lang::solana_program; use anchor_lang::system_program::{transfer, Transfer}; use anchor_spl::associated_token::AssociatedToken; -use anchor_spl::metadata::Metadata; use anchor_spl::token::{Mint, Token, TokenAccount}; use anchor_spl::token_2022::spl_token_2022::extension::{ BaseStateWithExtensions, StateWithExtensions, @@ -152,8 +152,9 @@ pub struct OpenPosition<'info> { pub associated_token_program: Program<'info, AssociatedToken>, /// Program to create NFT metadata - /// CHECK: Metadata program address constraint applied - pub metadata_program: Program<'info, Metadata>, + /// CHECK: Address checked already + #[account(address = soon_metadata_program::id())] + pub metadata_program: UncheckedAccount<'info>, // remaining account // #[account( // seeds = [ @@ -235,7 +236,7 @@ pub fn open_position<'a, 'b, 'c: 'info, 'info>( system_program: &'b Program<'info, System>, token_program: &'b Program<'info, Token>, _associated_token_program: &'b Program<'info, AssociatedToken>, - metadata_program: Option<&'b Program<'info, Metadata>>, + metadata_program: Option<&'b UncheckedAccount<'info>>, token_program_2022: Option<&'b Program<'info, Token2022>>, vault_0_mint: Option>>, vault_1_mint: Option>>, @@ -733,7 +734,7 @@ fn mint_nft_and_remove_mint_authority<'info>( position_nft_mint: &AccountInfo<'info>, position_nft_account: &AccountInfo<'info>, metadata_account: Option<&UncheckedAccount<'info>>, - metadata_program: Option<&Program<'info, Metadata>>, + metadata_program: Option<&UncheckedAccount<'info>>, token_program: &Program<'info, Token>, token_program_2022: Option<&Program<'info, Token2022>>, system_program: &Program<'info, System>, @@ -827,7 +828,7 @@ fn initialize_metadata_account<'info>( authority: &AccountInfo<'info>, position_nft_mint: &AccountInfo<'info>, metadata_account: &UncheckedAccount<'info>, - metadata_program: &Program<'info, Metadata>, + metadata_program: &UncheckedAccount<'info>, system_program: &Program<'info, System>, rent: &Sysvar<'info, Rent>, name: String, @@ -898,7 +899,7 @@ pub fn initialize_token_metadata_extension<'info>( .try_get_new_account_len::(&metadata)?; let new_rent_exempt_lamports = Rent::get()?.minimum_balance(new_account_len); let additional_lamports = new_rent_exempt_lamports.saturating_sub(position_nft_mint.lamports()); - // CPI call will borrow the account data + drop(mint_data); let cpi_context = CpiContext::new( diff --git a/programs/amm/src/instructions/open_position_v2.rs b/programs/amm/src/instructions/open_position_v2.rs index 6d3e67a0..884ec29c 100644 --- a/programs/amm/src/instructions/open_position_v2.rs +++ b/programs/amm/src/instructions/open_position_v2.rs @@ -1,8 +1,7 @@ use super::open_position::open_position; -use crate::states::*; +use crate::{soon_metadata_program, states::*}; use anchor_lang::prelude::*; use anchor_spl::associated_token::AssociatedToken; -use anchor_spl::metadata::Metadata; use anchor_spl::token::{self, Token}; use anchor_spl::token_interface::{Mint, Token2022, TokenAccount}; #[derive(Accounts)] @@ -131,8 +130,9 @@ pub struct OpenPositionV2<'info> { pub associated_token_program: Program<'info, AssociatedToken>, /// Program to create NFT metadata - /// CHECK: Metadata program address constraint applied - pub metadata_program: Program<'info, Metadata>, + /// CHECK: Address checked already + #[account(address = soon_metadata_program::id())] + pub metadata_program: UncheckedAccount<'info>, /// Program to create mint account and mint tokens pub token_program_2022: Program<'info, Token2022>, /// The mint of token vault 0 diff --git a/programs/amm/src/lib.rs b/programs/amm/src/lib.rs index e83462ce..33b2b9e0 100644 --- a/programs/amm/src/lib.rs +++ b/programs/amm/src/lib.rs @@ -20,17 +20,25 @@ solana_security_txt::security_txt! { auditors: "https://github.com/raydium-io/raydium-docs/blob/master/audit/OtterSec%20Q3%202022/Raydium%20concentrated%20liquidity%20(CLMM)%20program.pdf" } -#[cfg(feature = "devnet")] -declare_id!("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"); -#[cfg(not(feature = "devnet"))] -declare_id!("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"); +#[cfg(feature = "testnet")] +declare_id!("3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK"); +#[cfg(not(feature = "testnet"))] +declare_id!("3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK"); pub mod admin { use anchor_lang::prelude::declare_id; - #[cfg(feature = "devnet")] - declare_id!("adMCyoCgfkg7bQiJ9aBJ59H3BXLY3r5LNLfPpQfMzBe"); - #[cfg(not(feature = "devnet"))] - declare_id!("GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ"); + #[cfg(feature = "testnet")] + declare_id!("46fs388TMKGQbY5ycGpoq3jsyxe7iejbSNVs1GpLcsM5"); + #[cfg(not(feature = "testnet"))] + declare_id!("46fs388TMKGQbY5ycGpoq3jsyxe7iejbSNVs1GpLcsM5"); +} + +pub mod soon_metadata_program { + use anchor_lang::prelude::declare_id; + #[cfg(feature = "testnet")] + declare_id!("6C4GR9AtMGF25sjXKtdB7A6NVQUudEQWw97kG61pGuA1"); + #[cfg(not(feature = "testnet"))] + declare_id!("6C4GR9AtMGF25sjXKtdB7A6NVQUudEQWw97kG61pGuA1"); } #[program] From b8421e9c248603ca60a743cb278b61d748dc01ff Mon Sep 17 00:00:00 2001 From: KellianDev Date: Tue, 3 Dec 2024 08:21:30 +0400 Subject: [PATCH 2/5] change program id in anchor.toml --- Anchor.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Anchor.toml b/Anchor.toml index ca31f990..d9adc44d 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -4,7 +4,7 @@ anchor_version = "0.29" seeds = false [programs.localnet] -amm_v3 = "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK" +amm_v3 = "3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK" [registry] url = "https://github.com/raydium-io/raydium-amm-v3" From 1fbe3145117fa39d1b79fdd4d1a89bc571559bc6 Mon Sep 17 00:00:00 2001 From: KellianDev Date: Tue, 3 Dec 2024 12:18:33 +0400 Subject: [PATCH 3/5] fix program id --- Anchor.toml | 2 +- programs/amm/src/lib.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Anchor.toml b/Anchor.toml index d9adc44d..c8703c74 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -4,7 +4,7 @@ anchor_version = "0.29" seeds = false [programs.localnet] -amm_v3 = "3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK" +amm_v3 = "8ZyF28dyVvevYtdDUSRQGgbHtMV8cYZw53oY4c4ZvkgJ" [registry] url = "https://github.com/raydium-io/raydium-amm-v3" diff --git a/programs/amm/src/lib.rs b/programs/amm/src/lib.rs index 33b2b9e0..ba84b5ea 100644 --- a/programs/amm/src/lib.rs +++ b/programs/amm/src/lib.rs @@ -21,9 +21,9 @@ solana_security_txt::security_txt! { } #[cfg(feature = "testnet")] -declare_id!("3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK"); +declare_id!("8ZyF28dyVvevYtdDUSRQGgbHtMV8cYZw53oY4c4ZvkgJ"); #[cfg(not(feature = "testnet"))] -declare_id!("3RSWhwCHPj4cxRm3SPBwmzuJAXVWt1YHBfYr7MgP2jxK"); +declare_id!("8ZyF28dyVvevYtdDUSRQGgbHtMV8cYZw53oY4c4ZvkgJ"); pub mod admin { use anchor_lang::prelude::declare_id; From 506728a2f78620b090bf7d81fc5fffed46671dcf Mon Sep 17 00:00:00 2001 From: KellianDev Date: Wed, 4 Dec 2024 15:39:42 +0400 Subject: [PATCH 4/5] fix --- .gitignore | 3 ++- client_config.ini | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 6196784a..52648028 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ yarn.lock Makefile sdk/node_modules sdk/tools -programs/amm/proptest-regressions \ No newline at end of file +programs/amm/proptest-regressions +clmm-client \ No newline at end of file diff --git a/client_config.ini b/client_config.ini index 9a4d6338..357a3ae9 100644 --- a/client_config.ini +++ b/client_config.ini @@ -1,14 +1,14 @@ [Global] -http_url = https://api.devnet.solana.com -ws_url = wss://api.devnet.solana.com/ -payer_path = id.json -admin_path = adMCyoCgfkg7bQiJ9aBJ59H3BXLY3r5LNLfPpQfMzBe.json -raydium_v3_program = devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH -slippage = 0.01 +http_url = https://rpc.testnet.soo.network/rpc +ws_url = wss://rpc.testnet.soo.network/rpc +payer_path = /Users/developer/.config/solana/id.json +admin_path = /Users/developer/.config/solana/id.json +raydium_v3_program = 8ZyF28dyVvevYtdDUSRQGgbHtMV8cYZw53oY4c4ZvkgJ +slippage = 1.00 [Pool] -mint0 = 2SiSpNowr7zUv5ZJHuzHszskQNaskWsNukhivCtuVLHo -mint1 = GfmdKWR1KrttDsQkJfwtXovZw9bUBHYkPAEwB6wZqQvJ +mint0 = a2Gt18uJC8puJT9JRYQLU6rPi6okxQb4WqCjwtYshZB +mint1 = bXSKiFqYrALF9gJy1KqHm8tv4QXk8nCgbLN8WRsGEbh # fee: 0.05% ==》 tick_spacing: 10 # fee: 0.30% ==》 tick_spacing: 60 # fee: 1.00% ==》 tick_spacing: 200 @@ -16,4 +16,4 @@ mint1 = GfmdKWR1KrttDsQkJfwtXovZw9bUBHYkPAEwB6wZqQvJ # fee: 1 / 10000 ==》 tick_spacing: 10 # fee: 25 / 10000 ==》 tick_spacing: 60 # protocol_fee: 12 / 100 -amm_config_index = 1 \ No newline at end of file +amm_config_index = 0 \ No newline at end of file From 79607b715964bed24c4dbe15ea825c5dba0b4230 Mon Sep 17 00:00:00 2001 From: ilyxabatko Date: Wed, 11 Dec 2024 15:41:14 +0400 Subject: [PATCH 5/5] feat: event_cpi for swap ixs (to be tested) --- Anchor.toml | 3 +- Cargo.lock | 33 ++++- client/src/instructions/amm_instructions.rs | 6 + client/src/main.rs | 16 +++ programs/amm/Cargo.toml | 4 +- programs/amm/src/instructions/swap.rs | 101 +++++++-------- .../src/instructions/swap_router_base_in.rs | 51 ++++---- programs/amm/src/instructions/swap_v2.rs | 117 +++++++++--------- 8 files changed, 187 insertions(+), 144 deletions(-) diff --git a/Anchor.toml b/Anchor.toml index c8703c74..f72568ac 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -1,4 +1,5 @@ -anchor_version = "0.29" +[toolchain] +anchor_version = "0.29.0" [features] seeds = false diff --git a/Cargo.lock b/Cargo.lock index 058d682a..7491c3b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,14 +76,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "72832d73be48bac96a5d7944568f305d829ed55b0ce3b483647089dfaf6cf704" dependencies = [ "cfg-if", "getrandom 0.2.10", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -255,6 +256,7 @@ dependencies = [ "anchor-derive-accounts", "anchor-derive-serde", "anchor-derive-space", + "anchor-syn", "arrayref", "base64 0.13.1", "bincode", @@ -1926,7 +1928,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.4", ] [[package]] @@ -3282,6 +3284,7 @@ dependencies = [ name = "raydium-amm-v3" version = "0.1.0" dependencies = [ + "ahash 0.8.4", "anchor-lang", "anchor-spl", "arrayref", @@ -4245,7 +4248,7 @@ version = "1.16.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a63aebf4beac713a1949216ae180355c044df9cc3db9a58ca153bb10bb5843b" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.4", "blake3", "block-buffer 0.10.4", "bs58 0.4.0", @@ -4361,7 +4364,7 @@ version = "1.16.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b03a0782c2b62c476c3fafd4e002ad8d91a2e36ca952df8e965d81dbf1dc158d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.4", "bincode", "bv", "caps", @@ -6400,6 +6403,26 @@ dependencies = [ "time", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2 1.0.92", + "quote 1.0.37", + "syn 2.0.90", +] + [[package]] name = "zeroize" version = "1.3.0" diff --git a/client/src/instructions/amm_instructions.rs b/client/src/instructions/amm_instructions.rs index 7ba7a7d5..46ee7d8d 100644 --- a/client/src/instructions/amm_instructions.rs +++ b/client/src/instructions/amm_instructions.rs @@ -512,6 +512,7 @@ pub fn swap_instr( user_input_token: Pubkey, user_out_put_token: Pubkey, tick_array: Pubkey, + event_authority: Pubkey, remaining_accounts: Vec, amount: u64, other_amount_threshold: u64, @@ -536,6 +537,8 @@ pub fn swap_instr( tick_array, observation_state, token_program: spl_token::id(), + event_authority, + program: program.id(), }) .accounts(remaining_accounts) .args(raydium_instruction::Swap { @@ -559,6 +562,7 @@ pub fn swap_v2_instr( user_out_put_token: Pubkey, input_vault_mint: Pubkey, output_vault_mint: Pubkey, + event_authority: Pubkey, remaining_accounts: Vec, amount: u64, other_amount_threshold: u64, @@ -586,6 +590,8 @@ pub fn swap_v2_instr( memo_program: spl_memo::id(), input_vault_mint, output_vault_mint, + event_authority, + program: program.id(), }) .accounts(remaining_accounts) .args(raydium_instruction::SwapV2 { diff --git a/client/src/main.rs b/client/src/main.rs index 98245504..f992f899 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -1669,6 +1669,13 @@ fn main() -> Result<()> { let mut instructions = Vec::new(); let request_inits_instr = ComputeBudgetInstruction::set_compute_unit_limit(1400_000u32); instructions.push(request_inits_instr); + + let event_authority = Pubkey::find_program_address( + &["__event_authority".as_bytes()], + &pool_config.raydium_v3_program, + ) + .0; + let swap_instr = swap_instr( &pool_config.clone(), pool_state.amm_config, @@ -1687,6 +1694,7 @@ fn main() -> Result<()> { input_token, output_token, current_or_next_tick_array_key, + event_authority, remaining_accounts, amount, other_amount_threshold, @@ -1847,6 +1855,13 @@ fn main() -> Result<()> { let mut instructions = Vec::new(); let request_inits_instr = ComputeBudgetInstruction::set_compute_unit_limit(1400_000u32); instructions.push(request_inits_instr); + + let event_authority = Pubkey::find_program_address( + &["__event_authority".as_bytes()], + &pool_config.raydium_v3_program, + ) + .0; + let swap_instr = swap_v2_instr( &pool_config.clone(), pool_state.amm_config, @@ -1874,6 +1889,7 @@ fn main() -> Result<()> { } else { pool_state.token_mint_0 }, + event_authority, remaining_accounts, amount, other_amount_threshold, diff --git a/programs/amm/Cargo.toml b/programs/amm/Cargo.toml index 2d6ba166..3552736d 100644 --- a/programs/amm/Cargo.toml +++ b/programs/amm/Cargo.toml @@ -21,12 +21,14 @@ init_if_needed = [] enable-log = [] testnet = [] paramset = [] +idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] [dependencies] -anchor-lang = { version = "0.29.0", features = ["init-if-needed"] } +anchor-lang = { version = "0.29.0", features = ["init-if-needed", "event-cpi"] } anchor-spl = { version = "0.29.0", features = ["metadata"] } solana-program = "<1.17.0" spl-memo = "4.0.0" +ahash = "=0.8.4" uint = { git = "https://github.com/raydium-io/parity-common", package = "uint" } mpl-token-metadata = { version = "^1.11.0", features = ["no-entrypoint"] } spl-token-metadata-interface = { version = "=0.2.0" } diff --git a/programs/amm/src/instructions/swap.rs b/programs/amm/src/instructions/swap.rs index 2cd09566..4126451b 100644 --- a/programs/amm/src/instructions/swap.rs +++ b/programs/amm/src/instructions/swap.rs @@ -12,6 +12,7 @@ use std::collections::VecDeque; use std::convert::identity; use std::ops::{Deref, Neg}; +#[event_cpi] #[derive(Accounts)] pub struct SwapSingle<'info> { /// The user performing the swap @@ -550,8 +551,8 @@ pub fn swap_internal<'b, 'info>( /// Performs a single exact input/output swap /// if is_base_input = true, return vaule is the max_amount_out, otherwise is min_amount_in pub fn exact_internal<'b, 'c: 'info, 'info>( - ctx: &mut SwapAccounts<'b, 'info>, - remaining_accounts: &'c [AccountInfo<'info>], + // ctx: &mut SwapAccounts<'b, 'info>, + ctx: Context<'_, 'b, 'c, 'info, SwapSingle>, amount_specified: u64, sqrt_price_limit_x64: u128, is_base_input: bool, @@ -563,33 +564,33 @@ pub fn exact_internal<'b, 'c: 'info, 'info>( let zero_for_one; let swap_price_before; - let input_balance_before = ctx.input_vault.amount; - let output_balance_before = ctx.output_vault.amount; + let input_balance_before = ctx.accounts.input_vault.amount; + let output_balance_before = ctx.accounts.output_vault.amount; { - swap_price_before = ctx.pool_state.load()?.sqrt_price_x64; - let pool_state = &mut ctx.pool_state.load_mut()?; - zero_for_one = ctx.input_vault.mint == pool_state.token_mint_0; + swap_price_before = ctx.accounts.pool_state.load()?.sqrt_price_x64; + let pool_state = &mut ctx.accounts.pool_state.load_mut()?; + zero_for_one = ctx.accounts.input_vault.mint == pool_state.token_mint_0; require_gt!(block_timestamp, pool_state.open_time); require!( if zero_for_one { - ctx.input_vault.key() == pool_state.token_vault_0 - && ctx.output_vault.key() == pool_state.token_vault_1 + ctx.accounts.input_vault.key() == pool_state.token_vault_0 + && ctx.accounts.output_vault.key() == pool_state.token_vault_1 } else { - ctx.input_vault.key() == pool_state.token_vault_1 - && ctx.output_vault.key() == pool_state.token_vault_0 + ctx.accounts.input_vault.key() == pool_state.token_vault_1 + && ctx.accounts.output_vault.key() == pool_state.token_vault_0 }, ErrorCode::InvalidInputPoolVault ); let mut tickarray_bitmap_extension = None; let tick_array_states = &mut VecDeque::new(); - tick_array_states.push_back(ctx.tick_array_state.load_mut()?); + tick_array_states.push_back(ctx.accounts.tick_array.load_mut()?); let tick_array_bitmap_extension_key = TickArrayBitmapExtension::key(pool_state.key()); - for account_info in remaining_accounts.into_iter() { + for account_info in ctx.remaining_accounts.into_iter() { if account_info.key().eq(&tick_array_bitmap_extension_key) { tickarray_bitmap_extension = Some( *(AccountLoader::::try_from(account_info)? @@ -602,10 +603,10 @@ pub fn exact_internal<'b, 'c: 'info, 'info>( } (amount_0, amount_1) = swap_internal( - &ctx.amm_config, + &ctx.accounts.amm_config, pool_state, tick_array_states, - &mut ctx.observation_state.load_mut()?, + &mut ctx.accounts.observation_state.load_mut()?, &tickarray_bitmap_extension, amount_specified, if sqrt_price_limit_x64 == 0 { @@ -636,76 +637,77 @@ pub fn exact_internal<'b, 'c: 'info, 'info>( } let (token_account_0, token_account_1, vault_0, vault_1) = if zero_for_one { ( - ctx.input_token_account.clone(), - ctx.output_token_account.clone(), - ctx.input_vault.clone(), - ctx.output_vault.clone(), + ctx.accounts.input_token_account.clone(), + ctx.accounts.output_token_account.clone(), + ctx.accounts.input_vault.clone(), + ctx.accounts.output_vault.clone(), ) } else { ( - ctx.output_token_account.clone(), - ctx.input_token_account.clone(), - ctx.output_vault.clone(), - ctx.input_vault.clone(), + ctx.accounts.output_token_account.clone(), + ctx.accounts.input_token_account.clone(), + ctx.accounts.output_vault.clone(), + ctx.accounts.input_vault.clone(), ) }; if zero_for_one { // x -> y, deposit x token from user to pool vault. transfer_from_user_to_pool_vault( - &ctx.signer, + &ctx.accounts.payer, &token_account_0.to_account_info(), &vault_0.to_account_info(), None, - &ctx.token_program, + &ctx.accounts.token_program, None, amount_0, )?; if vault_1.amount <= amount_1 { // freeze pool, disable all instructions - ctx.pool_state.load_mut()?.set_status(255); + ctx.accounts.pool_state.load_mut()?.set_status(255); } // x -> y,transfer y token from pool vault to user. transfer_from_pool_vault_to_user( - &ctx.pool_state, + &ctx.accounts.pool_state, &vault_1.to_account_info(), &token_account_1.to_account_info(), None, - &ctx.token_program, + &ctx.accounts.token_program, None, amount_1, )?; } else { transfer_from_user_to_pool_vault( - &ctx.signer, + &ctx.accounts.payer, &token_account_1.to_account_info(), &vault_1.to_account_info(), None, - &ctx.token_program, + &ctx.accounts.token_program, None, amount_1, )?; if vault_0.amount <= amount_0 { // freeze pool, disable all instructions - ctx.pool_state.load_mut()?.set_status(255); + ctx.accounts.pool_state.load_mut()?.set_status(255); } transfer_from_pool_vault_to_user( - &ctx.pool_state, + &ctx.accounts.pool_state, &vault_0.to_account_info(), &token_account_0.to_account_info(), None, - &ctx.token_program, + &ctx.accounts.token_program, None, amount_0, )?; } - ctx.output_vault.reload()?; - ctx.input_vault.reload()?; + ctx.accounts.output_vault.reload()?; + ctx.accounts.input_vault.reload()?; - let pool_state = ctx.pool_state.load()?; - emit!(SwapEvent { + let pool_state = ctx.accounts.pool_state.load()?; + + emit_cpi!(SwapEvent { pool_state: pool_state.key(), - sender: ctx.signer.key(), + sender: ctx.accounts.payer.key(), token_account_0: token_account_0.key(), token_account_1: token_account_1.key(), amount_0, @@ -717,6 +719,7 @@ pub fn exact_internal<'b, 'c: 'info, 'info>( liquidity: pool_state.liquidity, tick: pool_state.tick_current }); + if zero_for_one { require_gt!(swap_price_before, pool_state.sqrt_price_x64); } else { @@ -741,10 +744,11 @@ pub fn exact_internal<'b, 'c: 'info, 'info>( if is_base_input { Ok(output_balance_before - .checked_sub(ctx.output_vault.amount) + .checked_sub(ctx.accounts.output_vault.amount) .unwrap()) } else { Ok(ctx + .accounts .input_vault .amount .checked_sub(input_balance_before) @@ -759,24 +763,7 @@ pub fn swap<'a, 'b, 'c: 'info, 'info>( sqrt_price_limit_x64: u128, is_base_input: bool, ) -> Result<()> { - let amount = exact_internal( - &mut SwapAccounts { - signer: ctx.accounts.payer.clone(), - amm_config: &ctx.accounts.amm_config, - input_token_account: ctx.accounts.input_token_account.clone(), - output_token_account: ctx.accounts.output_token_account.clone(), - input_vault: ctx.accounts.input_vault.clone(), - output_vault: ctx.accounts.output_vault.clone(), - token_program: ctx.accounts.token_program.clone(), - pool_state: &mut ctx.accounts.pool_state, - tick_array_state: &mut ctx.accounts.tick_array, - observation_state: &mut ctx.accounts.observation_state, - }, - ctx.remaining_accounts, - amount, - sqrt_price_limit_x64, - is_base_input, - )?; + let amount = exact_internal(ctx, amount, sqrt_price_limit_x64, is_base_input)?; if is_base_input { require!( amount >= other_amount_threshold, diff --git a/programs/amm/src/instructions/swap_router_base_in.rs b/programs/amm/src/instructions/swap_router_base_in.rs index 21b4ef76..2b1904a8 100644 --- a/programs/amm/src/instructions/swap_router_base_in.rs +++ b/programs/amm/src/instructions/swap_router_base_in.rs @@ -1,12 +1,13 @@ use crate::error::ErrorCode; -use crate::states::*; use crate::swap_v2::{exact_internal_v2, SwapSingleV2}; +use crate::{states::*, SwapSingleV2Bumps}; use anchor_lang::prelude::*; use anchor_spl::{ token::Token, token_interface::{Mint, Token2022, TokenAccount}, }; +#[event_cpi] #[derive(Accounts)] pub struct SwapRouterBaseIn<'info> { /// The user performing the swap @@ -78,27 +79,35 @@ pub fn swap_router_base_in<'a, 'b, 'c: 'info, 'info>( // solana_program::log::sol_log_compute_units(); accounts = remaining_accounts.as_slice(); - amount_in_internal = exact_internal_v2( - &mut SwapSingleV2 { - payer: ctx.accounts.payer.clone(), - amm_config, - input_token_account: input_token_account.clone(), - pool_state: pool_state_loader, - output_token_account: output_token_account.clone(), - input_vault: input_vault.clone(), - output_vault: output_vault.clone(), - input_vault_mint: input_token_mint.clone(), - output_vault_mint: output_token_mint.clone(), - observation_state, - token_program: ctx.accounts.token_program.clone(), - token_program_2022: ctx.accounts.token_program_2022.clone(), - memo_program: ctx.accounts.memo_program.clone(), - }, + + let swap_accounts = &mut SwapSingleV2 { + payer: ctx.accounts.payer.clone(), + amm_config, + input_token_account: input_token_account.clone(), + pool_state: pool_state_loader, + output_token_account: output_token_account.clone(), + input_vault: input_vault.clone(), + output_vault: output_vault.clone(), + input_vault_mint: input_token_mint.clone(), + output_vault_mint: output_token_mint.clone(), + observation_state, + token_program: ctx.accounts.token_program.clone(), + token_program_2022: ctx.accounts.token_program_2022.clone(), + memo_program: ctx.accounts.memo_program.clone(), + event_authority: ctx.accounts.event_authority.clone(), + program: ctx.accounts.program.clone(), + }; + + let swap_context = Context::new( + &ctx.program_id, + swap_accounts, accounts, - amount_in_internal, - 0, - true, - )?; + SwapSingleV2Bumps { + event_authority: ctx.bumps.event_authority, + }, + ); + + amount_in_internal = exact_internal_v2(swap_context, amount_in_internal, 0, true)?; // output token is the new swap input token input_token_account = output_token_account; input_token_mint = output_token_mint; diff --git a/programs/amm/src/instructions/swap_v2.rs b/programs/amm/src/instructions/swap_v2.rs index fa2d40be..bf64048f 100644 --- a/programs/amm/src/instructions/swap_v2.rs +++ b/programs/amm/src/instructions/swap_v2.rs @@ -12,6 +12,8 @@ use anchor_spl::token_interface::{Mint, Token2022, TokenAccount}; /// Memo msg for swap pub const SWAP_MEMO_MSG: &'static [u8] = b"raydium_swap"; + +#[event_cpi] #[derive(Accounts)] pub struct SwapSingleV2<'info> { /// The user performing the swap @@ -78,8 +80,7 @@ pub struct SwapSingleV2<'info> { /// Performs a single exact input/output swap /// if is_base_input = true, return vaule is the max_amount_out, otherwise is min_amount_in pub fn exact_internal_v2<'c: 'info, 'info>( - ctx: &mut SwapSingleV2<'info>, - remaining_accounts: &'c [AccountInfo<'info>], + ctx: Context<'_, '_, 'c, 'info, SwapSingleV2>, amount_specified: u64, sqrt_price_limit_x64: u128, is_base_input: bool, @@ -93,35 +94,38 @@ pub fn exact_internal_v2<'c: 'info, 'info>( let zero_for_one; let swap_price_before; - let input_balance_before = ctx.input_token_account.amount; - let output_balance_before = ctx.output_token_account.amount; + let input_balance_before = ctx.accounts.input_token_account.amount; + let output_balance_before = ctx.accounts.output_token_account.amount; // calculate specified amount because the amount includes thransfer_fee as input and without thransfer_fee as output let amount_calculate_specified = if is_base_input { let transfer_fee = - util::get_transfer_fee(ctx.input_vault_mint.clone(), amount_specified).unwrap(); + util::get_transfer_fee(ctx.accounts.input_vault_mint.clone(), amount_specified) + .unwrap(); amount_specified - transfer_fee } else { - let transfer_fee = - util::get_transfer_inverse_fee(ctx.output_vault_mint.clone(), amount_specified) - .unwrap(); + let transfer_fee = util::get_transfer_inverse_fee( + ctx.accounts.output_vault_mint.clone(), + amount_specified, + ) + .unwrap(); amount_specified + transfer_fee }; { - swap_price_before = ctx.pool_state.load()?.sqrt_price_x64; - let pool_state = &mut ctx.pool_state.load_mut()?; - zero_for_one = ctx.input_vault.mint == pool_state.token_mint_0; + swap_price_before = ctx.accounts.pool_state.load()?.sqrt_price_x64; + let pool_state = &mut ctx.accounts.pool_state.load_mut()?; + zero_for_one = ctx.accounts.input_vault.mint == pool_state.token_mint_0; require_gt!(block_timestamp, pool_state.open_time); require!( if zero_for_one { - ctx.input_vault.key() == pool_state.token_vault_0 - && ctx.output_vault.key() == pool_state.token_vault_1 + ctx.accounts.input_vault.key() == pool_state.token_vault_0 + && ctx.accounts.output_vault.key() == pool_state.token_vault_1 } else { - ctx.input_vault.key() == pool_state.token_vault_1 - && ctx.output_vault.key() == pool_state.token_vault_0 + ctx.accounts.input_vault.key() == pool_state.token_vault_1 + && ctx.accounts.output_vault.key() == pool_state.token_vault_0 }, ErrorCode::InvalidInputPoolVault ); @@ -130,7 +134,7 @@ pub fn exact_internal_v2<'c: 'info, 'info>( let tick_array_states = &mut VecDeque::new(); let tick_array_bitmap_extension_key = TickArrayBitmapExtension::key(pool_state.key()); - for account_info in remaining_accounts.into_iter() { + for account_info in ctx.remaining_accounts.into_iter() { if account_info.key().eq(&tick_array_bitmap_extension_key) { tickarray_bitmap_extension = Some( *(AccountLoader::::try_from(account_info)? @@ -143,10 +147,10 @@ pub fn exact_internal_v2<'c: 'info, 'info>( } (amount_0, amount_1) = swap_internal( - &ctx.amm_config, + &ctx.accounts.amm_config, pool_state, tick_array_states, - &mut ctx.observation_state.load_mut()?, + &mut ctx.accounts.observation_state.load_mut()?, &tickarray_bitmap_extension, amount_calculate_specified, if sqrt_price_limit_x64 == 0 { @@ -178,21 +182,21 @@ pub fn exact_internal_v2<'c: 'info, 'info>( let (token_account_0, token_account_1, vault_0, vault_1, vault_0_mint, vault_1_mint) = if zero_for_one { ( - ctx.input_token_account.clone(), - ctx.output_token_account.clone(), - ctx.input_vault.clone(), - ctx.output_vault.clone(), - ctx.input_vault_mint.clone(), - ctx.output_vault_mint.clone(), + ctx.accounts.input_token_account.clone(), + ctx.accounts.output_token_account.clone(), + ctx.accounts.input_vault.clone(), + ctx.accounts.output_vault.clone(), + ctx.accounts.input_vault_mint.clone(), + ctx.accounts.output_vault_mint.clone(), ) } else { ( - ctx.output_token_account.clone(), - ctx.input_token_account.clone(), - ctx.output_vault.clone(), - ctx.input_vault.clone(), - ctx.output_vault_mint.clone(), - ctx.input_vault_mint.clone(), + ctx.accounts.output_token_account.clone(), + ctx.accounts.input_token_account.clone(), + ctx.accounts.output_vault.clone(), + ctx.accounts.input_vault.clone(), + ctx.accounts.output_vault_mint.clone(), + ctx.accounts.input_vault_mint.clone(), ) }; @@ -222,26 +226,26 @@ pub fn exact_internal_v2<'c: 'info, 'info>( ); // x -> y, deposit x token from user to pool vault. transfer_from_user_to_pool_vault( - &ctx.payer, + &ctx.accounts.payer, &token_account_0.to_account_info(), &vault_0.to_account_info(), Some(vault_0_mint), - &ctx.token_program, - Some(ctx.token_program_2022.to_account_info()), + &ctx.accounts.token_program, + Some(ctx.accounts.token_program_2022.to_account_info()), transfer_amount_0, )?; if vault_1.amount <= transfer_amount_1 { // freeze pool, disable all instructions - ctx.pool_state.load_mut()?.set_status(255); + ctx.accounts.pool_state.load_mut()?.set_status(255); } // x -> y,transfer y token from pool vault to user. transfer_from_pool_vault_to_user( - &ctx.pool_state, + &ctx.accounts.pool_state, &vault_1.to_account_info(), &token_account_1.to_account_info(), Some(vault_1_mint), - &ctx.token_program, - Some(ctx.token_program_2022.to_account_info()), + &ctx.accounts.token_program, + Some(ctx.accounts.token_program_2022.to_account_info()), transfer_amount_1, )?; } else { @@ -260,35 +264,35 @@ pub fn exact_internal_v2<'c: 'info, 'info>( transfer_fee_1 ); transfer_from_user_to_pool_vault( - &ctx.payer, + &ctx.accounts.payer, &token_account_1.to_account_info(), &vault_1.to_account_info(), Some(vault_1_mint), - &ctx.token_program, - Some(ctx.token_program_2022.to_account_info()), + &ctx.accounts.token_program, + Some(ctx.accounts.token_program_2022.to_account_info()), transfer_amount_1, )?; if vault_0.amount <= transfer_amount_0 { // freeze pool, disable all instructions - ctx.pool_state.load_mut()?.set_status(255); + ctx.accounts.pool_state.load_mut()?.set_status(255); } transfer_from_pool_vault_to_user( - &ctx.pool_state, + &ctx.accounts.pool_state, &vault_0.to_account_info(), &token_account_0.to_account_info(), Some(vault_0_mint), - &ctx.token_program, - Some(ctx.token_program_2022.to_account_info()), + &ctx.accounts.token_program, + Some(ctx.accounts.token_program_2022.to_account_info()), transfer_amount_0, )?; } - ctx.output_token_account.reload()?; - ctx.input_token_account.reload()?; + ctx.accounts.output_token_account.reload()?; + ctx.accounts.input_token_account.reload()?; - let pool_state = ctx.pool_state.load()?; - emit!(SwapEvent { + let pool_state = ctx.accounts.pool_state.load()?; + emit_cpi!(SwapEvent { pool_state: pool_state.key(), - sender: ctx.payer.key(), + sender: ctx.accounts.payer.key(), token_account_0: token_account_0.key(), token_account_1: token_account_1.key(), amount_0: amount_0_without_fee, @@ -324,31 +328,26 @@ pub fn exact_internal_v2<'c: 'info, 'info>( if is_base_input { Ok(ctx + .accounts .output_token_account .amount .checked_sub(output_balance_before) .unwrap()) } else { Ok(input_balance_before - .checked_sub(ctx.input_token_account.amount) + .checked_sub(ctx.accounts.input_token_account.amount) .unwrap()) } } -pub fn swap_v2<'a, 'b, 'c: 'info, 'info>( - ctx: Context<'a, 'b, 'c, 'info, SwapSingleV2<'info>>, +pub fn swap_v2<'c: 'info, 'info>( + ctx: Context<'_, '_, 'c, 'info, SwapSingleV2<'info>>, amount: u64, other_amount_threshold: u64, sqrt_price_limit_x64: u128, is_base_input: bool, ) -> Result<()> { - let amount_result = exact_internal_v2( - ctx.accounts, - ctx.remaining_accounts, - amount, - sqrt_price_limit_x64, - is_base_input, - )?; + let amount_result = exact_internal_v2(ctx, amount, sqrt_price_limit_x64, is_base_input)?; if is_base_input { require_gte!( amount_result,