Skip to content

[CT-14] Implement escrow conditional release in contrib/escrow.rs in opsce crate #813

@yusuftomilola

Description

@yusuftomilola

Problem

contracts/contrib/src/escrow.rs exists but has no release_escrow() or dispute_escrow() functions. Funds can be deposited into escrow but can never be released, making escrow-based asset transfers permanently locked.

Proposed Solution

Create contracts/opsce/src/escrow_release.rs. Implement release_escrow(env, escrow_id) triggered on condition fulfillment and dispute_escrow(env, escrow_id, reason) for contested releases.

Acceptance Criteria

  • create_escrow(env, asset_id, amount, recipient, condition_hash) stores an escrow record
  • release_escrow(env, escrow_id) transfers funds to recipient — can be called by the depositor or admin
  • dispute_escrow(env, escrow_id, reason) freezes the escrow and requires admin resolution
  • resolve_dispute(env, escrow_id, release_to_recipient) called by admin to settle (admin only)
  • EscrowStatus enum: Active, Released, Disputed, Resolved
  • Emits escrow_released and dispute_raised events
  • Unit tests cover: normal release, dispute flow, admin resolution, non-party release attempt

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions