Source Code

(define-map data-points
    (buff 32)
    { owner: principal, data: (buff 1024), timestamp: uint }
)

(define-map data-objects
    { object-id: (string-ascii 64) }
    { creator: principal, points: (list 10 (buff 32)), metadata: (string-utf8 256) }
)

(define-map data-managers
    { manager-id: principal }
    { authorized: bool, objects: (list 100 (string-ascii 64)) }
)

(define-constant contract-owner tx-sender)
(define-constant err-not-owner (err u100))
(define-constant err-not-authorized (err u101))
(define-constant err-point-exists (err u102))
(define-constant err-not-found (err u103))
(define-constant err-invalid-data (err u104))

(define-read-only (get-data-point (point-id (buff 32)))
    (ok (map-get? data-points point-id))
)

(define-read-only (get-data-object (object-id (string-ascii 64)))
    (ok (map-get? data-objects { object-id: object-id }))
)

(define-read-only (get-manager (manager-id principal))
    (ok (map-get? data-managers { manager-id: manager-id }))
)

(define-read-only (is-manager-authorized (manager-id principal))
    (match (map-get? data-managers { manager-id: manager-id })
        manager-data (ok (get authorized manager-data))
        (ok false)
    )
)

(define-public (create-data-point (point-id (buff 32)) (data (buff 1024)))
    (begin
        (asserts! (is-none (map-get? data-points point-id)) err-point-exists)
        (asserts! (> (len data) u0) err-invalid-data)
        (map-set data-points point-id
            { owner: tx-sender, data: data, timestamp: stacks-block-time }
        )
        (ok true)
    )
)

(define-public (create-data-object 
    (object-id (string-ascii 64))
    (points (list 10 (buff 32)))
    (metadata (string-utf8 256))
)
    (begin
        (asserts! (is-none (map-get? data-objects { object-id: object-id })) err-point-exists)
        (map-set data-objects { object-id: object-id }
            { creator: tx-sender, points: points, metadata: metadata }
        )
        (ok true)
    )
)

(define-public (authorize-manager (manager-id principal))
    (begin
        (asserts! (is-eq tx-sender contract-owner) err-not-owner)
        (map-set data-managers { manager-id: manager-id }
            { authorized: true, objects: (list) }
        )
        (ok true)
    )
)

(define-public (revoke-manager (manager-id principal))
    (begin
        (asserts! (is-eq tx-sender contract-owner) err-not-owner)
        (map-delete data-managers { manager-id: manager-id })
        (ok true)
    )
)

(define-public (update-data-point (point-id (buff 32)) (data (buff 1024)))
    (let
        (
            (point-data (unwrap! (map-get? data-points point-id) err-not-found))
        )
        (asserts! (is-eq tx-sender (get owner point-data)) err-not-owner)
        (map-set data-points point-id
            { owner: tx-sender, data: data, timestamp: stacks-block-time }
        )
        (ok true)
    )
)

Functions (9)

FunctionAccessArgs
get-data-pointread-onlypoint-id: (buff 32
get-data-objectread-onlyobject-id: (string-ascii 64
get-managerread-onlymanager-id: principal
is-manager-authorizedread-onlymanager-id: principal
create-data-pointpublicpoint-id: (buff 32
create-data-objectpublicobject-id: (string-ascii 64
authorize-managerpublicmanager-id: principal
revoke-managerpublicmanager-id: principal
update-data-pointpublicpoint-id: (buff 32