Source Code

;; Referral Tracking
;; Track and reward referrals

(define-map referrals
  principal
  {
    referrer: (optional principal),
    referrals-made: uint,
    rewards-earned: uint
  }
)

(define-read-only (get-referral (user principal))
  (map-get? referrals user)
)

(define-public (register-referral (referrer principal))
  (ok (map-set referrals tx-sender {
    referrer: (some referrer),
    referrals-made: u0,
    rewards-earned: u0
  }))
)

(define-public (record-referral-success)
  (let ((referral (unwrap! (map-get? referrals tx-sender) (err u100)))
        (referrer-principal (unwrap! (get referrer referral) (err u101))))
    (let ((referrer-data (unwrap! (map-get? referrals referrer-principal) (err u102))))
      (map-set referrals referrer-principal (merge referrer-data {
        referrals-made: (+ (get referrals-made referrer-data) u1),
        rewards-earned: (+ (get rewards-earned referrer-data) u100)
      }))
      (ok true)
    )
  )
)

Functions (3)

FunctionAccessArgs
get-referralread-onlyuser: principal
register-referralpublicreferrer: principal
record-referral-successpublic