Source Code

;; 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))))))

Functions (4)

FunctionAccessArgs
get-feed-countread-onlyasset: (string-ascii 10
add-price-entrypublicasset: (string-ascii 10
get-entryread-onlyasset: (string-ascii 10
get-avg-tworead-onlyasset: (string-ascii 10