LCOV - code coverage report
Current view: top level - contracts/extensions - bme010-0-liquidity-contribution.clar (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 34 34
Test Date: 2025-11-10 13:03:30 Functions: 100.0 % 5 5
Branches: 100.0 % 6 6

             Branch data     Line data    Source code
       1                 :             : ;; Title: BME010 Reputation-Gated Liquidity Contribution
       2                 :             : ;; Synopsis:
       3                 :             : ;; Accept STX from contributors and reward them with BIGR reputation tokens
       4                 :             : ;; Description:
       5                 :             : ;; Users are rewarded with BIGR by contributing STX to the DAO treasury.
       6                 :             : ;; BIGR is used to claim BIG through the main reputation contract.
       7                 :             : ;; The rate is set by the DAO and can be updated as needed.
       8                 :             : 
       9                 :             : (impl-trait 'SP3JP0N1ZXGASRJ0F7QAHWFPGTVK9T2XNXDB908Z.extension-trait.extension-trait)
      10                 :             : 
      11                 :             : ;; Constants and Errors
      12                 :             : (define-constant err-unauthorised (err u5000))
      13                 :             : (define-constant err-minimum-stx (err u5002))
      14                 :             : 
      15                 :             : (define-constant MICROSTX u1000000)
      16                 :             : (define-constant SCALE u1000000)
      17                 :             : 
      18                 :             : ;; 10,10 -- > 1 STX = 1 BIGR, 10 STX = 3 BIGR, 100 STX = 10 BIGR
      19                 :             : (define-data-var stx-to-bigr-rate uint u10)
      20                 :             : (define-data-var stx-to-bigr-dampener uint u10)
      21                 :             : 
      22                 :             : (define-map stx-contributions {who: principal} uint)
      23                 :             : 
      24                 :             : ;; Authorization check
      25                 :           3 : (define-public (is-dao-or-extension)
      26    [ + ][ +  + ]:           3 :   (ok (asserts! (or (is-eq tx-sender .bigmarket-dao) (contract-call? .bigmarket-dao is-extension contract-caller)) err-unauthorised))
      27                 :             : )
      28                 :             : 
      29                 :             : ;; DAO can update the reward rate
      30                 :           3 : (define-public (set-liquidity-reward-params (params {rate: uint, dampener: uint}))
      31                 :           3 :   (begin
      32                 :           3 :     (try! (is-dao-or-extension))
      33                 :           2 :     (var-set stx-to-bigr-rate (get rate params))
      34                 :           2 :     (var-set stx-to-bigr-dampener (get dampener params))
      35                 :           2 :     (ok true)
      36                 :             :   )
      37                 :             : )
      38                 :             : ;; DAO can update the reward dampener
      39                 :           2 : (define-read-only (get-liquidity-reward-params)
      40                 :             :   {
      41                 :           2 :     rate: (var-get stx-to-bigr-rate),
      42                 :           2 :     dampener: (var-get stx-to-bigr-dampener)
      43                 :             :   }
      44                 :             : )
      45                 :             : 
      46                 :           5 : (define-public (contribute-stx (amount uint))
      47                 :          11 :   (let (
      48                 :          11 :         (user tx-sender)
      49                 :          11 :         (rate (var-get stx-to-bigr-rate))
      50                 :          11 :         (dampener (var-get stx-to-bigr-dampener))
      51                 :          11 :         (amount-stx (/ amount MICROSTX))
      52                 :          11 :         (sqrt-amount (sqrti amount-stx))
      53                 :          11 :         (bigr-earned-scaled (/ (* (* sqrt-amount rate) SCALE) dampener))
      54                 :          11 :         (bigr-earned (/ bigr-earned-scaled SCALE))
      55                 :          11 :         (existing (default-to u0 (map-get? stx-contributions {who: user})))
      56                 :             :       )
      57                 :             : 
      58                 :             :     ;; if rate == 0, short-circuit no transfer, no mint
      59                 :          11 :     (if (is-eq rate u0)
      60            [ + ]:           1 :         (begin
      61                 :           1 :           (print {event: "liquidity_contribution_skipped", from: user, rate: rate})
      62                 :           1 :           (ok u0)
      63                 :             :         )
      64            [ + ]:          10 :         (begin
      65                 :             :           ;; must contribute at least 1 STX
      66            [ + ]:          10 :           (asserts! (>= amount MICROSTX) err-minimum-stx)
      67                 :             : 
      68                 :             :           ;; transfer STX to treasury
      69                 :           9 :           (try! (stx-transfer? amount user .bme006-0-treasury))
      70                 :             : 
      71                 :             :           ;; record contribution and mint reputation
      72                 :           9 :           (map-set stx-contributions {who: user} (+ existing amount))
      73                 :           9 :           (try! (contract-call? .bme030-0-reputation-token mint user u4 bigr-earned))
      74                 :             : 
      75                 :           9 :           (print {event: "liquidity_contribution", from: user, amount: amount, bigr: bigr-earned, rate: rate, dampener: dampener})
      76                 :           9 :           (ok bigr-earned)
      77                 :             :         )
      78                 :             :     )
      79                 :             :   )
      80                 :             : )
      81                 :             : 
      82                 :             : ;; Extension trait callback stub
      83                 :           1 : (define-public (callback (sender principal) (memo (buff 34)))
      84                 :           1 :   (ok true)
      85                 :             : )
        

Generated by: LCOV version 2.3.2-1