From 6c2a90b8dad4aef2bb66b7e2d3c62c352bf32b71 Mon Sep 17 00:00:00 2001 From: Arrowana Date: Mon, 17 Jul 2023 14:17:09 +1000 Subject: [PATCH 1/6] Jupiter changes for jupiter-core compat --- Cargo.lock | 274 +++++++++++++----- Cargo.toml | 7 +- .../stakedex_interface/src/instructions.rs | 102 ++----- libs/marinade/src/lib.rs | 26 +- libs/spl_stake_pool/src/lib.rs | 1 + stakedex_sdk/Cargo.toml | 1 + stakedex_sdk/tests/test_main.rs | 30 +- 7 files changed, 256 insertions(+), 185 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e788bfd..ec1e9d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2021,7 +2021,7 @@ dependencies = [ [[package]] name = "lido" version = "1.3.6" -source = "git+https://github.com/jup-ag/solido?branch=jupiter#ec25a9b9f3415bf5fd0354cf3ae6d239c28e2c87" +source = "git+https://github.com/jup-ag/solido?rev=2c85ddf7b50d8162d2b81d79d7fcbfd5e05dc967#2c85ddf7b50d8162d2b81d79d7fcbfd5e05dc967" dependencies = [ "arrayref", "borsh 0.10.3", @@ -2069,14 +2069,11 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "marinade_finance_interface" -version = "0.1.0" -source = "git+https://github.com/igneous-labs/marinade_finance_interface?branch=master#4d1895b6b1c34d731c1589e6d8a6c8feb6258152" +version = "0.0.0" +source = "git+https://github.com/jup-ag/marinade_finance_interface?rev=5747b5350c5505fc2ea597c3f8ae1f8cf71c363d#5747b5350c5505fc2ea597c3f8ae1f8cf71c363d" dependencies = [ "borsh 0.10.3", - "num-derive 0.4.1", - "num-traits", "solana-program", - "thiserror", ] [[package]] @@ -3504,10 +3501,10 @@ dependencies = [ "serde_json", "solana-config-program", "solana-sdk", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-token-2022 1.0.0", "spl-token-group-interface", - "spl-token-metadata-interface", + "spl-token-metadata-interface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "zstd", ] @@ -4130,8 +4127,8 @@ dependencies = [ "solana-account-decoder", "solana-sdk", "spl-associated-token-account", - "spl-memo", - "spl-token 4.0.0", + "spl-memo 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-token-2022 1.0.0", "thiserror", ] @@ -4270,7 +4267,7 @@ dependencies = [ "num-derive 0.4.1", "num-traits", "solana-program", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-token-2022 1.0.0", "thiserror", ] @@ -4283,7 +4280,27 @@ checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator-derive", + "spl-discriminator-derive 0.1.1", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive 0.1.0", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "quote", + "spl-discriminator-syn 0.1.0", + "syn 2.0.41", ] [[package]] @@ -4293,8 +4310,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" dependencies = [ "quote", - "spl-discriminator-syn", + "spl-discriminator-syn 0.1.1", + "syn 2.0.41", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "proc-macro2", + "quote", + "solana-program", "syn 2.0.41", + "thiserror", ] [[package]] @@ -4339,6 +4368,19 @@ dependencies = [ "uint 0.9.5", ] +[[package]] +name = "spl-math" +version = "0.2.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "borsh 0.10.3", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "thiserror", + "uint 0.9.5", +] + [[package]] name = "spl-memo" version = "4.0.0" @@ -4348,6 +4390,14 @@ dependencies = [ "solana-program", ] +[[package]] +name = "spl-memo" +version = "4.0.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "solana-program", +] + [[package]] name = "spl-pod" version = "0.1.0" @@ -4358,7 +4408,19 @@ dependencies = [ "bytemuck", "solana-program", "solana-zk-token-sdk", - "spl-program-error", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "spl-pod" +version = "0.1.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", ] [[package]] @@ -4370,10 +4432,33 @@ dependencies = [ "num-derive 0.4.1", "num-traits", "solana-program", - "spl-program-error-derive", + "spl-program-error-derive 0.3.1", + "thiserror", +] + +[[package]] +name = "spl-program-error" +version = "0.3.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-program-error-derive 0.3.0", "thiserror", ] +[[package]] +name = "spl-program-error-derive" +version = "0.3.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "proc-macro2", + "quote", + "solana-program", + "syn 2.0.41", +] + [[package]] name = "spl-program-error-derive" version = "0.3.1" @@ -4388,39 +4473,35 @@ dependencies = [ [[package]] name = "spl-stake-pool" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f973333ac37c47dac368cc13088ebebaa7d67e50a7f56a2a83f090bc32c2cb" +version = "0.7.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" dependencies = [ "arrayref", "bincode", "borsh 0.10.3", - "bytemuck", "num-derive 0.4.1", "num-traits", "num_enum 0.7.2", "serde", "serde_derive", "solana-program", - "solana-security-txt", - "spl-math 0.2.0", - "spl-pod", - "spl-token-2022 0.9.0", + "spl-math 0.2.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-token-2022 0.8.0", "thiserror", ] [[package]] name = "spl-tlv-account-resolution" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" +version = "0.3.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", - "spl-type-length-value", + "spl-discriminator 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-program-error 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-type-length-value 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", ] [[package]] @@ -4431,10 +4512,10 @@ checksum = "615d381f48ddd2bb3c57c7f7fb207591a2a05054639b18a62e785117dd7a8683" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", - "spl-type-length-value", + "spl-discriminator 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-type-length-value 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -4467,11 +4548,24 @@ dependencies = [ "thiserror", ] +[[package]] +name = "spl-token" +version = "4.0.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "thiserror", +] + [[package]] name = "spl-token-2022" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" +version = "0.8.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" dependencies = [ "arrayref", "bytemuck", @@ -4480,12 +4574,12 @@ dependencies = [ "num_enum 0.7.2", "solana-program", "solana-zk-token-sdk", - "spl-memo", - "spl-pod", - "spl-token 4.0.0", - "spl-token-metadata-interface", - "spl-transfer-hook-interface 0.3.0", - "spl-type-length-value", + "spl-memo 4.0.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-token 4.0.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-token-metadata-interface 0.2.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-transfer-hook-interface 0.2.0", + "spl-type-length-value 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", "thiserror", ] @@ -4503,13 +4597,13 @@ dependencies = [ "solana-program", "solana-security-txt", "solana-zk-token-sdk", - "spl-memo", - "spl-pod", - "spl-token 4.0.0", + "spl-memo 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-token-group-interface", - "spl-token-metadata-interface", + "spl-token-metadata-interface 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-transfer-hook-interface 0.4.1", - "spl-type-length-value", + "spl-type-length-value 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", ] @@ -4521,9 +4615,9 @@ checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", + "spl-discriminator 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -4534,26 +4628,38 @@ checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" dependencies = [ "borsh 0.10.3", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", - "spl-type-length-value", + "spl-discriminator 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-type-length-value 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-program-error 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-type-length-value 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", ] [[package]] name = "spl-transfer-hook-interface" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" +version = "0.2.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" dependencies = [ "arrayref", "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", - "spl-tlv-account-resolution 0.4.0", - "spl-type-length-value", + "spl-discriminator 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-program-error 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-tlv-account-resolution 0.3.0", + "spl-type-length-value 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", ] [[package]] @@ -4565,11 +4671,11 @@ dependencies = [ "arrayref", "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", + "spl-discriminator 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "spl-tlv-account-resolution 0.5.1", - "spl-type-length-value", + "spl-type-length-value 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -4580,9 +4686,21 @@ checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator", - "spl-pod", - "spl-program-error", + "spl-discriminator 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-pod 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "spl-program-error 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.0" +source = "git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9#a3996814cb44eab2834f72113b742c875ac7b1b9" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-pod 0.1.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", + "spl-program-error 0.3.0 (git+https://github.com/solana-labs/solana-program-library.git?rev=a3996814cb44eab2834f72113b742c875ac7b1b9)", ] [[package]] @@ -4597,7 +4715,7 @@ dependencies = [ "solana-program", "solana-sdk", "spl-associated-token-account", - "spl-token 3.5.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_sdk_common", "tokio", ] @@ -4642,7 +4760,7 @@ dependencies = [ "rand 0.8.5", "rust_decimal", "solana-sdk", - "spl-token 3.5.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_interface", "stakedex_sdk_common", "unstake-lib", @@ -4660,7 +4778,7 @@ dependencies = [ "lido", "solana-client", "solana-program", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_deposit_sol_interface", "stakedex_sdk_common", "stakedex_withdraw_stake_interface", @@ -4675,7 +4793,7 @@ dependencies = [ "jupiter-amm-interface", "marinade_finance_interface", "solana-program", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_deposit_sol_interface", "stakedex_deposit_stake_interface", "stakedex_sdk_common", @@ -4694,7 +4812,7 @@ dependencies = [ "solana-client", "solana-sdk", "spl-associated-token-account", - "spl-token 3.5.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_interface", "stakedex_jup_interface", "stakedex_lido", @@ -4727,7 +4845,7 @@ dependencies = [ "jupiter-amm-interface", "solana-program", "spl-stake-pool", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_deposit_sol_interface", "stakedex_deposit_stake_interface", "stakedex_jup_interface", @@ -4743,7 +4861,7 @@ dependencies = [ "jupiter-amm-interface", "solana-program", "spl-math 0.1.0", - "spl-token 4.0.0", + "spl-token 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "stakedex_deposit_stake_interface", "stakedex_jup_interface", "stakedex_sdk_common", @@ -5240,7 +5358,7 @@ name = "unstake-lib" version = "0.1.0" source = "git+https://github.com/igneous-labs/sanctum-unstake-program.git?rev=069f941#069f941d275cc41b2ec0e3c2dbfae78cae63d786" dependencies = [ - "spl-math 0.2.0", + "spl-math 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "unstake_interface", ] diff --git a/Cargo.toml b/Cargo.toml index 59dd390..e29988e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,8 +19,8 @@ itertools = ">=0.1" jupiter-amm-interface = "~0.3.2" lazy_static = "^1.0" # set git dependencies to branch instead of locking to rev so that consumers can upgrade easily -lido = { git = "https://github.com/jup-ag/solido", branch = "jupiter", features = ["no-entrypoint"] } # rev = "ec25a9b" -marinade_finance_interface = { git = "https://github.com/igneous-labs/marinade_finance_interface", branch = "master" } # rev = "4d1895b" +lido = { git = "https://github.com/jup-ag/solido", rev = "2c85ddf7b50d8162d2b81d79d7fcbfd5e05dc967", features = ["no-entrypoint"] } +marinade_finance_interface = { git = "https://github.com/jup-ag/marinade_finance_interface", rev = "5747b5350c5505fc2ea597c3f8ae1f8cf71c363d" } # rev = "4d1895b" num-derive = ">=0.1" num-traits = ">=0.1" rand = "0.8.5" @@ -31,7 +31,8 @@ serde = "^1" serde_json = "^1" spl-associated-token-account = { version = ">=1", features = ["no-entrypoint"] } spl-math = { version = "0.1.0", features = ["no-entrypoint"]} -spl-stake-pool = { version = "^1", features = ["no-entrypoint"] } +spl-stake-pool = { git = "https://github.com/solana-labs/solana-program-library.git", rev = "a3996814cb44eab2834f72113b742c875ac7b1b9", features = ["no-entrypoint"] } +#spl-stake-pool = { version = "^1", features = ["no-entrypoint"] } spl-token = ">=3.0" thiserror = "^1.0" tokio = "^1.0" diff --git a/interfaces/stakedex_interface/src/instructions.rs b/interfaces/stakedex_interface/src/instructions.rs index a901d73..a0380e5 100644 --- a/interfaces/stakedex_interface/src/instructions.rs +++ b/interfaces/stakedex_interface/src/instructions.rs @@ -158,56 +158,16 @@ impl From> for StakeWrappedSolKeys { impl From for [AccountMeta; STAKE_WRAPPED_SOL_IX_ACCOUNTS_LEN] { fn from(keys: StakeWrappedSolKeys) -> Self { [ - AccountMeta { - pubkey: keys.user, - is_signer: true, - is_writable: false, - }, - AccountMeta { - pubkey: keys.wsol_from, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_to, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.wsol_bridge_in, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.sol_bridge_out, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_fee_token_account, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_mint, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.wsol_mint, - is_signer: false, - is_writable: false, - }, - AccountMeta { - pubkey: keys.token_program, - is_signer: false, - is_writable: false, - }, - AccountMeta { - pubkey: keys.system_program, - is_signer: false, - is_writable: false, - }, + AccountMeta::new_readonly(keys.user, false), + AccountMeta::new(keys.wsol_from, false), + AccountMeta::new(keys.dest_token_to, false), + AccountMeta::new(keys.wsol_bridge_in, false), + AccountMeta::new(keys.sol_bridge_out, false), + AccountMeta::new(keys.dest_token_fee_token_account, false), + AccountMeta::new(keys.dest_token_mint, false), + AccountMeta::new_readonly(keys.wsol_mint, false), + AccountMeta::new_readonly(keys.token_program, false), + AccountMeta::new_readonly(keys.system_program, false), ] } } @@ -464,41 +424,13 @@ impl From> for SwapViaStakeKeys { impl From for [AccountMeta; SWAP_VIA_STAKE_IX_ACCOUNTS_LEN] { fn from(keys: SwapViaStakeKeys) -> Self { [ - AccountMeta { - pubkey: keys.user, - is_signer: true, - is_writable: true, - }, - AccountMeta { - pubkey: keys.src_token_from, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_to, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.bridge_stake, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_fee_token_account, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.src_token_mint, - is_signer: false, - is_writable: true, - }, - AccountMeta { - pubkey: keys.dest_token_mint, - is_signer: false, - is_writable: true, - }, + AccountMeta::new(keys.user, false), + AccountMeta::new(keys.src_token_from, false), + AccountMeta::new(keys.dest_token_to, false), + AccountMeta::new(keys.bridge_stake, false), + AccountMeta::new(keys.dest_token_fee_token_account, false), + AccountMeta::new(keys.src_token_mint, false), + AccountMeta::new(keys.dest_token_mint, false), ] } } diff --git a/libs/marinade/src/lib.rs b/libs/marinade/src/lib.rs index 590e985..582cbee 100644 --- a/libs/marinade/src/lib.rs +++ b/libs/marinade/src/lib.rs @@ -8,7 +8,7 @@ use anyhow::{anyhow, Result}; use borsh::BorshDeserialize; use consts::VALIDATOR_RECORD_BYTE_LENGTH; use marinade_finance_interface::{ - Fee, FeeCents, LiqPool, List, StakeSystem, State, ValidatorRecord, ValidatorSystem, + Fee, LiqPool, List, StakeSystem, State, ValidatorRecord, ValidatorSystem, }; use solana_program::{borsh0_10::try_from_slice_unchecked, pubkey::Pubkey}; @@ -28,11 +28,13 @@ impl Default for MarinadeStakedex { account: Pubkey::default(), item_size: 0, count: 0, - reserved1: Pubkey::default(), - reserved2: 0, + new_account: Pubkey::default(), + copied_count: 0, + // reserved1: Pubkey::default(), + // reserved2: 0, }; let zero_fee = Fee { basis_points: 0 }; - let zero_fee_cents = FeeCents { bp_cents: 0 }; + // let zero_fee_cents = FeeCents { bp_cents: 0 }; Self { state: State { msol_mint: Pubkey::default(), @@ -84,14 +86,14 @@ impl Default for MarinadeStakedex { min_withdraw: 0, staking_sol_cap: 0, emergency_cooling_down: 0, - pause_authority: Pubkey::default(), - paused: false, - delayed_unstake_fee: zero_fee_cents.clone(), - withdraw_stake_account_fee: zero_fee_cents, - withdraw_stake_account_enabled: false, - last_stake_move_epoch: 0, - stake_moved: 0, - max_stake_moved_per_epoch: zero_fee, + // pause_authority: Pubkey::default(), + // paused: false, + // delayed_unstake_fee: zero_fee_cents.clone(), + // withdraw_stake_account_fee: zero_fee_cents, + // withdraw_stake_account_enabled: false, + // last_stake_move_epoch: 0, + // stake_moved: 0, + // max_stake_moved_per_epoch: zero_fee, }, validator_records: Vec::new(), } diff --git a/libs/spl_stake_pool/src/lib.rs b/libs/spl_stake_pool/src/lib.rs index 4dd81ff..d38fbd2 100644 --- a/libs/spl_stake_pool/src/lib.rs +++ b/libs/spl_stake_pool/src/lib.rs @@ -8,6 +8,7 @@ use spl_stake_pool::{ use stakedex_sdk_common::{WithdrawStakeQuote, STAKE_ACCOUNT_RENT_EXEMPT_LAMPORTS}; mod stakedex_traits; +pub use spl_stake_pool::ID; pub use stakedex_traits::*; /// A SPL stake pool with possibly custom program ID diff --git a/stakedex_sdk/Cargo.toml b/stakedex_sdk/Cargo.toml index 02db964..0bbd394 100644 --- a/stakedex_sdk/Cargo.toml +++ b/stakedex_sdk/Cargo.toml @@ -28,3 +28,4 @@ stakedex_unstake_it = { workspace = true } [dev-dependencies] solana-client = { workspace = true } +lazy_static = { workspace = true } diff --git a/stakedex_sdk/tests/test_main.rs b/stakedex_sdk/tests/test_main.rs index 2dc97a2..b07b560 100644 --- a/stakedex_sdk/tests/test_main.rs +++ b/stakedex_sdk/tests/test_main.rs @@ -74,13 +74,25 @@ fn fetch_accounts(accounts_pubkeys: &[Pubkey]) -> HashMap { } #[test] -fn test_swap_via_stake_unknown_token() { +fn test_quote_swap_via_stake_jitosol_bsol() { + STAKEDEX + .quote_swap_via_stake(&QuoteParams { + amount: 1_000_000_000, + input_mint: jitosol::ID, + output_mint: bsol::ID, + swap_mode: jupiter_amm_interface::SwapMode::ExactIn, + }) + .unwrap(); +} + +#[test] +fn test_quote_swap_via_stake_unknown_token() { let unknown_token = Pubkey::new_unique(); let res = STAKEDEX.quote_swap_via_stake(&QuoteParams { amount: 1_000_000_000, input_mint: unknown_token, output_mint: bsol::ID, - swap_mode: SwapMode::default(), + swap_mode: jupiter_amm_interface::SwapMode::ExactIn, }); assert!(res.is_err()); } @@ -307,13 +319,17 @@ fn test_jsol_drain_vsa_edge_case() { .validator_list .validators .iter() - .max_by_key(|v| v.active_stake_lamports) + .max_by_key(|v| u64::from(v.active_stake_lamports)) .unwrap(); let max_withdraw_lamports = largest_active_stake_vsi.active_stake_lamports; let parts_after_fees = (STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.denominator - STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.numerator) as u128; +<<<<<<< HEAD let max_withdraw_lamports_bef_fees = u128::from(max_withdraw_lamports) +======= + let max_withdraw_lamports_bef_fees = (u128::from(u64::from(max_withdraw_lamports)) +>>>>>>> 6314bd6 (Jupiter changes for jupiter-core compat) * (STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.denominator as u128) + parts_after_fees - 1) @@ -325,17 +341,17 @@ fn test_jsol_drain_vsa_edge_case() { .unwrap(); let max_possible_quote = STAKEDEX .quote_swap_via_stake(&QuoteParams { - amount: max_withdraw_jsol, - input_mint: jsol::ID, + amount: 100_000_000_000, + input_mint: stsol::ID, output_mint: msol::ID, - swap_mode: SwapMode::default(), + swap_mode: jupiter_amm_interface::SwapMode::ExactIn, }) .unwrap(); let should_fail = STAKEDEX.quote_swap_via_stake(&QuoteParams { amount: max_withdraw_jsol + 1, input_mint: jsol::ID, output_mint: msol::ID, - swap_mode: SwapMode::default(), + swap_mode: SwapMode::ExactIn, }); assert!(should_fail.is_err()); From f6be94c30128874476960e3c50de9b534998a567 Mon Sep 17 00:00:00 2001 From: Arrowana Date: Mon, 11 Mar 2024 18:14:27 +1100 Subject: [PATCH 2/6] minor fixes for jupiter usage --- interfaces/stakedex_interface/src/instructions.rs | 2 +- jup_interface/src/pool_pair/two_way.rs | 2 +- stakedex_sdk/tests/test_main.rs | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/interfaces/stakedex_interface/src/instructions.rs b/interfaces/stakedex_interface/src/instructions.rs index a0380e5..328a5b1 100644 --- a/interfaces/stakedex_interface/src/instructions.rs +++ b/interfaces/stakedex_interface/src/instructions.rs @@ -2030,7 +2030,7 @@ impl From for [AccountMeta; PREFUND_SWAP_VIA_STAKE_IX_A [ AccountMeta { pubkey: keys.user, - is_signer: true, + is_signer: false, // Jupiter needs to disable signers since shared accounts are PDAs is_writable: true, }, AccountMeta { diff --git a/jup_interface/src/pool_pair/two_way.rs b/jup_interface/src/pool_pair/two_way.rs index 8bfa04c..e1fcdd3 100644 --- a/jup_interface/src/pool_pair/two_way.rs +++ b/jup_interface/src/pool_pair/two_way.rs @@ -168,7 +168,7 @@ where account_metas.extend(other_account_metas); account_metas.push(swap_params.placeholder_account_meta()); Ok(SwapAndAccountMetas { - swap: Swap::StakeDexSwapViaStake { bridge_stake_seed }, + swap: Swap::StakeDexPrefundSwapViaStake { bridge_stake_seed }, account_metas, }) } diff --git a/stakedex_sdk/tests/test_main.rs b/stakedex_sdk/tests/test_main.rs index b07b560..c21714a 100644 --- a/stakedex_sdk/tests/test_main.rs +++ b/stakedex_sdk/tests/test_main.rs @@ -325,11 +325,7 @@ fn test_jsol_drain_vsa_edge_case() { let parts_after_fees = (STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.denominator - STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.numerator) as u128; -<<<<<<< HEAD let max_withdraw_lamports_bef_fees = u128::from(max_withdraw_lamports) -======= - let max_withdraw_lamports_bef_fees = (u128::from(u64::from(max_withdraw_lamports)) ->>>>>>> 6314bd6 (Jupiter changes for jupiter-core compat) * (STAKEDEX.jpool.stake_pool.stake_withdrawal_fee.denominator as u128) + parts_after_fees - 1) From 9d3bc55a53e116fdca35eb381325fdd23b2b4a41 Mon Sep 17 00:00:00 2001 From: Arrowana Date: Thu, 14 Mar 2024 11:36:59 +1100 Subject: [PATCH 3/6] disable everything else than deposit sol when not ignoring limitation --- stakedex_sdk/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stakedex_sdk/src/lib.rs b/stakedex_sdk/src/lib.rs index 5da75fb..ecf4ea9 100644 --- a/stakedex_sdk/src/lib.rs +++ b/stakedex_sdk/src/lib.rs @@ -515,7 +515,7 @@ impl Stakedex { } /// Creates all possible Amms from the underlying available Stakedexes - pub fn get_amms(self) -> Vec> { + pub fn get_amms(self, ignore_cpi_limitation: bool) -> Vec> { #[derive(Clone)] enum Stakedex { SplStakePool(SplStakePoolStakedex), @@ -556,6 +556,10 @@ impl Stakedex { } } + if !ignore_cpi_limitation { + return amms; + } + // SplStakePool WithdrawStake + DepositStake // UnstakeIt DepositStake // Marinade DepositStake From 0ccd9157ee579003a4de46c2b96c1988143e0742 Mon Sep 17 00:00:00 2001 From: Arrowana Date: Fri, 15 Mar 2024 16:52:11 +1100 Subject: [PATCH 4/6] the usual hack for jup usage --- interfaces/stakedex_interface/src/instructions.rs | 4 ++-- jup_interface/src/pool_pair/common.rs | 6 +----- jup_interface/src/pool_pair/two_way.rs | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/interfaces/stakedex_interface/src/instructions.rs b/interfaces/stakedex_interface/src/instructions.rs index 328a5b1..7f298aa 100644 --- a/interfaces/stakedex_interface/src/instructions.rs +++ b/interfaces/stakedex_interface/src/instructions.rs @@ -1317,7 +1317,7 @@ impl From for [AccountMeta; DEPOSIT_STAKE_IX_ACCOUNTS_LEN] { [ AccountMeta { pubkey: keys.user, - is_signer: true, + is_signer: false, is_writable: true, }, AccountMeta { @@ -1600,7 +1600,7 @@ impl From for [AccountMeta; PREFUND_WITHDRAW_STAKE_IX_ [ AccountMeta { pubkey: keys.user, - is_signer: true, + is_signer: false, is_writable: true, }, AccountMeta { diff --git a/jup_interface/src/pool_pair/common.rs b/jup_interface/src/pool_pair/common.rs index 4382224..150611a 100644 --- a/jup_interface/src/pool_pair/common.rs +++ b/jup_interface/src/pool_pair/common.rs @@ -93,11 +93,7 @@ pub fn manual_concat_get_account_metas Date: Fri, 15 Mar 2024 17:01:21 +1100 Subject: [PATCH 5/6] revert the disabling hack --- stakedex_sdk/src/lib.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/stakedex_sdk/src/lib.rs b/stakedex_sdk/src/lib.rs index ecf4ea9..5da75fb 100644 --- a/stakedex_sdk/src/lib.rs +++ b/stakedex_sdk/src/lib.rs @@ -515,7 +515,7 @@ impl Stakedex { } /// Creates all possible Amms from the underlying available Stakedexes - pub fn get_amms(self, ignore_cpi_limitation: bool) -> Vec> { + pub fn get_amms(self) -> Vec> { #[derive(Clone)] enum Stakedex { SplStakePool(SplStakePoolStakedex), @@ -556,10 +556,6 @@ impl Stakedex { } } - if !ignore_cpi_limitation { - return amms; - } - // SplStakePool WithdrawStake + DepositStake // UnstakeIt DepositStake // Marinade DepositStake From 213c206efdfa051293141ed0780f84931d855d0d Mon Sep 17 00:00:00 2001 From: zyzy Date: Sat, 16 Mar 2024 01:03:29 +0800 Subject: [PATCH 6/6] fix: remove unwrap --- libs/spl_stake_pool/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libs/spl_stake_pool/src/lib.rs b/libs/spl_stake_pool/src/lib.rs index d38fbd2..e0e4896 100644 --- a/libs/spl_stake_pool/src/lib.rs +++ b/libs/spl_stake_pool/src/lib.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use anyhow::{Context, Result}; use solana_program::{borsh0_10::try_from_slice_unchecked, pubkey::Pubkey, stake_history::Epoch}; use spl_stake_pool::{ error::StakePoolError, @@ -48,7 +48,12 @@ impl SplStakePoolStakedex { validator_index: usize, withdraw_amount: u64, ) -> Result { - let validator_list_entry = self.validator_list.validators.get(validator_index).unwrap(); + let validator_list_entry = self + .validator_list + .validators + .get(validator_index) + .context("Validator index out of bounds") + .map_err(|_err| StakePoolError::InvalidState)?; // only handle withdrawal from active stake accounts for simplicity. // Likely other stake pools can't accept non active stake anyway if validator_list_entry.status != StakeStatus::Active.into() {