Skip to content

[Contract] Build Asset Leasing Module #476

@yusuftomilola

Description

@yusuftomilola

Enables an asset owner (lessor) to lease an asset to a lessee for a defined period with rent terms tracked on-chain.

Requirements

Lease struct: lease_id: BytesN<32>, asset_id: BytesN<32>, lessor: Address, lessee: Address, start_timestamp: u64, end_timestamp: u64, rent_per_period: i128, deposit: i128, status: LeaseStatus (Active, Returned, Cancelled, Expired)

Functions:

  • create_lease(env, asset_id, lease_id, lessor, lessee, start, end, rent, deposit) — lessor authenticates; asset must not already have an active lease; stores lease and updates asset active lease index; emits event
  • return_leased_asset(env, lease_id, caller) — lessor or lessee; sets status to Returned; clears active lease index
  • cancel_lease(env, lease_id, caller) — lessor only; only before start_timestamp
  • expire_lease(env, lease_id) — permissionless; only if end_timestamp < now; sets Expired
  • get_lease(env, lease_id)
  • get_asset_active_lease(env, asset_id) — returns Option<BytesN<32>>
  • get_lessee_leases(env, lessee) — index of all lease IDs for a lessee

Acceptance Criteria

  • Creating a lease on an already-leased asset fails
  • cancel_lease fails after the lease start timestamp
  • Lessee index updated on creation

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions