Source Code

;; SatGuard Leaderboard
(define-constant err-owner (err u1040))
(define-data-var admin principal tx-sender)
(define-map rankings {who: principal} {score: uint,rank: uint,last: uint})
(define-map top-by-rank {rank: uint} {who: principal,score: uint})
(define-read-only (get-rank (who principal)) (map-get? rankings {who: who}))
(define-read-only (get-top (rank uint)) (map-get? top-by-rank {rank: rank}))
(define-public (update-rank (who principal) (score uint) (rank uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (map-set rankings {who: who} {score: score,rank: rank,last: block-height})
    (map-set top-by-rank {rank: rank} {who: who,score: score})
    (print {e: "rank-updated",who: who,score: score,rank: rank})
    (ok true)))
(define-public (update-score (who principal) (pts uint))
  (let ((ex (default-to {score: u0,rank: u0,last: u0} (map-get? rankings {who: who}))))
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (map-set rankings {who: who} {score: (+ (get score ex) pts),rank: (get rank ex),last: block-height})
    (print {e: "score-updated",who: who,pts: pts})
    (ok true)))
(define-read-only (get-top-3)
  (ok {first: (get-top u1),second: (get-top u2),third: (get-top u3)}))

Functions (5)

FunctionAccessArgs
get-rankread-onlywho: principal
get-topread-onlyrank: uint
update-rankpublicwho: principal, score: uint, rank: uint
update-scorepublicwho: principal, pts: uint
get-top-3read-only