Source Code

;; grain-silo -- community grain storage cooperative
(define-constant ERR-NONE (err u404))
(define-data-var silo-count uint u0)
(define-data-var total-kg uint u0)
(define-map silos uint { owner: principal, grain: (string-ascii 20), kg: uint, available: bool })
(define-public (store-grain (grain (string-ascii 20)) (kg uint))
  (let ((id (+ (var-get silo-count) u1)))
    (var-set silo-count id)
    (var-set total-kg (+ (var-get total-kg) kg))
    (map-set silos id { owner: tx-sender, grain: grain, kg: kg, available: true }) (ok id)))
(define-public (withdraw-grain (id uint))
  (let ((s (unwrap! (map-get? silos id) ERR-NONE)))
    (map-set silos id (merge s { available: false })) (ok true)))
(define-read-only (get-silo (id uint)) (map-get? silos id))
(define-read-only (get-total-kg) (var-get total-kg))

Functions (4)

FunctionAccessArgs
store-grainpublicgrain: (string-ascii 20
withdraw-grainpublicid: uint
get-siloread-onlyid: uint
get-total-kgread-only