Source Code

;; SatGuard Governance Delegation
(define-constant err-nf (err u240))
(define-constant err-self (err u241))
(define-constant err-dup (err u242))
(define-map delegates {from: principal} {to: principal,da: uint})
(define-map del-power {to: principal} {total: uint,count: uint})
(define-read-only (get-delegate (from principal)) (map-get? delegates {from: from}))
(define-read-only (get-del-power (to principal)) (map-get? del-power {to: to}))
(define-public (delegate-to (to principal))
  (let ((contrib (unwrap! (contract-call? .insurance-pool get-contrib u1 tx-sender) err-nf))
        (wt (get a contrib))
        (ex (map-get? delegates {from: tx-sender}))
        (dp (default-to {total: u0,count: u0} (map-get? del-power {to: to}))))
    (asserts! (not (is-eq tx-sender to)) err-self)
    (asserts! (is-none ex) err-dup)
    (map-set delegates {from: tx-sender} {to: to,da: block-height})
    (map-set del-power {to: to} {total: (+ (get total dp) wt),count: (+ (get count dp) u1)})
    (print {e: "delegated",from: tx-sender,to: to,wt: wt})
    (ok true)))
(define-public (revoke-delegation)
  (let ((del (unwrap! (map-get? delegates {from: tx-sender}) err-nf))
        (contrib (unwrap! (contract-call? .insurance-pool get-contrib u1 tx-sender) err-nf))
        (wt (get a contrib))
        (dp (default-to {total: u0,count: u0} (map-get? del-power {to: (get to del)}))))
    (map-delete delegates {from: tx-sender})
    (map-set del-power {to: (get to del)} {total: (- (get total dp) wt),count: (- (get count dp) u1)})
    (print {e: "delegation-revoked",from: tx-sender})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-delegateread-onlyfrom: principal
get-del-powerread-onlyto: principal
delegate-topublicto: principal
revoke-delegationpublic