;; SatGuard Oracle Aggregator
(define-constant err-nf (err u620))
(define-constant err-amt (err u621))
(define-data-var feed-count uint u0)
(define-map feed-entries {asset: (string-ascii 10),idx: uint} {price: uint,by: principal})
(define-map feed-sizes {asset: (string-ascii 10)} {count: uint})
(define-read-only (get-feed-count (asset (string-ascii 10))) (default-to {count: u0} (map-get? feed-sizes {asset: asset})))
(define-public (add-price-entry (asset (string-ascii 10)) (price uint))
(let ((fc (get count (get-feed-count asset)))
(nid (+ fc u1)))
(asserts! (contract-call? .sg-oracle-registry is-oracle tx-sender) (err u622))
(asserts! (> price u0) err-amt)
(map-set feed-entries {asset: asset,idx: nid} {price: price,by: tx-sender})
(map-set feed-sizes {asset: asset} {count: nid})
(print {e: "feed-entry-added",asset: asset,idx: nid,price: price})
(ok nid)))
(define-read-only (get-entry (asset (string-ascii 10)) (idx uint))
(map-get? feed-entries {asset: asset,idx: idx}))
(define-read-only (get-avg-two (asset (string-ascii 10)))
(let ((fc (get count (get-feed-count asset))))
(if (< fc u2)
(err u620)
(let ((p1 (unwrap! (map-get? feed-entries {asset: asset,idx: fc}) err-nf))
(p2 (unwrap! (map-get? feed-entries {asset: asset,idx: (- fc u1)}) err-nf)))
(ok (/ (+ (get price p1) (get price p2)) u2))))))