Source Code

;; Announcement Board

(define-map announcements
  uint
  { creator: principal, message: (string-ascii 250), pinned: bool }
)

(define-data-var counter uint u0)

(define-public (post-announcement (message (string-ascii 250)))
  (let ((id (var-get counter)))
    (map-set announcements id { creator: tx-sender, message: message, pinned: false })
    (var-set counter (+ id u1))
    (ok id)
  )
)

(define-public (pin-announcement (id uint))
  (let ((ann (unwrap! (map-get? announcements id) (err u404))))
    (asserts! (is-eq (get creator ann) tx-sender) (err u403))
    (map-set announcements id (merge ann { pinned: true }))
    (ok true)
  )
)

(define-public (unpin-announcement (id uint))
  (let ((ann (unwrap! (map-get? announcements id) (err u404))))
    (asserts! (is-eq (get creator ann) tx-sender) (err u403))
    (map-set announcements id (merge ann { pinned: false }))
    (ok true)
  )
)

(define-read-only (get-announcement (id uint))
  (map-get? announcements id)
)

Functions (4)

FunctionAccessArgs
post-announcementpublicmessage: (string-ascii 250
pin-announcementpublicid: uint
unpin-announcementpublicid: uint
get-announcementread-onlyid: uint