Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
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 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions controller/jiminy/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ version.workspace = true

[dependencies]
inf1-ctl-core = { workspace = true }
inf1-svc-core = { workspace = true }
inf1-pp-core = { workspace = true }
jiminy-cpi = { workspace = true }
jiminy-log = { workspace = true }
jiminy-pda = { workspace = true }
Expand Down
69 changes: 69 additions & 0 deletions controller/jiminy/src/cpi.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,77 @@
use core::ops::RangeInclusive;

use inf1_ctl_core::instructions::sync_sol_value::SyncSolValueIxPreAccs;
use inf1_pp_core::{
instructions::price::{exact_in::PriceExactInIxArgs, exact_out::PriceExactOutIxArgs},
traits::main::{PriceExactIn, PriceExactOut},
};
use inf1_svc_core::traits::SolValCalc;
use jiminy_cpi::account::AccountHandle;
use jiminy_program_error::ProgramError;

/// `S: AsRef<[AccountHandle]>`
/// -> use [`IxAccountHandles::seq`] with [`jiminy_cpi::Cpi::invoke_fwd`]
pub type SyncSolValueIxPreAccountHandles<'account> = SyncSolValueIxPreAccs<AccountHandle<'account>>;

// TODO: make invoke() helpers for client programs

/// Wrapper for the return value from CPI call to `sol-val-calc` program
///
/// This is then used to implement the `SolValCalc` trait
/// so as to have re-use the same `quote_*` functions
#[repr(transparent)]
pub struct LstToSolRetVal(pub RangeInclusive<u64>);

/// Wrapper for the return value from CPI call to `sol-val-calc` program
///
/// This is then used to implement the `SolValCalc` trait
/// so as to have re-use the same `quote_*` functions
#[repr(transparent)]
pub struct SolToLstRetVal(pub RangeInclusive<u64>);

impl SolValCalc for LstToSolRetVal {
type Error = ProgramError;

fn lst_to_sol(&self, _lst_amount: u64) -> Result<RangeInclusive<u64>, Self::Error> {
Ok(self.0.clone())
}

/// **NOTE:** This function should not be called with LstToSolRetVal
fn sol_to_lst(&self, _lamports_amount: u64) -> Result<RangeInclusive<u64>, Self::Error> {
unreachable!()
}
}

impl SolValCalc for SolToLstRetVal {
type Error = ProgramError;

fn lst_to_sol(&self, _lst_amount: u64) -> Result<RangeInclusive<u64>, Self::Error> {
unreachable!()
}

fn sol_to_lst(&self, _lamports_amount: u64) -> Result<RangeInclusive<u64>, Self::Error> {
Ok(self.0.clone())
}
}

/// Wrapper for the return value from CPI call to `pricing` program
///
/// This is used to implement the `PriceExactIn` and `PriceExactOut` traits
/// so as to have reuse the same `quote_*` functions
pub struct PricingRetVal(pub u64);

impl PriceExactIn for PricingRetVal {
type Error = ProgramError;

fn price_exact_in(&self, _input: PriceExactInIxArgs) -> Result<u64, Self::Error> {
Ok(self.0)
}
}

impl PriceExactOut for PricingRetVal {
type Error = ProgramError;

fn price_exact_out(&self, _output: PriceExactOutIxArgs) -> Result<u64, Self::Error> {
Ok(self.0)
}
}