-
Notifications
You must be signed in to change notification settings - Fork 15
Implement Platform Revenue (Service Fee) #31
Copy link
Copy link
Open
Labels
Description
Target Contract: payment-vault-contract
Labels: phase-1-vault, business-logic
Description: Extract a percentage-based fee (in Basis Points, where 10000 = 100%) on successful sessions to generate platform revenue. This fee must be deducted from the expert's gross pay, not the user's refund.
Tasks:
src/error.rs: Add FeeTooHigh = 11.src/storage.rs: Add DataKey::FeeBps and DataKey::Treasury. Add setters/getters.src/contract.rs: Implement set_fee(env, new_fee_bps) (cap at 2000 BPS) and set_treasury(env, treasury). Require admin.require_auth(). In finalize_session, calculate fee = (expert_pay * fee_bps) / 10000. Transfer fee to Treasury and expert_pay - fee to Expert.src/lib.rs: Inside #[contractimpl], expose pub fn set_fee(env: Env, new_fee_bps: u32) -> Result<(), VaultError> and pub fn set_treasury(env: Env, treasury: Address) -> Result<(), VaultError>.src/events.rs: Update session_finalized to emit fee_amount.src/test.rs: Mock a 10% fee. Assert treasury, expert, and user receive exact expected token amounts.
Acceptance Criteria:
- Contract correctly calculates fractional fees using BPS.
- Admin cannot raise fee above 20%.
Reactions are currently unavailable