Source Code

(define-constant O tx-sender)
(define-constant E1 (err u980))
(define-constant E2 (err u981))
(define-constant ROLE-ADMIN u1)
(define-constant ROLE-MOD u2)
(define-constant ROLE-ORACLE u3)
(define-map roles {user: principal, role: uint} bool)
(define-public (grant-role (user principal) (role uint))
 (begin (asserts! (is-eq tx-sender O) E1)
  (ok (map-set roles {user: user, role: role} true))))
(define-public (revoke-role (user principal) (role uint))
 (begin (asserts! (is-eq tx-sender O) E1)
  (ok (map-delete roles {user: user, role: role}))))
(define-read-only (has-role (user principal) (role uint))
 (default-to false (map-get? roles {user: user, role: role})))
(define-read-only (is-admin (user principal))
 (default-to false (map-get? roles {user: user, role: ROLE-ADMIN})))
(define-read-only (is-moderator (user principal))
 (default-to false (map-get? roles {user: user, role: ROLE-MOD})))
(define-read-only (is-oracle (user principal))
 (default-to false (map-get? roles {user: user, role: ROLE-ORACLE})))

Functions (6)

FunctionAccessArgs
grant-rolepublicuser: principal, role: uint
revoke-rolepublicuser: principal, role: uint
has-roleread-onlyuser: principal, role: uint
is-adminread-onlyuser: principal
is-moderatorread-onlyuser: principal
is-oracleread-onlyuser: principal