Source Code

;; Royalty Distribution
;; Distribute royalties to creators

(define-map royalty-splits
  uint
  {
    content-id: uint,
    creator: principal,
    percentage: uint,
    total-earned: uint
  }
)

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

(define-read-only (get-split (split-id uint))
  (map-get? royalty-splits split-id)
)

(define-public (register-split (content-id uint) (creator principal) (percentage uint))
  (let ((split-id (var-get next-split-id)))
    (asserts! (<= percentage u100) (err u100))
    (map-set royalty-splits split-id {
      content-id: content-id,
      creator: creator,
      percentage: percentage,
      total-earned: u0
    })
    (var-set next-split-id (+ split-id u1))
    (ok split-id)
  )
)

(define-public (distribute-royalty (split-id uint) (total-amount uint))
  (let ((split (unwrap! (map-get? royalty-splits split-id) (err u101)))
        (creator-amount (/ (* total-amount (get percentage split)) u100)))
    (try! (as-contract (stx-transfer? creator-amount tx-sender (get creator split))))
    (map-set royalty-splits split-id (merge split {
      total-earned: (+ (get total-earned split) creator-amount)
    }))
    (ok creator-amount)
  )
)

Functions (3)

FunctionAccessArgs
get-splitread-onlysplit-id: uint
register-splitpubliccontent-id: uint, creator: principal, percentage: uint
distribute-royaltypublicsplit-id: uint, total-amount: uint