Files
my_solana_bot/benches/bonding_curve_bench.rs
2026-07-21 00:14:46 +08:00

60 lines
2.0 KiB
Rust

//! Bonding Curve 数学计算基准测试
use criterion::{black_box, criterion_group, criterion_main, Criterion};
// 注意: 需要 bonding_curve 模块可访问
// 实际使用时可能需要调整路径
fn bench_calculate_buy(c: &mut Criterion) {
let virtual_sol = 30_000_000_000u64; // 30 SOL
let virtual_token = 1_073_000_191_000_000u64;
let real_token = 793_100_000_000_000u64;
let sol_amount = 1_000_000_000u64; // 1 SOL
c.bench_function("calculate_buy_1_sol", |b| {
b.iter(|| {
// 内联计算 (避免模块路径问题)
let input_after_fee = (sol_amount - 1) * 10000 / (125 + 10000) + 1;
let numerator = input_after_fee as u128 * virtual_token as u128;
let denominator = virtual_sol as u128 + input_after_fee as u128;
let tokens_out = (numerator / denominator) as u64;
black_box(tokens_out.min(real_token))
})
});
}
fn bench_calculate_sell(c: &mut Criterion) {
let virtual_sol = 31_000_000_000u64;
let virtual_token = 1_038_000_000_000_000u64;
let token_amount = 34_000_000_000_000u64;
c.bench_function("calculate_sell", |b| {
b.iter(|| {
let numerator = token_amount as u128 * virtual_sol as u128;
let denominator = virtual_token as u128 + token_amount as u128;
let sol_out_raw = (numerator / denominator) as u64;
let sol_out = sol_out_raw * (10000 - 125) / 10000;
black_box(sol_out)
})
});
}
fn bench_price_calculation(c: &mut Criterion) {
let virtual_sol = 50_000_000_000u64;
let virtual_token = 643_800_000_000_000u64;
c.bench_function("spot_price", |b| {
b.iter(|| {
let price = virtual_sol as f64 / virtual_token as f64;
black_box(price * 1_000_000.0 / 1_000_000_000.0)
})
});
}
criterion_group!(
benches,
bench_calculate_buy,
bench_calculate_sell,
bench_price_calculation,
);
criterion_main!(benches);