Source Code

;; Constants
(define-constant CONTRACT_OWNER tx-sender)
(define-constant MAX_RECIPIENTS u10)
(define-constant INACTIVITY_PERIOD u52560) ;; ~1 year at 10-min block time
(define-constant ERR_UNAUTHORIZED (err u100))
(define-constant ERR_INVALID_AMOUNT (err u101))
(define-constant ERR_INVALID_RECIPIENT_COUNT (err u102))

;; Data Maps
(define-map balances
  principal
  uint
)
(define-map recipients
  principal
  (list 10 {
    recipient: principal,
    amount: uint,
  })
)
(define-map last-activity
  principal
  uint
)

;; Read-only functions
(define-read-only (get-balance (user principal))
  (ok (default-to u0 (map-get? balances user)))
)

(define-read-only (get-recipients (user principal))
  (ok (default-to (list) (map-get? recipients user)))
)

(define-read-only (get-last-activity (user principal))
  (ok (default-to u0 (map-get? last-activity user)))
)

(define-read-only (get-contract-info)
  (ok {
    owner: CONTRACT_OWNER,
    max-recipients: MAX_RECIPIENTS,
    inactivity-period: INACTIVITY_PERIOD,
  })
)

(define-read-only (max-recipients)
  MAX_RECIPIENTS
)

(define-read-only (inactivity-period)
  INACTIVITY_PERIOD
)

;; Private functions
(define-private (is-authorized (user principal))
  (or
    (is-eq tx-sender CONTRACT_OWNER)
    (is-eq tx-sender user)
  )
)

(define-private (validate-recipients (new-recipients (list 10 {
  recipient: principal,
  amount: uint,
})))
  (let ((recipient-count (len new-recipients)))
    (and
      (<= recipient-count MAX_RECIPIENTS)
      (> recipient-count u0)
    )
  )
)

;; Public functions
(define-public (set-balance
    (user principal)
    (amount uint)
  )
  (begin
    (asserts! (is-authorized user) ERR_UNAUTHORIZED)
    (asserts! (> amount u0) ERR_INVALID_AMOUNT)
    (map-set balances user amount)
    (map-set last-activity user burn-block-height)
    (ok true)
  )
)

(define-public (set-recipients
    (user principal)
    (new-recipients (list 10 {
      recipient: principal,
      amount: uint,
    }))
  )
  (begin
    (asserts! (is-authorized user) ERR_UNAUTHORIZED)
    (asserts! (validate-recipients new-recipients) ERR_INVALID_RECIPIENT_COUNT)
    (map-set recipients user new-recipients)
    (map-set last-activity user burn-block-height)
    (ok true)
  )
)

Functions (9)

FunctionAccessArgs
get-balanceread-onlyuser: principal
get-recipientsread-onlyuser: principal
get-last-activityread-onlyuser: principal
get-contract-inforead-only
max-recipientsread-only
inactivity-periodread-only
is-authorizedprivateuser: principal
validate-recipientsprivatenew-recipients: (list 10 { recipient: principal, amount: uint, }
set-recipientspublicuser: principal, new-recipients: (list 10 { recipient: principal, amount: uint, }