Source Code

(define-constant O tx-sender)
(define-constant E1 (err u870))
(define-constant E2 (err u871))
(define-constant E3 (err u872))
(define-data-var drip-amount uint u1000000)
(define-data-var cooldown uint u144)
(define-data-var faucet-active bool true)
(define-map last-drip principal uint)
(define-public (drip)
 (begin
  (asserts! (var-get faucet-active) E1)
  (let ((last (default-to u0 (map-get? last-drip tx-sender))))
   (asserts! (>= (- stacks-block-height last) (var-get cooldown)) E2)
   (map-set last-drip tx-sender stacks-block-height)
   (as-contract (stx-transfer? (var-get drip-amount) tx-sender contract-caller)))))
(define-public (fund-faucet (amt uint))
 (stx-transfer? amt tx-sender (as-contract tx-sender)))
(define-public (set-drip (amt uint) (cd uint))
 (begin (asserts! (is-eq tx-sender O) E1)
  (var-set drip-amount amt) (var-set cooldown cd) (ok true)))
(define-public (toggle-faucet)
 (begin (asserts! (is-eq tx-sender O) E1)
  (ok (var-set faucet-active (not (var-get faucet-active))))))
(define-read-only (get-faucet-info)
 {drip: (var-get drip-amount), cooldown: (var-get cooldown), active: (var-get faucet-active)})
(define-read-only (can-drip (u principal))
 (let ((last (default-to u0 (map-get? last-drip u))))
  (>= (- stacks-block-height last) (var-get cooldown))))

Functions (6)

FunctionAccessArgs
get-faucet-inforead-only
set-drippublicamt: uint, cd: uint
drippublic
fund-faucetpublicamt: uint
toggle-faucetpublic
can-dripread-onlyu: principal