pub const MARKETPLACE_COMMISSION_BPS: u16 = 500;
pub fn split_marketplace_fee(fee: u128, commission_bps: u16) -> (u128, u128) {
let bps = (commission_bps as u128).min(10_000);
let commission = fee.saturating_mul(bps) / 10_000u128;
let creator_share = fee.saturating_sub(commission);
(commission, creator_share)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn split_5_percent_of_one_tnzo() {
let one_tnzo: u128 = 1_000_000_000_000_000_000;
let (commission, creator) = split_marketplace_fee(one_tnzo, MARKETPLACE_COMMISSION_BPS);
assert_eq!(commission, 50_000_000_000_000_000); assert_eq!(creator, 950_000_000_000_000_000); assert_eq!(commission + creator, one_tnzo);
}
#[test]
fn split_zero_fee_yields_zero() {
let (c, k) = split_marketplace_fee(0, MARKETPLACE_COMMISSION_BPS);
assert_eq!(c, 0);
assert_eq!(k, 0);
}
#[test]
fn split_caps_bps_at_10_000() {
let (c, k) = split_marketplace_fee(1_000, 20_000);
assert_eq!(c, 1_000);
assert_eq!(k, 0);
}
}