;; SatGuard Oracle Registry
(define-constant err-owner (err u600))
(define-constant err-dup (err u601))
(define-constant err-nf (err u602))
(define-data-var admin principal tx-sender)
(define-data-var o-count uint u0)
(define-map oracles {oracle: principal} {name: (string-ascii 30),ra: uint,active: bool})
(define-read-only (is-oracle (oracle principal)) (is-some (map-get? oracles {oracle: oracle})))
(define-read-only (get-oracle (oracle principal)) (map-get? oracles {oracle: oracle}))
(define-read-only (get-oracle-count) (var-get o-count))
(define-public (register-oracle (oracle principal) (name (string-ascii 30)))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (not (is-oracle oracle)) err-dup)
(map-set oracles {oracle: oracle} {name: name,ra: block-height,active: true})
(var-set o-count (+ (var-get o-count) u1))
(print {e: "oracle-registered",oracle: oracle,name: name})
(ok true)))
(define-public (remove-oracle (oracle principal))
(let ((o (unwrap! (map-get? oracles {oracle: oracle}) err-nf)))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(map-set oracles {oracle: oracle} (merge o {active: false}))
(print {e: "oracle-removed",oracle: oracle})
(ok true)))