Calculates, validates, and securely distributes royalties and fees according to economic parameters.
use std::string; use std::type_name; use sui::coin; use sui::sui; use sage_admin::admin; use sage_admin::apps;
Royalties
public struct Royalties has key
Show Fields
id: sui::object::UID, app: address, custom_coin_type: std::type_name::TypeName, partner_fee: u64, partner_treasury: address, protocol_fee: u64, protocol_treasury: address
const FEE_LIMIT: u64 = 9800;
FEE_LIMIT
const SCALE: u64 = 10000;
const EInvalidFeeValue: u64 = 370;
collect_payment
public fun collect_payment<CoinType>(custom_coin: Coin<CoinType>, sui_coin: Coin<SUI>)
Show Implementation
public fun collect_payment<CoinType> ( custom_coin: Coin<CoinType>, sui_coin: Coin<SUI> ) { transfer::public_transfer( custom_coin, @treasury ); transfer::public_transfer( sui_coin, @treasury ); }
distribute_payment
public fun distribute_payment<CoinType>(royalties: &Royalties, custom_payment: Coin<CoinType>, sui_payment: Coin<SUI>, recipient: address, ctx: &mut TxContext)
public fun distribute_payment<CoinType> ( royalties: &Royalties, custom_payment: Coin<CoinType>, sui_payment: Coin<SUI>, recipient: address, ctx: &mut TxContext ) { let custom_payment_value = custom_payment.value(); let custom_payment = if ( royalties.partner_fee > 0 ) { distribute_royalty<CoinType>( royalties.partner_fee, custom_payment, custom_payment_value, royalties.partner_treasury, ctx ) } else { custom_payment }; let custom_payment = if ( royalties.protocol_fee > 0 ) { distribute_royalty<CoinType>( royalties.protocol_fee, custom_payment, custom_payment_value, royalties.protocol_treasury, ctx ) } else { custom_payment }; transfer::public_transfer(custom_payment, recipient); transfer::public_transfer(sui_payment, @treasury); }