Source Code

;; group-manager contract

(define-map groups uint { name: (string-ascii 50), owner: principal, member-count: uint })
(define-map group-members { group-id: uint, member: principal } bool)
(define-data-var group-id-counter uint u0)

(define-read-only (get-group (id uint))
  (map-get? groups id)
)

(define-read-only (is-member (group-id uint) (member principal))
  (default-to false (map-get? group-members { group-id: group-id, member: member }))
)

(define-public (create-group (name (string-ascii 50)))
  (let ((id (+ (var-get group-id-counter) u1)))
    (map-set groups id { name: name, owner: tx-sender, member-count: u1 })
    (map-set group-members { group-id: id, member: tx-sender } true)
    (var-set group-id-counter id)
    (ok id)
  )
)

(define-public (join-group (group-id uint))
  (begin
    (map-set group-members { group-id: group-id, member: tx-sender } true)
    (ok true)
  )
)

Functions (4)

FunctionAccessArgs
get-groupread-onlyid: uint
is-memberread-onlygroup-id: uint, member: principal
create-grouppublicname: (string-ascii 50
join-grouppublicgroup-id: uint