Skip to main content

weighted_pool_swap/
weighted_pool_swap.rs

1use solmath::{fp, weighted_pool_swap, SolMathError, SCALE};
2
3fn as_decimal(x: u128) -> f64 {
4    x as f64 / SCALE as f64
5}
6
7fn main() -> Result<(), SolMathError> {
8    // Run with:
9    // cargo run --example weighted_pool_swap --features pool
10    let balance_in = fp("1000")?;
11    let balance_out = fp("1000")?;
12    let amount_in = fp("10")?;
13    let weight_in = fp("0.5")?;
14    let weight_out = fp("0.5")?;
15    let fee_rate = fp("0.003")?;
16
17    let (net_out, fee) = weighted_pool_swap(
18        balance_in,
19        balance_out,
20        weight_in,
21        weight_out,
22        amount_in,
23        fee_rate,
24    )?;
25
26    println!("net_out: {:.12}", as_decimal(net_out));
27    println!("fee:     {:.12}", as_decimal(fee));
28
29    Ok(())
30}