Source Code

;; AI Data Marketplace
;; Buy and sell training datasets

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

(define-map datasets
  uint
  {
    seller: principal,
    name: (string-ascii 64),
    price: uint,
    samples: uint,
    sold: uint
  }
)

(define-read-only (get-dataset (dataset-id uint))
  (map-get? datasets dataset-id)
)

(define-public (list-dataset (name (string-ascii 64)) (price uint) (samples uint))
  (let ((dataset-id (var-get next-dataset-id)))
    (map-set datasets dataset-id {
      seller: tx-sender,
      name: name,
      price: price,
      samples: samples,
      sold: u0
    })
    (var-set next-dataset-id (+ dataset-id u1))
    (ok dataset-id)
  )
)

(define-public (purchase-dataset (dataset-id uint))
  (let ((dataset (unwrap! (map-get? datasets dataset-id) (err u100))))
    (try! (stx-transfer? (get price dataset) tx-sender (get seller dataset)))
    (map-set datasets dataset-id (merge dataset { sold: (+ (get sold dataset) u1) }))
    (ok true)
  )
)

Functions (3)

FunctionAccessArgs
get-datasetread-onlydataset-id: uint
list-datasetpublicname: (string-ascii 64
purchase-datasetpublicdataset-id: uint