Source Code

;; title: token-emissions
;; version: 1.0.0
;; summary: Token emission schedule
;; description: Control token inflation and emissions - Clarity 4

;; Constants
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-UNAUTHORIZED (err u4600))
(define-constant ERR-NO-EMISSIONS (err u4601))

;; Emission rate (tokens per second)
(define-constant INITIAL-EMISSION-RATE u100)

;; Data Variables
(define-data-var current-emission-rate uint INITIAL-EMISSION-RATE)
(define-data-var total-emitted uint u0)
(define-data-var last-emission-time uint u0)
(define-data-var emissions-paused bool false)

;; Data Maps - Using stacks-block-time for Clarity 4
(define-map emission-history uint {
  amount: uint,
  recipient: principal,
  emitted-at: uint  ;; Clarity 4: Unix timestamp
})

(define-data-var next-emission-id uint u1)

;; Public Functions

(define-public (mint-emissions (recipient principal))
  (let (
    (time-elapsed (- stacks-block-time (var-get last-emission-time)))
    (emission-amount (* time-elapsed (var-get current-emission-rate)))
    (emission-id (var-get next-emission-id))
  )
    (asserts! (not (var-get emissions-paused)) ERR-UNAUTHORIZED)
    (asserts! (> emission-amount u0) ERR-NO-EMISSIONS)

    (map-set emission-history emission-id {
      amount: emission-amount,
      recipient: recipient,
      emitted-at: stacks-block-time
    })

    (var-set total-emitted (+ (var-get total-emitted) emission-amount))
    (var-set last-emission-time stacks-block-time)
    (var-set next-emission-id (+ emission-id u1))

    (print {
      event: "tokens-emitted",
      amount: emission-amount,
      recipient: recipient,
      timestamp: stacks-block-time
    })

    (ok emission-amount)
  )
)

(define-public (update-emission-rate (new-rate uint))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-UNAUTHORIZED)

    (var-set current-emission-rate new-rate)

    (print {
      event: "emission-rate-updated",
      new-rate: new-rate,
      timestamp: stacks-block-time
    })

    (ok true)
  )
)

(define-public (pause-emissions)
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-UNAUTHORIZED)
    (var-set emissions-paused true)
    (ok true)
  )
)

;; Read-Only Functions

(define-read-only (get-emission-rate)
  (var-get current-emission-rate)
)

(define-read-only (get-total-emitted)
  (var-get total-emitted)
)

(define-read-only (get-emission-record (emission-id uint))
  (map-get? emission-history emission-id)
)

(define-read-only (is-emissions-paused)
  (var-get emissions-paused)
)

Functions (7)

FunctionAccessArgs
mint-emissionspublicrecipient: principal
update-emission-ratepublicnew-rate: uint
pause-emissionspublic
get-emission-rateread-only
get-total-emittedread-only
get-emission-recordread-onlyemission-id: uint
is-emissions-pausedread-only