Source Code

(define-map media-commits 
    { asset-cid: (string-ascii 64) }
    { committer: principal, timestamp: uint, data: (string-utf8 256) }
)

(define-map user-commits
    { user: principal, index: uint }
    (string-ascii 64)
)

(define-map commit-count principal uint)

(define-constant err-invalid-cid (err u100))
(define-constant err-commit-exists (err u101))
(define-constant err-not-found (err u102))

(define-read-only (get-commit (asset-cid (string-ascii 64)))
    (ok (map-get? media-commits { asset-cid: asset-cid }))
)

(define-read-only (get-user-commit (user principal) (index uint))
    (ok (map-get? user-commits { user: user, index: index }))
)

(define-read-only (get-commit-count (user principal))
    (ok (default-to u0 (map-get? commit-count user)))
)

(define-read-only (get-block-time)
    (ok stacks-block-time)
)

(define-public (commit (asset-cid (string-ascii 64)) (commit-data (string-utf8 256)))
    (let
        (
            (current-count (default-to u0 (map-get? commit-count tx-sender)))
            (timestamp stacks-block-time)
        )
        (asserts! (> (len asset-cid) u0) err-invalid-cid)
        (asserts! (is-none (map-get? media-commits { asset-cid: asset-cid })) err-commit-exists)
        (map-set media-commits 
            { asset-cid: asset-cid }
            { committer: tx-sender, timestamp: timestamp, data: commit-data }
        )
        (map-set user-commits
            { user: tx-sender, index: current-count }
            asset-cid
        )
        (map-set commit-count tx-sender (+ current-count u1))
        (ok true)
    )
)

(define-public (verify-commit (asset-cid (string-ascii 64)) (expected-committer principal))
    (let
        (
            (commit-data (unwrap! (map-get? media-commits { asset-cid: asset-cid }) err-not-found))
        )
        (ok (is-eq (get committer commit-data) expected-committer))
    )
)

Functions (6)

FunctionAccessArgs
get-commitread-onlyasset-cid: (string-ascii 64
get-user-commitread-onlyuser: principal, index: uint
get-commit-countread-onlyuser: principal
get-block-timeread-only
commitpublicasset-cid: (string-ascii 64
verify-commitpublicasset-cid: (string-ascii 64