Source Code

;; goat-share -- qurbani goat share registry
(define-data-var share-count uint u0)
(define-map shares uint { organizer: principal, slots: uint, filled: uint, price: uint, year: uint })
(define-map participants { share-id: uint, user: principal } bool)
(define-public (create-share (slots uint) (price uint) (year uint))
  (let ((id (+ (var-get share-count) u1)))
    (var-set share-count id)
    (map-set shares id { organizer: tx-sender, slots: slots, filled: u0, price: price, year: year }) (ok id)))
(define-public (join-share (share-id uint))
  (let ((s (unwrap! (map-get? shares share-id) (err u404))))
    (asserts! (< (get filled s) (get slots s)) (err u401))
    (map-set participants { share-id: share-id, user: tx-sender } true)
    (map-set shares share-id (merge s { filled: (+ (get filled s) u1) })) (ok true)))
(define-read-only (get-share (id uint)) (map-get? shares id))

Functions (3)

FunctionAccessArgs
create-sharepublicslots: uint, price: uint, year: uint
join-sharepublicshare-id: uint
get-shareread-onlyid: uint