Source Code

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

(define-map nuclear-plants
  uint
  {
    operator: principal,
    location: (string-ascii 128),
    reactor-type: (string-ascii 64),
    capacity-mw: uint,
    commissioned: uint,
    licensed: bool,
    operational: bool
  })

(define-map power-production
  uint
  {
    plant-id: uint,
    energy-produced-mwh: uint,
    fuel-consumed-kg: uint,
    capacity-factor: uint,
    timestamp: uint
  })

(define-data-var next-plant-id uint u0)
(define-data-var next-production-id uint u0)

(define-read-only (get-plant (plant-id uint))
  (ok (map-get? nuclear-plants plant-id)))

(define-public (register-plant (location (string-ascii 128)) (reactor (string-ascii 64)) (capacity uint))
  (let ((plant-id (var-get next-plant-id)))
    (map-set nuclear-plants plant-id
      {operator: tx-sender, location: location, reactor-type: reactor,
       capacity-mw: capacity, commissioned: stacks-block-height, licensed: false, operational: false})
    (var-set next-plant-id (+ plant-id u1))
    (ok plant-id)))

(define-public (license-plant (plant-id uint))
  (let ((plant (unwrap! (map-get? nuclear-plants plant-id) err-not-found)))
    (asserts! (is-eq tx-sender contract-owner) err-owner-only)
    (ok (map-set nuclear-plants plant-id (merge plant {licensed: true, operational: true})))))

(define-public (record-production (plant-id uint) (energy uint) (fuel uint) (capacity-factor uint))
  (let ((production-id (var-get next-production-id)))
    (asserts! (is-some (map-get? nuclear-plants plant-id)) err-not-found)
    (map-set power-production production-id
      {plant-id: plant-id, energy-produced-mwh: energy, fuel-consumed-kg: fuel,
       capacity-factor: capacity-factor, timestamp: stacks-block-height})
    (var-set next-production-id (+ production-id u1))
    (ok production-id)))

Functions (4)

FunctionAccessArgs
get-plantread-onlyplant-id: uint
register-plantpubliclocation: (string-ascii 128
license-plantpublicplant-id: uint
record-productionpublicplant-id: uint, energy: uint, fuel: uint, capacity-factor: uint