Source Code

;; olive-press -- halal olive oil production cooperative
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var press-count uint u0)
(define-data-var total-liters uint u0)
(define-map presses uint { owner: principal, location: (string-utf8 100), capacity-liters: uint, active: bool })
(define-map production-logs uint { press-id: uint, liters: uint, grade: (string-ascii 20), block: uint })
(define-data-var log-count uint u0)

(define-public (register-press (location (string-utf8 100)) (capacity-liters uint))
  (let ((id (+ (var-get press-count) u1)))
    (var-set press-count id)
    (map-set presses id { owner: tx-sender, location: location, capacity-liters: capacity-liters, active: true })
    (ok id)))

(define-public (log-production (press-id uint) (liters uint) (grade (string-ascii 20)))
  (let ((id (+ (var-get log-count) u1))
        (p (unwrap! (map-get? presses press-id) ERR-NONE)))
    (asserts! (is-eq tx-sender (get owner p)) ERR-AUTH)
    (var-set log-count id)
    (var-set total-liters (+ (var-get total-liters) liters))
    (map-set production-logs id { press-id: press-id, liters: liters, grade: grade, block: stacks-block-height })
    (ok id)))

(define-read-only (get-press (id uint)) (map-get? presses id))
(define-read-only (get-log (id uint)) (map-get? production-logs id))
(define-read-only (get-total-liters) (var-get total-liters))

Functions (5)

FunctionAccessArgs
register-presspubliclocation: (string-utf8 100
log-productionpublicpress-id: uint, liters: uint, grade: (string-ascii 20
get-pressread-onlyid: uint
get-logread-onlyid: uint
get-total-litersread-only