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 % 25 25
Test Date: 2025-11-10 13:03:30 Functions: 100.0 % 4 4
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                 :             : (impl-trait 'SP3JP0N1ZXGASRJ0F7QAHWFPGTVK9T2XNXDB908Z.extension-trait.extension-trait)
       9                 :             : 
      10                 :             : ;; Errors
      11                 :             : (define-constant err-order-exists (err u40001))
      12                 :             : (define-constant err-expiry-invalid (err u40002))
      13                 :             : (define-constant err-order-not-found (err u40003))
      14                 :             : (define-constant err-order-expired (err u40004))
      15                 :             : (define-constant err-payment-failed (err u40005))
      16                 :             : (define-constant err-share-transfer-failed (err u40006))
      17                 :             : (define-constant err-invalid-token (err u40007))
      18                 :             : 
      19                 :             : 
      20                 :             : (define-map share-orders
      21                 :             :   { market: principal, market-id: uint, outcome: uint, seller: principal }
      22                 :             :   { amount: uint, expiry-block: uint }
      23                 :             : )
      24                 :             : 
      25                 :          13 : (define-public (create-share-order
      26                 :             :   (market <prediction-market-trait>)
      27                 :             :   (market-id uint)
      28                 :             :   (outcome uint)
      29                 :             :   (amount uint)
      30                 :             :   (expires-after uint)
      31                 :             : )
      32                 :          16 :   (begin
      33            [ - ]:          16 :     (asserts! (> expires-after u10) err-expiry-invalid)
      34            [ + ]:          16 :     (asserts! (is-none (map-get? share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})) err-order-exists)
      35                 :             : 
      36                 :             :     ;; Only store the order no share transfer
      37                 :          15 :     (map-set share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender}
      38                 :          15 :       {amount: amount, expiry-block: (+ burn-block-height expires-after)})
      39                 :             : 
      40                 :          15 :     (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)})
      41                 :          15 :     (ok true)
      42                 :             :   )
      43                 :             : )
      44                 :             : 
      45                 :             : ;; fullfil a share sell order but adhere to market conditions - ie pay same market fee and cost the sake on the curve
      46                 :           9 : (define-public (fill-share-order
      47                 :             :   (market <prediction-market-trait>)
      48                 :             :   (market-id uint)
      49                 :             :   (outcome uint)
      50                 :             :   (seller principal)
      51                 :             :   (token <ft-token>)
      52                 :             : )
      53                 :          10 :   (let (
      54                 :          10 :     (order-key {market: (contract-of market), market-id: market-id, outcome: outcome, seller: seller})
      55                 :          10 :     (order (unwrap! (map-get? share-orders order-key) err-order-not-found))
      56                 :           8 :     (amount (get amount order))
      57                 :             :   )
      58            [ + ]:           8 :     (asserts! (< burn-block-height (get expiry-block order)) err-order-expired)
      59                 :             : 
      60                 :             :     ;; work of transfer in the market contract
      61                 :           7 :     (try! (contract-call? market transfer-shares market-id outcome seller tx-sender amount token))
      62                 :           6 :     (map-delete share-orders order-key)
      63                 :           6 :     (print {event: "fill-share-order", market: (contract-of market), market-id: market-id, outcome: outcome, buyer: tx-sender, seller: seller, amount: amount})
      64                 :           6 :     (ok true)
      65                 :             :   )
      66                 :             : )
      67                 :             : 
      68                 :             : ;; Public: cancel a listing (returns shares to seller)
      69                 :           2 : (define-public (cancel-share-order (market <prediction-market-trait>) (market-id uint) (outcome uint))
      70                 :           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)))
      71                 :           2 :     (map-delete share-orders {market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})
      72                 :           2 :     (print {event: "cancel-share-order", market: (contract-of market), market-id: market-id, outcome: outcome, seller: tx-sender})
      73                 :           2 :     (ok true)
      74                 :             :   )
      75                 :             : )
      76                 :             : 
      77                 :             : ;; --- Extension callback
      78                 :             : 
      79                 :           1 : (define-public (callback (sender principal) (memo (buff 34)))
      80                 :           1 :         (ok true)
      81                 :             : )
        

Generated by: LCOV version 2.3.2-1