Source Code

;; sample-generator - Clarity 4
;; Mock sample data generator for testing genomic platform

(define-constant ERR-NOT-FOUND (err u100))
(define-constant ERR-INVALID-PARAMS (err u101))

(define-map generated-samples uint
  {
    sample-type: (string-ascii 50),
    data-hash: (buff 64),
    generator: principal,
    generated-at: uint,
    sample-size: uint,
    quality-score: uint
  }
)

(define-map sample-metadata uint
  {
    sample-id: uint,
    description: (string-utf8 200),
    format: (string-ascii 20),
    version: uint,
    is-validated: bool
  }
)

(define-map sample-statistics uint
  {
    sample-id: uint,
    mean-value: uint,
    std-deviation: uint,
    min-value: uint,
    max-value: uint
  }
)

(define-map generation-templates uint
  {
    template-name: (string-utf8 100),
    sample-type: (string-ascii 50),
    default-size: uint,
    parameters: (string-utf8 500),
    created-by: principal
  }
)

(define-data-var sample-counter uint u0)
(define-data-var template-counter uint u0)

(define-public (generate-sample
    (sample-type (string-ascii 50))
    (data-hash (buff 64))
    (sample-size uint)
    (quality-score uint))
  (let ((sample-id (+ (var-get sample-counter) u1)))
    (asserts! (> sample-size u0) ERR-INVALID-PARAMS)
    (asserts! (<= quality-score u100) ERR-INVALID-PARAMS)
    (map-set generated-samples sample-id
      {
        sample-type: sample-type,
        data-hash: data-hash,
        generator: tx-sender,
        generated-at: stacks-block-time,
        sample-size: sample-size,
        quality-score: quality-score
      })
    (var-set sample-counter sample-id)
    (ok sample-id)))

(define-public (add-sample-metadata
    (sample-id uint)
    (description (string-utf8 200))
    (format (string-ascii 20))
    (version uint))
  (let ((sample (unwrap! (map-get? generated-samples sample-id) ERR-NOT-FOUND)))
    (ok (map-set sample-metadata sample-id
      {
        sample-id: sample-id,
        description: description,
        format: format,
        version: version,
        is-validated: false
      }))))

(define-public (record-statistics
    (sample-id uint)
    (mean-value uint)
    (std-deviation uint)
    (min-value uint)
    (max-value uint))
  (let ((sample (unwrap! (map-get? generated-samples sample-id) ERR-NOT-FOUND)))
    (ok (map-set sample-statistics sample-id
      {
        sample-id: sample-id,
        mean-value: mean-value,
        std-deviation: std-deviation,
        min-value: min-value,
        max-value: max-value
      }))))

(define-public (create-template
    (template-name (string-utf8 100))
    (sample-type (string-ascii 50))
    (default-size uint)
    (parameters (string-utf8 500)))
  (let ((template-id (+ (var-get template-counter) u1)))
    (map-set generation-templates template-id
      {
        template-name: template-name,
        sample-type: sample-type,
        default-size: default-size,
        parameters: parameters,
        created-by: tx-sender
      })
    (var-set template-counter template-id)
    (ok template-id)))

(define-public (validate-sample (sample-id uint))
  (let ((metadata (unwrap! (map-get? sample-metadata sample-id) ERR-NOT-FOUND)))
    (ok (map-set sample-metadata sample-id
      (merge metadata { is-validated: true })))))

(define-read-only (get-sample (sample-id uint))
  (ok (map-get? generated-samples sample-id)))

(define-read-only (get-sample-metadata (sample-id uint))
  (ok (map-get? sample-metadata sample-id)))

(define-read-only (get-statistics (sample-id uint))
  (ok (map-get? sample-statistics sample-id)))

(define-read-only (get-template (template-id uint))
  (ok (map-get? generation-templates template-id)))

(define-read-only (validate-principal (p principal))
  (principal-destruct? p))

(define-read-only (format-sample-id (sample-id uint))
  (ok (int-to-ascii sample-id)))

(define-read-only (parse-sample-id (id-str (string-ascii 20)))
  (string-to-uint? id-str))

(define-read-only (get-bitcoin-block)
  (ok burn-block-height))

Functions (13)

FunctionAccessArgs
generate-samplepublicsample-type: (string-ascii 50
add-sample-metadatapublicsample-id: uint, description: (string-utf8 200
record-statisticspublicsample-id: uint, mean-value: uint, std-deviation: uint, min-value: uint, max-value: uint
create-templatepublictemplate-name: (string-utf8 100
validate-samplepublicsample-id: uint
get-sampleread-onlysample-id: uint
get-sample-metadataread-onlysample-id: uint
get-statisticsread-onlysample-id: uint
get-templateread-onlytemplate-id: uint
validate-principalread-onlyp: principal
format-sample-idread-onlysample-id: uint
parse-sample-idread-onlyid-str: (string-ascii 20
get-bitcoin-blockread-only