Source Code

;; SatGuard Feed Validator
(define-constant err-owner (err u640))
(define-constant err-stale (err u641))
(define-constant err-deviation (err u642))
(define-data-var admin principal tx-sender)
(define-data-var max-age uint u144) ;; ~1 day in blocks
(define-data-var max-deviation uint u10) ;; 10%
(define-read-only (get-max-age) (var-get max-age))
(define-read-only (get-max-deviation) (var-get max-deviation))
(define-public (set-max-age (age uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (var-set max-age age)
    (print {e: "max-age-set",age: age})
    (ok true)))
(define-public (set-max-deviation (dev uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (var-set max-deviation dev)
    (print {e: "max-deviation-set",dev: dev})
    (ok true)))
(define-read-only (validate-feed (asset (string-ascii 10)))
  (let ((p (contract-call? .sg-price-feed get-price asset)))
    (match p
      price-data (let ((age (- block-height (get ts price-data)))
                       (fresh (< age (var-get max-age))))
        (ok {fresh: fresh,age: age,price: (get price price-data)}))
      (ok {fresh: false,age: u0,price: u0}))))
(define-read-only (is-fresh (asset (string-ascii 10)))
  (let ((v (unwrap! (validate-feed asset) (err u641))))
    (ok (get fresh v))))

Functions (6)

FunctionAccessArgs
get-max-ageread-only
get-max-deviationread-only
set-max-agepublicage: uint
set-max-deviationpublicdev: uint
validate-feedread-onlyasset: (string-ascii 10
is-freshread-onlyasset: (string-ascii 10