60 lines
2.0 KiB
Rust
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); |