pub struct VaeaFlash { /* private fields */ }Expand description
VAEA Flash — Universal Flash Loan SDK for Solana (Rust)
§Example
use vaea_flash::{VaeaFlash, BorrowParams, VaeaConfig, Source};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payer = solana_sdk::signature::Keypair::new();
let flash = VaeaFlash::new("https://api.devnet.vaea.fi", &payer)?;
let capacity = flash.get_capacity().await?;
println!("Available tokens: {}", capacity.tokens.len());
let quote = flash.get_quote("SOL", 1000.0).await?;
println!("Fee: {}%", quote.fee_breakdown.total_fee_pct);
Ok(())
}Implementations§
Source§impl VaeaFlash
impl VaeaFlash
Sourcepub fn new(api_url: &str, payer: &Keypair) -> Result<Self, VaeaError>
pub fn new(api_url: &str, payer: &Keypair) -> Result<Self, VaeaError>
Create a new VaeaFlash client.
Sourcepub fn with_rpc(
api_url: &str,
rpc_url: &str,
payer: &Keypair,
) -> Result<Self, VaeaError>
pub fn with_rpc( api_url: &str, rpc_url: &str, payer: &Keypair, ) -> Result<Self, VaeaError>
Create with full config including RPC for execute().
Sourcepub fn with_source(self, source: Source) -> Self
pub fn with_source(self, source: Source) -> Self
Set fee source (sdk or ui).
Sourcepub async fn get_capacity(&self) -> Result<CapacityResponse, VaeaError>
pub async fn get_capacity(&self) -> Result<CapacityResponse, VaeaError>
Get real-time capacity for all dynamically discovered tokens (120+).
Sourcepub async fn get_quote(
&self,
token: &str,
amount: f64,
) -> Result<QuoteResponse, VaeaError>
pub async fn get_quote( &self, token: &str, amount: f64, ) -> Result<QuoteResponse, VaeaError>
Get a detailed quote with fee breakdown.
Sourcepub async fn build(
&self,
request: &BuildRequest,
) -> Result<BuildResponse, VaeaError>
pub async fn build( &self, request: &BuildRequest, ) -> Result<BuildResponse, VaeaError>
Build prefix + suffix instructions for a flash loan.
Sourcepub async fn get_health(&self) -> Result<HealthResponse, VaeaError>
pub async fn get_health(&self) -> Result<HealthResponse, VaeaError>
Check system health.
Sourcepub async fn get_matrix(&self) -> Result<MatrixResponse, VaeaError>
pub async fn get_matrix(&self) -> Result<MatrixResponse, VaeaError>
Get the full liquidity matrix — per-protocol per-token available liquidity.
Sourcepub async fn get_discovery(&self) -> Result<DiscoverySummary, VaeaError>
pub async fn get_discovery(&self) -> Result<DiscoverySummary, VaeaError>
Get discovery summary — how many tokens were found during boot-time scanning.
Sourcepub async fn get_route(
&self,
token: &str,
amount: f64,
max_fee_bps: u16,
) -> Result<ResolvedRoute, VaeaError>
pub async fn get_route( &self, token: &str, amount: f64, max_fee_bps: u16, ) -> Result<ResolvedRoute, VaeaError>
Resolve the optimal flash loan route for any supported token.
The Smart Router evaluates all direct routes across Marginfi, Kamino, and Jupiter Lend, then returns the cheapest feasible path.
Sourcepub async fn get_sources(&self) -> Result<SourcesResponse, VaeaError>
pub async fn get_sources(&self) -> Result<SourcesResponse, VaeaError>
Get information about all supported lending protocols.
Sourcepub async fn get_aggregated_capacity(
&self,
) -> Result<AggregatedCapacityResponse, VaeaError>
pub async fn get_aggregated_capacity( &self, ) -> Result<AggregatedCapacityResponse, VaeaError>
Get capacity breakdown per source (Marginfi, Kamino, Jupiter Lend) for each token.
Sourcepub async fn borrow(
&self,
params: &BorrowParams,
) -> Result<Vec<Instruction>, VaeaError>
pub async fn borrow( &self, params: &BorrowParams, ) -> Result<Vec<Instruction>, VaeaError>
Build flash loan instructions with user instructions sandwiched.
Sourcepub async fn execute(&self, params: BorrowParams) -> Result<String, VaeaError>
pub async fn execute(&self, params: BorrowParams) -> Result<String, VaeaError>
Build, sign, and send a flash loan transaction. Automatically uses the VAEA Address Lookup Table for TX compression.
Sourcepub async fn simulate(
&self,
params: &BorrowParams,
) -> Result<SimulateResult, VaeaError>
pub async fn simulate( &self, params: &BorrowParams, ) -> Result<SimulateResult, VaeaError>
Simulate a flash loan transaction without sending it. Returns success/failure, CU consumption, and program logs.
Sourcepub async fn borrow_multi(
&self,
params: &BorrowMultiParams,
) -> Result<Vec<Instruction>, VaeaError>
pub async fn borrow_multi( &self, params: &BorrowMultiParams, ) -> Result<Vec<Instruction>, VaeaError>
Build a multi-token atomic flash loan with nested sandwich pattern: prefix_A → prefix_B → [user IXs] → suffix_B → suffix_A
Sourcepub async fn is_profitable(
&self,
params: &ProfitabilityParams,
) -> Result<ProfitabilityResult, VaeaError>
pub async fn is_profitable( &self, params: &ProfitabilityParams, ) -> Result<ProfitabilityResult, VaeaError>
Check if a flash loan strategy is profitable after all fees.
Sourcepub fn borrow_local(
&self,
params: &BorrowParams,
) -> Result<Vec<Instruction>, VaeaError>
pub fn borrow_local( &self, params: &BorrowParams, ) -> Result<Vec<Instruction>, VaeaError>
Build flash loan instructions 100% locally — NO API call.
~0.1ms vs ~80ms for borrow(). Use this for latency-critical bots. The instructions are identical to what /v1/build returns.
let ixs = flash.borrow_local(&BorrowParams {
token: "SOL".to_string(),
amount: 1000.0,
instructions: vec![/* your arb IXs */],
slippage_bps: None,
max_fee_bps: None,
})?;Sourcepub async fn execute_local(
&self,
params: BorrowParams,
) -> Result<String, VaeaError>
pub async fn execute_local( &self, params: BorrowParams, ) -> Result<String, VaeaError>
Build, sign, and send a flash loan in ~100ms — NO API call.
Uses local instruction building + direct RPC. Critical path: localBuild(<1ms) → getBlockhash(~50ms) → send(~50ms)
Sourcepub async fn execute_smart(
&self,
params: BorrowParams,
) -> Result<String, VaeaError>
pub async fn execute_smart( &self, params: BorrowParams, ) -> Result<String, VaeaError>
Build, sign, and send a flash loan with intelligent route selection.
The Smart Router evaluates ALL available paths across Marginfi, Kamino, and Jupiter Lend, then selects the cheapest feasible route automatically. Falls back to execute_local() if the API is unavailable.
Sourcepub async fn read_flash_state(
&self,
payer_key: &Pubkey,
token_mint: &Pubkey,
) -> Result<Option<FlashStateInfo>, VaeaError>
pub async fn read_flash_state( &self, payer_key: &Pubkey, token_mint: &Pubkey, ) -> Result<Option<FlashStateInfo>, VaeaError>
Read an active FlashState PDA from the chain.
Use this to verify a flash loan is active without CPI — just pass the PDA as a read-only account.
Cost: 1 RPC call (~5ms). On-chain equivalent: ~2K CU via vaea-flash-ctx crate.
Auto Trait Implementations§
impl Freeze for VaeaFlash
impl !RefUnwindSafe for VaeaFlash
impl Send for VaeaFlash
impl Sync for VaeaFlash
impl Unpin for VaeaFlash
impl UnsafeUnpin for VaeaFlash
impl !UnwindSafe for VaeaFlash
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more