Source Code

;; agate-track-36
(define-map passes { id: principal } { owner: principal, active: bool, timestamp: uint })
(define-data-var total-entries uint u0)

(define-public (register (id principal))
  (if (is-none (map-get? passes { id: id }))
    (begin
      (map-set passes { id: id }
        { owner: tx-sender, active: true, timestamp: block-height })
      (var-set total-entries (+ (var-get total-entries) u1))
      (ok true))
    (err u1)))

(define-public (deactivate (id principal))
  (match (map-get? passes { id: id })
    entry (if (is-eq (get owner entry) tx-sender)
      (begin
        (map-set passes { id: id }
          (merge entry { active: false }))
        (ok true))
      (err u2))
    (err u3)))

(define-read-only (lookup (id principal))
  (ok (map-get? passes { id: id })))

(define-read-only (get-total)
  (ok (var-get total-entries)))

Functions (4)

FunctionAccessArgs
registerpublicid: principal
deactivatepublicid: principal
lookupread-onlyid: principal
get-totalread-only