Source Code

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

(define-map mining-sites
  uint
  {
    operator: principal,
    location: (string-ascii 256),
    estimated-reserves: uint,
    extraction-rate: uint,
    geological-survey: (string-ascii 64),
    assessment-date: uint,
    viable: bool
  })

(define-map drilling-operations
  {site-id: uint, operation-id: uint}
  {depth: uint, oil-quality: uint, flow-rate: uint, status: (string-ascii 32)})

(define-data-var next-site-id uint u0)

(define-read-only (get-site (site-id uint))
  (ok (map-get? mining-sites site-id)))

(define-public (register-site (location (string-ascii 256)) (reserves uint) (rate uint) (survey (string-ascii 64)))
  (let ((site-id (var-get next-site-id)))
    (map-set mining-sites site-id
      {operator: tx-sender, location: location, estimated-reserves: reserves,
       extraction-rate: rate, geological-survey: survey, assessment-date: stacks-block-height, viable: false})
    (var-set next-site-id (+ site-id u1))
    (ok site-id)))

(define-public (assess-viability (site-id uint) (viable bool))
  (let ((site (unwrap! (map-get? mining-sites site-id) err-not-found)))
    (asserts! (is-eq tx-sender contract-owner) err-owner-only)
    (ok (map-set mining-sites site-id (merge site {viable: viable})))))

(define-public (log-drilling (site-id uint) (op-id uint) (depth uint) (quality uint) (flow uint))
  (begin
    (asserts! (is-some (map-get? mining-sites site-id)) err-not-found)
    (ok (map-set drilling-operations {site-id: site-id, operation-id: op-id}
      {depth: depth, oil-quality: quality, flow-rate: flow, status: "active"}))))

Functions (4)

FunctionAccessArgs
get-siteread-onlysite-id: uint
register-sitepubliclocation: (string-ascii 256
assess-viabilitypublicsite-id: uint, viable: bool
log-drillingpublicsite-id: uint, op-id: uint, depth: uint, quality: uint, flow: uint