Source Code


;; Nova Royalty Distributor
;; Automatically distributes royalties to creators

(define-constant ERR-INVALID-PERCENTAGE (err u100))

(define-map royalty-configs
    { asset-id: uint }
    {
        creator: principal,
        royalty-percent: uint ;; Basis points (1/10000)
    }
)

(define-public (set-royalty (asset-id uint) (percent uint))
    (begin
        (asserts! (<= percent u10000) ERR-INVALID-PERCENTAGE)
        (ok (map-set royalty-configs
            { asset-id: asset-id }
            {
                creator: tx-sender,
                royalty-percent: percent
            }
        ))
    )
)

(define-public (distribute-sale (asset-id uint) (sale-amount uint))
    (let
        (
            (config (unwrap! (map-get? royalty-configs { asset-id: asset-id }) (err u404)))
            (royalty-amount (/ (* sale-amount (get royalty-percent config)) u10000))
        )
        (if (> royalty-amount u0)
            (stx-transfer? royalty-amount tx-sender (get creator config))
            (ok true)
        )
    )
)

Functions (2)

FunctionAccessArgs
set-royaltypublicasset-id: uint, percent: uint
distribute-salepublicasset-id: uint, sale-amount: uint