Source Code

(define-constant contract-owner tx-sender)
(define-constant err-owner-only (err u100))
(define-constant err-not-found (err u101))

(define-map refining-facilities
  uint
  {
    operator: principal,
    location: (string-ascii 128),
    input-material: (string-ascii 64),
    output-material: (string-ascii 64),
    processing-capacity: uint,
    certified: bool
  })

(define-map refining-batches
  uint
  {
    facility-id: uint,
    input-quantity: uint,
    output-quantity: uint,
    output-purity: uint,
    start-date: uint,
    completion-date: uint,
    status: (string-ascii 32)
  })

(define-data-var next-facility-id uint u0)
(define-data-var next-batch-id uint u0)

(define-read-only (get-facility (facility-id uint))
  (ok (map-get? refining-facilities facility-id)))

(define-public (register-facility (location (string-ascii 128)) (input (string-ascii 64)) (output (string-ascii 64)) (capacity uint))
  (let ((facility-id (var-get next-facility-id)))
    (map-set refining-facilities facility-id
      {operator: tx-sender, location: location, input-material: input,
       output-material: output, processing-capacity: capacity, certified: false})
    (var-set next-facility-id (+ facility-id u1))
    (ok facility-id)))

(define-public (process-batch (facility-id uint) (input-qty uint) (output-qty uint) (purity uint))
  (let ((batch-id (var-get next-batch-id)))
    (asserts! (is-some (map-get? refining-facilities facility-id)) err-not-found)
    (map-set refining-batches batch-id
      {facility-id: facility-id, input-quantity: input-qty, output-quantity: output-qty,
       output-purity: purity, start-date: stacks-block-height, completion-date: u0, status: "processing"})
    (var-set next-batch-id (+ batch-id u1))
    (ok batch-id)))

(define-public (complete-batch (batch-id uint))
  (let ((batch (unwrap! (map-get? refining-batches batch-id) err-not-found)))
    (ok (map-set refining-batches batch-id
      (merge batch {completion-date: stacks-block-height, status: "completed"})))))

Functions (4)

FunctionAccessArgs
get-facilityread-onlyfacility-id: uint
register-facilitypubliclocation: (string-ascii 128
process-batchpublicfacility-id: uint, input-qty: uint, output-qty: uint, purity: uint
complete-batchpublicbatch-id: uint