Skip to content

Implement Platform Revenue (Service Fee) #31

@Bosun-Josh121

Description

@Bosun-Josh121

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions