Source Code

;; research-marketplace - Clarity 4
;; Marketplace for genomic data sharing with researchers

(define-constant ERR-LISTING-NOT-FOUND (err u100))
(define-data-var listing-counter uint u0)

(define-map data-listings { listing-id: uint }
  { provider: principal, data-type: (string-ascii 50), price: uint, sample-size: uint, created-at: uint, is-available: bool })

(define-public (create-listing (data-type (string-ascii 50)) (price uint) (sample-size uint))
  (let ((new-id (+ (var-get listing-counter) u1)))
    (map-set data-listings { listing-id: new-id }
      { provider: tx-sender, data-type: data-type, price: price, sample-size: sample-size, created-at: stacks-block-time, is-available: true })
    (var-set listing-counter new-id)
    (ok new-id)))

(define-read-only (get-listing (listing-id uint))
  (ok (map-get? data-listings { listing-id: listing-id })))

;; Clarity 4: principal-destruct?
(define-read-only (validate-provider (provider principal)) (principal-destruct? provider))

;; Clarity 4: int-to-ascii
(define-read-only (format-listing-id (listing-id uint)) (ok (int-to-ascii listing-id)))

;; Clarity 4: string-to-uint?
(define-read-only (parse-listing-id (id-str (string-ascii 20))) (string-to-uint? id-str))

;; Clarity 4: burn-block-height
(define-read-only (get-bitcoin-block) (ok burn-block-height))

Functions (6)

FunctionAccessArgs
create-listingpublicdata-type: (string-ascii 50
get-listingread-onlylisting-id: uint
validate-providerread-onlyprovider: principal
format-listing-idread-onlylisting-id: uint
parse-listing-idread-onlyid-str: (string-ascii 20
get-bitcoin-blockread-only