LCOV - code coverage report
Current view: top level - contracts/extensions - bme040-0-shares-marketplace.clar (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 23 23
Test Date: 2025-11-05 10:54:00 Functions: 100.0 % 3 3
Branches: 66.7 % 3 2

             Branch data     Line data    Source code
       1                 :             : ;; Title: BME040 - Marketplace DAO Extension for Share Trading
       2                 :             : ;; Description: Enables CPMM Backed .
       3                 :             : ;; create a share order to sell market shares - note ths dao can be be enable to automatically fullfil orders
       4                 :             : ;; under certain conditions which means we can model 'sell-shares' without impacting market liquidity
       5                 :             : 
       6                 :             : (use-trait prediction-market-trait .prediction-market-trait.prediction-market-trait)
       7                 :             : (use-trait ft-token 'SP2AKWJYC7BNY18W1XXKPGP0YVEK63QJG4793Z2D4.sip-010-trait-ft-standard.sip-010-trait)
       8                 :             : 
       9                 :             : ;; Errors
      10                 :             : (define-constant err-order-exists (err u40001))
      11                 :             : (define-constant err-expiry-invalid (err u40002))
      12                 :             : (define-constant err-order-not-found (err u40003))
      13                 :             : (define-constant err-order-expired (err u40004))
      14                 :             : (define-constant err-payment-failed (err u40005))
      15                 :             : (define-constant err-share-transfer-failed (err u40006))
      16                 :             : (define-constant err-invalid-token (err u40007))
      17                 :             : 
      18                 :             : 
      19                 :             : (define-map share-orders
      20                 :             :   { market: principal, market-id: uint, outcome: uint, seller: principal }
      21                 :             :   { amount: uint, expiry-block: uint }
      22                 :             : )
      23                 :             : 
      24                 :          11 : (define-public (create-share-order
      25                 :             :   (market <prediction-market-trait>)
      26                 :             :   (market-id uint)
      27                 :             :   (outcome uint)
      28                 :             :   (amount uint)
      29                 :             :   (expires-after uint)
      30                 :             : )
      31                 :          14 :   (begin
      32            [ - ]:          14 :     (asserts! (> expires-after u10) err-expiry-invalid)
      33            [ + ]:          14 :     (asserts! (is-none (map-get? share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})) err-order-exists)
      34                 :             : 
      35                 :             :     ;; Only store the order no share transfer
      36                 :          13 :     (map-set share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender}
      37                 :          13 :       {amount: amount, expiry-block: (+ burn-block-height expires-after)})
      38                 :             : 
      39                 :          13 :     (print {event: "create-share-order", market: (contract-of market), market-id: market-id, outcome: outcome, amount: amount, seller: tx-sender, expiry-block: (+ burn-block-height expires-after)})
      40                 :          13 :     (ok true)
      41                 :             :   )
      42                 :             : )
      43                 :             : 
      44                 :             : ;; fullfil a share sell order but adhere to market conditions - ie pay same market fee and cost the sake on the curve
      45                 :           7 : (define-public (fill-share-order
      46                 :             :   (market <prediction-market-trait>)
      47                 :             :   (market-id uint)
      48                 :             :   (outcome uint)
      49                 :             :   (seller principal)
      50                 :             :   (token <ft-token>)
      51                 :             : )
      52                 :           8 :   (let (
      53                 :           8 :     (order-key {market: (contract-of market), market-id: market-id, outcome: outcome, seller: seller})
      54                 :           8 :     (order (unwrap! (map-get? share-orders order-key) err-order-not-found))
      55                 :           6 :     (amount (get amount order))
      56                 :             :   )
      57            [ + ]:           6 :     (asserts! (< burn-block-height (get expiry-block order)) err-order-expired)
      58                 :             : 
      59                 :             :     ;; work of transfer in the market contract
      60                 :           5 :     (try! (contract-call? market transfer-shares market-id outcome seller tx-sender amount token))
      61                 :           4 :     (map-delete share-orders order-key)
      62                 :           4 :     (print {event: "fill-share-order", market: (contract-of market), market-id: market-id, outcome: outcome, buyer: tx-sender, seller: seller, amount: amount})
      63                 :           4 :     (ok true)
      64                 :             :   )
      65                 :             : )
      66                 :             : 
      67                 :             : ;; Public: cancel a listing (returns shares to seller)
      68                 :           2 : (define-public (cancel-share-order (market <prediction-market-trait>) (market-id uint) (outcome uint))
      69                 :           2 :   (let ((order (unwrap! (map-get? share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender}) err-order-not-found)))
      70                 :           2 :     (map-delete share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})
      71                 :           2 :     (print {event: "cancel-share-order", market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})
      72                 :           2 :     (ok true)
      73                 :             :   )
      74                 :             : )
        

Generated by: LCOV version 2.3.2-1