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%.
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: