hydrogen-production-for-electricity

SP1V95DB4JK47QVPJBXCEN6MT35JK84CQ4CWS15DQ

Source Code

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

(define-map hydrogen-plants
  uint
  {
    operator: principal,
    location: (string-ascii 128),
    production-method: (string-ascii 64),
    capacity-kg-per-day: uint,
    power-output-mw: uint,
    operational: bool
  })

(define-map electricity-generation
  uint
  {
    plant-id: uint,
    hydrogen-consumed-kg: uint,
    power-generated-mwh: uint,
    efficiency: uint,
    timestamp: uint
  })

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

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

(define-public (register-plant (location (string-ascii 128)) (method (string-ascii 64)) (capacity uint) (output uint))
  (let ((plant-id (var-get next-plant-id)))
    (map-set hydrogen-plants plant-id
      {operator: tx-sender, location: location, production-method: method,
       capacity-kg-per-day: capacity, power-output-mw: output, operational: true})
    (var-set next-plant-id (+ plant-id u1))
    (ok plant-id)))

(define-public (log-generation (plant-id uint) (hydrogen-used uint) (power uint) (efficiency uint))
  (let ((gen-id (var-get next-generation-id)))
    (asserts! (is-some (map-get? hydrogen-plants plant-id)) err-not-found)
    (map-set electricity-generation gen-id
      {plant-id: plant-id, hydrogen-consumed-kg: hydrogen-used,
       power-generated-mwh: power, efficiency: efficiency, timestamp: stacks-block-height})
    (var-set next-generation-id (+ gen-id u1))
    (ok gen-id)))

Functions (3)

FunctionAccessArgs
get-plantread-onlyplant-id: uint
register-plantpubliclocation: (string-ascii 128
log-generationpublicplant-id: uint, hydrogen-used: uint, power: uint, efficiency: uint