drt_sc_modules/bonding_curve/curves/
linear_function.rs1drt_sc::imports!();
2drt_sc::derive_imports!();
3
4use crate::bonding_curve::{curves::curve_function::CurveFunction, utils::structs::CurveArguments};
5
6#[derive(TopEncode, TopDecode, NestedEncode, NestedDecode, TypeAbi, PartialEq, Eq, Clone)]
7pub struct LinearFunction<M: ManagedTypeApi> {
8 pub initial_price: BigUint<M>,
9 pub linear_coefficient: BigUint<M>,
10}
11
12impl<M: ManagedTypeApi> CurveFunction<M> for LinearFunction<M> {
13 fn calculate_price(
14 &self,
15 token_start: &BigUint<M>,
16 amount: &BigUint<M>,
17 _arguments: &CurveArguments<M>,
18 ) -> BigUint<M> {
19 &self.linear_coefficient * &sum_interval(amount, token_start) + &self.initial_price * amount
20 }
21}
22
23fn sum_interval<M: ManagedTypeApi>(n: &BigUint<M>, x: &BigUint<M>) -> BigUint<M> {
24 x * n + &(n - 1u32) * n / 2u32
25}