Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TRACKING] Jupiter #1

Draft
wants to merge 32 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
cd31455
add program deps
billythedummy Apr 16, 2024
eca5698
comment out programs
billythedummy Apr 16, 2024
843c530
update jup-amm-interface
billythedummy Apr 18, 2024
b6b0c3a
swap and account metas
billythedummy Apr 18, 2024
dbc9ba7
must start with program id
billythedummy Apr 18, 2024
170f376
forgot how my own api works
billythedummy Apr 18, 2024
090ea27
reenable program dependencies
billythedummy Apr 18, 2024
452df2a
feat: Jupiter
Arrowana May 6, 2024
747a4ad
Remove not enough liquidity, use error instead
Arrowana May 13, 2024
7e30358
Merge pull request #310 from igneous-labs/fix/jup-integration
billythedummy May 14, 2024
1f67311
fix jupiter interface location
mschneider Jun 10, 2024
bf7c0de
Merge pull request #317 from mschneider/master
billythedummy Jun 10, 2024
5f8e20a
correctly resolve lst mint for SanctumSplMulti
mschneider Jun 12, 2024
9d58d5e
Merge pull request #318 from mschneider/master
billythedummy Jun 13, 2024
08396ce
fix: use account map type
ZhengYuTay Jul 29, 2024
4e68dd0
fix: use account map type
ZhengYuTay Jul 29, 2024
00b2566
filter out input disabled LSTs
billythedummy Aug 2, 2024
438901d
1.18 changes
ZhengYuTay Sep 2, 2024
4504fe2
filter out input disabled LSTs
billythedummy Aug 2, 2024
6dd9cfa
Merge pull request #319 from igneous-labs/fix/jup-interface-disabled
billythedummy Sep 4, 2024
17c9637
WIP, awaiting stakedex update
billythedummy Sep 24, 2024
5211bd5
update stakedex
billythedummy Sep 24, 2024
ccb8af6
Merge pull request #322 from igneous-labs/feat/jup-amm-interface-upgrade
billythedummy Sep 24, 2024
b8924fd
WIP removing clock from verify fn
billythedummy Sep 25, 2024
113613e
shared current epoch
billythedummy Sep 25, 2024
57607f1
bumped vers too much
billythedummy Sep 25, 2024
31ed628
Merge pull request #324 from igneous-labs/feat/remove-clock
billythedummy Sep 25, 2024
fe6214e
expose get_fee_account_checked() and program_state
billythedummy Sep 25, 2024
a2a5d53
Merge pull request #325 from igneous-labs/feat/pricing-prog-expose-inner
billythedummy Sep 25, 2024
003cfa1
Merge remote-tracking branch 'upstream/master' into 2.0
ZhengYuTay Nov 12, 2024
342c690
2.0, just make s-jup-interface build
ZhengYuTay Nov 12, 2024
c6d9568
update hash
ZhengYuTay Nov 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,675 changes: 1,731 additions & 944 deletions Cargo.lock

Large diffs are not rendered by default.

66 changes: 35 additions & 31 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,66 +34,67 @@ anyhow = "^1"
assert_cmd = "^2"
async-trait = ">=0.1"
bincode = "^1"
borsh = ">=0.9,<1.0.0"
borsh = "1"
bytemuck = "^1"
clap = { version = "^4", features = ["derive"] }
data-encoding = "^2"
inquire = { version = "^0.7", default-features = false, features = ["crossterm"] }
jupiter-amm-interface = "^0.3"
jupiter-amm-interface = { version = "0.4.6" }
lazy_static = "^1"
num-derive = ">=0.3"
num-traits = ">=0.2"
proptest = "^1"
rust_decimal = ">=1.0,<=1.32.0" # anything >1.32 uses borsh ^1
sanctum-macros = "^1.2"
serde = "^1"
rust_decimal = "1.36" # anything >1.32 uses borsh ^1
sanctum-macros = { git = "https://github.com/jup-ag/sanctum-macros.git", rev = "7f2defa7c72aebea24b4bb4d2076ce8c0765086d" }
serde = "^1.0.197"
serde_json = "^1"
spl-pod = ">=0.1.0"
spl-token = ">=0.1.0"
spl-token-2022 = ">=0.1.0"
spl-token-metadata-interface = ">=0.1.0"
spl-associated-token-account = ">=0.1.0"
spl-token = "5.0.2"
spl-token-2022 = "5.0.2"
spl-token-metadata-interface = "0.5.1"
spl-associated-token-account = "5.0.1"
static_assertions = "^1"
thiserror = "^1"
tokio = "^1"

# DO NOT ENABLE `features = ["solana-sdk"]` HERE OR ELSE IT'LL MAKE ALL ONCHAIN PROGRAMS UNCOMPILABLE
# CLIENT CRATES SHOULD ENABLE IT SEPARATELY
solana-readonly-account = "^1.1"
solana-readonly-account = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }

# solana libraries (not pure rust)
# Use ^1 for flexibility for library users, but lock to 1.17.6 for deploy.
# To update versions, set solana-program and solana-program-test to `=<new-vers>`,
# then restore `^1` after Cargo.lock is updated
solana-account-decoder = "^1"
solana-client = "^1"
solana-program = "^1"
solana-program-test = "^1"
solana-rpc-client-api = "^1"
solana-sdk = "^1"
solana-transaction-status = "^1"
solana-account-decoder = "~2.0"
solana-client = "~2.0"
solana-program = "~2.0"
solana-program-test = "~2.0"
solana-rpc-client-api = "~2.0"
solana-sdk = "~2.0"
solana-transaction-status = "~2.0"

# sanctum-solana-utils
# TODO: use the same commit for everything once all the *-lib libs are ready, requires refactor
# 2d1718f is the older version, frozen for now due to breaking changes in these 3 libs
sanctum-associated-token-lib = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "2d1718f" }
sanctum-misc-utils = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "2d1718f" }
sanctum-token-lib = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "2d1718f" }
sanctum-solana-cli-utils = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0", features = ["clap"] }
sanctum-solana-client-utils = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0" }
sanctum-solana-test-utils = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0" }
sanctum-system-program-lib = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0" }
sanctum-token-ratio = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0" }
system_program_interface = { git = "https://github.com/igneous-labs/sanctum-solana-utils.git", rev = "f6c40a0" }
sanctum-associated-token-lib = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-misc-utils = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-token-lib = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-solana-cli-utils = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783", features = ["clap"] }
sanctum-solana-client-utils = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-solana-test-utils = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-system-program-lib = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
sanctum-token-ratio = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
system_program_interface = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }
spl_token_interface = { git = "https://github.com/jup-ag/sanctum-solana-utils.git", rev = "6e57519ae3e86e91d1f6d4f7de3bdf7a72b2d783" }

# sanctum-lst-list
sanctum-lst-list = { git = "https://github.com/igneous-labs/sanctum-lst-list.git", branch = "master" }
sanctum-lst-list = { git = "https://github.com/jup-ag/sanctum-lst-list.git", rev = "9feccf7ac1dca9394006a249e3b979761baac007" }

# stakedex
stakedex_interface = { git = "https://github.com/igneous-labs/stakedex-sdk.git", branch = "master" }
stakedex_marinade = { git = "https://github.com/igneous-labs/stakedex-sdk.git", branch = "master" }
stakedex_sdk_common = { git = "https://github.com/igneous-labs/stakedex-sdk.git", branch = "master" }
stakedex_spl_stake_pool = { git = "https://github.com/igneous-labs/stakedex-sdk.git", branch = "master" }
stakedex_interface = { git = "https://github.com/jup-ag/stakedex-sdk.git", rev = "e82a11c691a8db827aaa234277c2d48fd50d6721" }
stakedex_marinade = { git = "https://github.com/jup-ag/stakedex-sdk.git", rev = "e82a11c691a8db827aaa234277c2d48fd50d6721" }
stakedex_sdk_common = { git = "https://github.com/jup-ag/stakedex-sdk.git", rev = "e82a11c691a8db827aaa234277c2d48fd50d6721" }
stakedex_spl_stake_pool = { git = "https://github.com/jup-ag/stakedex-sdk.git", rev = "e82a11c691a8db827aaa234277c2d48fd50d6721" }

# workspace members
cli-test-utils = { path = "./cli/cli-test-utils" }
Expand Down Expand Up @@ -138,3 +139,6 @@ marinade-calculator = { path = "./programs/sol-value-calculator-programs/marinad
spl-calculator = { path = "./programs/sol-value-calculator-programs/spl-calculator" }
wsol-calculator = { path = "./programs/sol-value-calculator-programs/wsol-calculator" }
test-utils = { path = "./test-utils" }

[patch.crates-io]
spl-math = { git ="https://github.com/solana-labs/solana-program-library.git", rev = "d0f238f62ba03a7292924559a8f8d1adb4179cd5" }
2 changes: 1 addition & 1 deletion cli/generic-pool-calculator/src/sol_val_calc_arg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ pub enum SolValCalcArg {
}

impl SolValCalcArg {
pub const HELP_STR: &str = "A SOL Value Calculator Program. Can either be a program ID pubkey or one of the following known programs:
pub const HELP_STR: &'static str = "A SOL Value Calculator Program. Can either be a program ID pubkey or one of the following known programs:
- lido
- marinade
- sanctum-spl
Expand Down
1 change: 1 addition & 0 deletions cli/s-controller/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ path = "src/main.rs"
testing = ["s-controller/testing"]

[dependencies]
bincode = { workspace = true }
clap = { workspace = true }
data-encoding = { workspace = true }
flat-fee-lib = { workspace = true }
Expand Down
4 changes: 2 additions & 2 deletions cli/s-controller/src/deposit_sol.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::{collections::HashMap, error::Error};

use jupiter_amm_interface::SwapParams;
use jupiter_amm_interface::{AccountMap, SwapParams};
use sanctum_lst_list::{PoolInfo, SanctumLst, SplPoolAccounts};
use solana_sdk::{account::Account, instruction::Instruction, pubkey::Pubkey, system_program};
use spl_token::native_mint;
Expand Down Expand Up @@ -65,7 +65,7 @@ impl DepositSolStakedex {

pub fn update(
&mut self,
account_map: &HashMap<Pubkey, Account>,
account_map: &AccountMap,
) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
match self {
Self::Marinade(p) => {
Expand Down
19 changes: 14 additions & 5 deletions cli/s-controller/src/subcmd/rebal_sol.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
use std::collections::HashMap;
use std::{
collections::HashMap,
sync::{atomic::AtomicU64, Arc},
};

use clap::{
builder::{StringValueParser, TypedValueParser},
Args,
};
use inquire::Confirm;
use jupiter_amm_interface::SwapParams;
use jupiter_amm_interface::{AccountMap, SwapParams};
use s_cli_utils::handle_tx_full;
use s_controller_lib::{
end_rebalance_ix_from_start_rebalance_ix, find_lst_state_list_address,
Expand All @@ -19,7 +22,9 @@ use s_sol_val_calc_prog_aggregate::LstSolValCalc;
use sanctum_solana_cli_utils::parse_signer;
use sanctum_token_lib::{token_account_balance, MintWithTokenProgram};
use solana_readonly_account::keyed::Keyed;
use solana_sdk::{account::Account, native_token::lamports_to_sol, pubkey::Pubkey};
use solana_sdk::{
account::Account, clock::Clock, native_token::lamports_to_sol, pubkey::Pubkey, sysvar,
};
use spl_associated_token_account::{
get_associated_token_address_with_program_id,
instruction::create_associated_token_account_idempotent,
Expand Down Expand Up @@ -115,9 +120,11 @@ impl RebalSolArgs {
};

let mut fetched = rpc
.get_multiple_accounts(&[pool_id, lst_state_list_id])
.get_multiple_accounts(&[pool_id, lst_state_list_id, sysvar::clock::ID])
.await
.unwrap();
let clock = fetched.pop().unwrap().unwrap();
let clock: Clock = bincode::deserialize(&clock.data).unwrap();
let lst_state_list_acc = fetched.pop().unwrap().unwrap();
let pool_acc = fetched.pop().unwrap().unwrap();

Expand All @@ -128,6 +135,7 @@ impl RebalSolArgs {
pool_state: pool_acc,
},
&SANCTUM_LST_LIST.sanctum_lst_list,
&Arc::new(AtomicU64::new(clock.epoch)),
)
.unwrap();
let mut deposit_sol = DepositSolStakedex::from_sanctum_lst(sanctum_lst);
Expand All @@ -139,7 +147,7 @@ impl RebalSolArgs {
accounts_to_fetch.dedup();

// TODO: make sure accounts_to_fetch.len() < 5 or we get kicked by rpc
let account_map: HashMap<Pubkey, Account> = rpc
let account_map: AccountMap = rpc
.get_multiple_accounts(&accounts_to_fetch)
.await
.unwrap()
Expand Down Expand Up @@ -284,6 +292,7 @@ impl RebalSolArgs {
open_order_address: None,
quote_mint_to_referrer: None,
jupiter_program_id: &Pubkey::default(),
missing_dynamic_accounts_as_default: false,
})
.unwrap(),
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ workspace = true

[dependencies.solana-program]
workspace = true

[dependencies.jupiter-amm-interface]
workspace = true
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
solana_program::declare_id!("TH1S1SNoTAVAL1DPUBKEYUSETHE1MPLS1D1NSTEAD11");
pub mod instructions;
pub use instructions::*;
pub use jupiter_amm_interface::AccountMap;
24 changes: 14 additions & 10 deletions libs/aggregate/s-pricing-prog-aggregate/src/flat_fee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use flat_fee_lib::{
pda::{FeeAccountCreatePdaArgs, FeeAccountFindPdaArgs, ProgramStateFindPdaArgs},
utils::{try_fee_account, try_program_state},
};
use pricing_programs_interface::AccountMap;
use solana_program::{instruction::AccountMeta, pubkey::Pubkey};
use solana_readonly_account::ReadonlyAccountData;
use std::collections::HashMap;
Expand All @@ -24,15 +25,11 @@ use crate::{KnownPricingProg, MutablePricingProg, PricingProg, PricingProgErr};
#[derive(Clone, Debug, Default)]
pub struct FlatFeePricingProg {
program_id: Pubkey,
program_state: Option<ProgramState>,
program_state: Option<ProgramState>, // value = None means ProgramState not yet fetched
mints_to_fee_accounts: HashMap<Pubkey, Option<FeeAccount>>, // value = None means FeeAccount not yet fetched
}

impl FlatFeePricingProg {
pub fn program_id(&self) -> Pubkey {
self.program_id
}

pub fn find_program_state_addr(&self) -> Pubkey {
ProgramStateFindPdaArgs {
program_id: self.program_id,
Expand All @@ -41,13 +38,19 @@ impl FlatFeePricingProg {
.0
}

fn get_fee_account_checked(&self, lst_mint: &Pubkey) -> Result<&FeeAccount, FlatFeeError> {
#[inline]
pub fn get_fee_account_checked(&self, lst_mint: &Pubkey) -> Result<&FeeAccount, FlatFeeError> {
match self.mints_to_fee_accounts.get(lst_mint) {
Some(Some(a)) => Ok(a),
_ => Err(FlatFeeError::UnsupportedLstMint), // TODO: better error for when FeeAccount not yet fetched?
}
}

#[inline]
pub const fn program_state(&self) -> Option<&ProgramState> {
self.program_state.as_ref()
}

/// Returns (input_bump, output_bump)
fn get_cached_fee_account_bumps(
&self,
Expand Down Expand Up @@ -136,10 +139,7 @@ impl MutablePricingProg for FlatFeePricingProg {
.collect()
}

fn update<D: ReadonlyAccountData>(
&mut self,
account_map: &HashMap<Pubkey, D>,
) -> anyhow::Result<()> {
fn update(&mut self, account_map: &AccountMap) -> anyhow::Result<()> {
let psa = self.find_program_state_addr();
if let Some(acc) = account_map.get(&psa) {
self.program_state = Some(*try_program_state(&acc.data())?);
Expand Down Expand Up @@ -168,6 +168,10 @@ impl MutablePricingProg for FlatFeePricingProg {
}

impl PricingProg for FlatFeePricingProg {
fn pricing_program_id(&self) -> Pubkey {
self.program_id
}

fn quote_lp_tokens_to_redeem(
&self,
_output_lst_mint: Pubkey,
Expand Down
13 changes: 8 additions & 5 deletions libs/aggregate/s-pricing-prog-aggregate/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use pricing_programs_interface::{
PriceExactInIxArgs, PriceExactInKeys, PriceExactOutIxArgs, PriceExactOutKeys,
AccountMap, PriceExactInIxArgs, PriceExactInKeys, PriceExactOutIxArgs, PriceExactOutKeys,
PriceLpTokensToMintIxArgs, PriceLpTokensToRedeemIxArgs,
};
use solana_program::{instruction::AccountMeta, pubkey::Pubkey};
Expand Down Expand Up @@ -53,17 +53,20 @@ impl MutablePricingProg for KnownPricingProg {
}
}

fn update<D: ReadonlyAccountData>(
&mut self,
account_map: &HashMap<Pubkey, D>,
) -> anyhow::Result<()> {
fn update(&mut self, account_map: &AccountMap) -> anyhow::Result<()> {
match self {
Self::FlatFee(p) => p.update(account_map),
}
}
}

impl PricingProg for KnownPricingProg {
fn pricing_program_id(&self) -> Pubkey {
match self {
Self::FlatFee(p) => p.pricing_program_id(),
}
}

fn quote_lp_tokens_to_redeem(
&self,
output_lst_mint: Pubkey,
Expand Down
9 changes: 4 additions & 5 deletions libs/aggregate/s-pricing-prog-aggregate/src/traits.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::collections::HashMap;

use pricing_programs_interface::{
PriceExactInIxArgs, PriceExactInKeys, PriceExactOutIxArgs, PriceExactOutKeys,
AccountMap, PriceExactInIxArgs, PriceExactInKeys, PriceExactOutIxArgs, PriceExactOutKeys,
PriceLpTokensToMintIxArgs, PriceLpTokensToRedeemIxArgs,
};
use solana_program::{instruction::AccountMeta, pubkey::Pubkey};
Expand Down Expand Up @@ -68,13 +68,12 @@ pub trait MutablePricingProg {
/// Currently, all update() implementations
/// - no-ops if account to update is not in account_map
/// - errors if account exists but deserialization failed / other failure
fn update<D: ReadonlyAccountData>(
&mut self,
account_map: &HashMap<Pubkey, D>,
) -> anyhow::Result<()>;
fn update(&mut self, account_map: &AccountMap) -> anyhow::Result<()>;
}

pub trait PricingProg {
fn pricing_program_id(&self) -> Pubkey;

/// Returns SOL value of the LST to redeem
fn quote_lp_tokens_to_redeem(
&self,
Expand Down
3 changes: 2 additions & 1 deletion libs/aggregate/s-sol-val-calc-prog-aggregate/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "s-sol-val-calc-prog-aggregate"
version = "0.1.0"
version = "0.2.0"
edition = "2021"

[dependencies]
Expand All @@ -14,6 +14,7 @@ sol_value_calculator_interface = { workspace = true }
solana-program = { workspace = true }
solana-readonly-account = { workspace = true }
sol-value-calculator-lib = { workspace = true }
pricing_programs_interface = { workspace = true }

# lido
lido_calculator_interface = { workspace = true }
Expand Down
8 changes: 3 additions & 5 deletions libs/aggregate/s-sol-val-calc-prog-aggregate/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// TODO: all generic pool calculator implementations currently assume the stake pool program is never updated,
// otherwise, get_accounts_to_update() will include the very large programdata accounts.

use pricing_programs_interface::AccountMap;
use solana_program::{instruction::AccountMeta, pubkey::Pubkey};
use solana_readonly_account::ReadonlyAccountData;
use std::collections::HashMap;
Expand Down Expand Up @@ -45,10 +46,7 @@ impl MutableLstSolValCalc for KnownLstSolValCalc {
}
}

fn update<D: ReadonlyAccountData>(
&mut self,
account_map: &HashMap<Pubkey, D>,
) -> anyhow::Result<()> {
fn update(&mut self, account_map: &AccountMap) -> anyhow::Result<()> {
match self {
Self::Lido(s) => s.update(account_map),
Self::Marinade(s) => s.update(account_map),
Expand Down Expand Up @@ -79,7 +77,7 @@ impl LstSolValCalc for KnownLstSolValCalc {
Self::Spl(s) => s.lst_mint(),
Self::SanctumSpl(s) => s.lst_mint(),
Self::Wsol(s) => s.lst_mint(),
Self::SanctumSplMulti(s) => s.sol_value_calculator_program_id(),
Self::SanctumSplMulti(s) => s.lst_mint(),
}
}

Expand Down
Loading