small-modular-reactor-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 smr-reactors
  uint
  {
    operator: principal,
    location: (string-ascii 128),
    reactor-model: (string-ascii 64),
    capacity-mw: uint,
    fuel-type: (string-ascii 32),
    commissioned-date: uint,
    licensed: bool,
    operational: bool
  })

(define-map power-generation-smr
  uint
  {
    reactor-id: uint,
    power-output-mwh: uint,
    fuel-consumed: uint,
    efficiency: uint,
    timestamp: uint
  })

(define-data-var next-reactor-id uint u0)
(define-data-var next-gen-id uint u0)

(define-read-only (get-reactor (reactor-id uint))
  (ok (map-get? smr-reactors reactor-id)))

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

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

(define-public (log-power-output (reactor-id uint) (power uint) (fuel uint) (efficiency uint))
  (let ((gen-id (var-get next-gen-id)))
    (asserts! (is-some (map-get? smr-reactors reactor-id)) err-not-found)
    (map-set power-generation-smr gen-id
      {reactor-id: reactor-id, power-output-mwh: power, fuel-consumed: fuel,
       efficiency: efficiency, timestamp: stacks-block-height})
    (var-set next-gen-id (+ gen-id u1))
    (ok gen-id)))

Functions (4)

FunctionAccessArgs
get-reactorread-onlyreactor-id: uint
register-smrpubliclocation: (string-ascii 128
license-smrpublicreactor-id: uint
log-power-outputpublicreactor-id: uint, power: uint, fuel: uint, efficiency: uint