LCOV - code coverage report
Current view: top level - contracts - bigmarket-dao.clar (source / functions) Coverage Total Hit
Test: lcov.info Lines: 71.4 % 35 25
Test Date: 2025-11-05 13:50:37 Functions: 77.8 % 9 7
Branches: 57.1 % 7 4

             Branch data     Line data    Source code
       1                 :             : ;; BigMarket DAO
       2                 :             : ;; Synopsis:
       3                 :             : ;; bigmarket-dao is the core of the dao framework.
       4                 :             : ;; Description:
       5                 :             : ;; Valid extensions must be registered here. The DAO is bootstrapped
       6                 :             : ;; by calling construct with a bootstrap proposal.
       7                 :             : 
       8                 :             : (use-trait extension-trait 'SP3JP0N1ZXGASRJ0F7QAHWFPGTVK9T2XNXDB908Z.extension-trait.extension-trait)
       9                 :             : (use-trait proposal-trait 'SP3JP0N1ZXGASRJ0F7QAHWFPGTVK9T2XNXDB908Z.proposal-trait.proposal-trait)
      10                 :             : 
      11                 :             : (define-constant err-unauthorised (err u1000))
      12                 :             : (define-constant err-already-executed (err u1001))
      13                 :             : (define-constant err-invalid-extension (err u1002))
      14                 :             : 
      15                 :             : (define-data-var executive principal tx-sender)
      16                 :             : (define-map executed-proposals principal uint)
      17                 :             : (define-map extensions principal bool)
      18                 :             : 
      19                 :             : ;; --- Authorisation check
      20                 :             : 
      21                 :         300 : (define-private (is-self-or-extension)
      22    [ - ][ +  + ]:         704 :         (ok (asserts! (or (is-eq tx-sender (as-contract tx-sender)) (is-extension contract-caller)) err-unauthorised))
      23                 :             : )
      24                 :             : 
      25                 :             : ;; --- Extensions
      26                 :             : 
      27                 :         277 : (define-read-only (is-extension (extension principal))
      28                 :         808 :         (default-to false (map-get? extensions extension))
      29                 :             : )
      30                 :             : 
      31                 :           0 : (define-public (set-extension (extension principal) (enabled bool))
      32                 :           0 :         (begin
      33                 :           0 :                 (try! (is-self-or-extension))
      34                 :           0 :                 (print {event: "extension", extension: extension, enabled: enabled})
      35                 :           0 :                 (ok (map-set extensions extension enabled))
      36                 :             :         )
      37                 :             : )
      38                 :             : 
      39                 :         300 : (define-private (set-extensions-iter (item {extension: principal, enabled: bool}))
      40                 :        4211 :         (begin
      41                 :        4211 :                 (print {event: "extension", extension: (get extension item), enabled: (get enabled item)})
      42                 :        4211 :                 (map-set extensions (get extension item) (get enabled item))
      43                 :             :         )
      44                 :             : )
      45                 :             : 
      46                 :         300 : (define-public (set-extensions (extension-list (list 200 {extension: principal, enabled: bool})))
      47                 :         310 :         (begin
      48                 :         310 :                 (try! (is-self-or-extension))
      49                 :         310 :                 (ok (map set-extensions-iter extension-list))
      50                 :             :         )
      51                 :             : )
      52                 :             : 
      53                 :             : ;; --- Proposals
      54                 :             : 
      55                 :          54 : (define-read-only (executed-at (proposal <proposal-trait>))
      56                 :          79 :         (map-get? executed-proposals (contract-of proposal))
      57                 :             : )
      58                 :             : 
      59                 :         300 : (define-public (execute (proposal <proposal-trait>) (sender principal))
      60                 :         394 :         (begin
      61                 :         394 :                 (try! (is-self-or-extension))
      62            [ + ]:         394 :                 (asserts! (map-insert executed-proposals (contract-of proposal) stacks-block-height) err-already-executed)
      63                 :         370 :                 (print {event: "execute", proposal: proposal})
      64                 :         370 :                 (as-contract (contract-call? proposal execute sender))
      65                 :             :         )
      66                 :             : )
      67                 :             : 
      68                 :             : ;; --- Bootstrap
      69                 :             : 
      70                 :         300 : (define-public (construct (proposal <proposal-trait>))
      71                 :         415 :         (let ((sender tx-sender))
      72            [ + ]:         415 :                 (asserts! (is-eq sender (var-get executive)) err-unauthorised)
      73                 :         300 :                 (var-set executive (as-contract tx-sender))
      74                 :         300 :                 (as-contract (execute proposal sender))
      75                 :             :         )
      76                 :             : )
      77                 :             : 
      78                 :             : ;; --- Extension requests
      79                 :             : 
      80                 :           0 : (define-public (request-extension-callback (extension <extension-trait>) (memo (buff 34)))
      81                 :           0 :         (let ((sender tx-sender))
      82            [ - ]:           0 :                 (asserts! (is-extension contract-caller) err-invalid-extension)
      83            [ - ]:           0 :                 (asserts! (is-eq contract-caller (contract-of extension)) err-invalid-extension)
      84                 :           0 :                 (as-contract (contract-call? extension callback sender memo))
      85                 :             :         )
      86                 :             : )
        

Generated by: LCOV version 2.3.2-1