Source Code

;; Subscription Manager Contract

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

(define-map subscriptions
  uint
  {
    subscriber: principal,
    tier: uint,
    price: uint,
    start-block: uint,
    active: bool
  }
)

(define-read-only (get-subscription (subscription-id uint))
  (map-get? subscriptions subscription-id)
)

(define-public (create-subscription (tier uint) (price uint))
  (let ((subscription-id (var-get next-subscription-id)))
    (map-set subscriptions subscription-id {
      subscriber: tx-sender,
      tier: tier,
      price: price,
      start-block: block-height,
      active: true
    })
    (var-set next-subscription-id (+ subscription-id u1))
    (ok subscription-id)
  )
)

(define-public (cancel-subscription (subscription-id uint))
  (let ((subscription (unwrap! (map-get? subscriptions subscription-id) (err u100))))
    (map-set subscriptions subscription-id (merge subscription { active: false }))
    (ok true)
  )
)

Functions (3)

FunctionAccessArgs
get-subscriptionread-onlysubscription-id: uint
create-subscriptionpublictier: uint, price: uint
cancel-subscriptionpublicsubscription-id: uint