Source Code

(impl-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.extension-trait.extension-trait)
(impl-trait 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.proposal-trait.proposal-trait)

(define-constant ERR-NOT-AUTHORIZED (err u1000))

(define-map approved-updaters principal bool)

;; read-only calls

(define-read-only (is-dao-or-extension)
  (ok (asserts! (or (is-eq tx-sender 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.executor-dao) (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.executor-dao is-extension contract-caller)) ERR-NOT-AUTHORIZED)))

(define-read-only (get-approved-updater-or-default (updater principal))
	(default-to false (map-get? approved-updaters updater)))

(define-read-only (is-blocklisted-or-default (sender principal))
	(or (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-registry-v2-01 is-blocklisted-or-default sender) (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.alex-staking-v2 is-blocklisted-or-default sender)))

(define-read-only (is-blocklisted-or-default-many (senders (list 5000 principal)))
	(map is-blocklisted-or-default senders))

;; priviliged calls

(define-public (add-to-blocklist-many (blocked-many (list 500 principal)))
	(begin 
		(asserts! (or (is-ok (is-dao-or-extension)) (get-approved-updater-or-default tx-sender)) ERR-NOT-AUTHORIZED) 
		(ok (map add-to-blocklist blocked-many))))

;; governance calls

(define-public (remove-from-blocklist-many (blocked-many (list 500 principal)))
	(begin 
		(try! (is-dao-or-extension))
		(ok (map remove-from-blocklist blocked-many))))

(define-public (approve-updater (updater principal) (approved bool))
	(begin
		(try! (is-dao-or-extension))
		(ok (map-set approved-updaters updater approved))))

;; internal calls

(define-private (add-to-blocklist (blocked principal))
	(set-blocklist { sender: blocked, blocked: true }))

(define-private (remove-from-blocklist (blocked principal))
	(set-blocklist { sender: blocked, blocked: false }))

(define-private (set-blocklist (blocked { sender: principal, blocked: bool }))
	(begin
		(print { notification: "set-blocklist", payload: blocked }) 
		(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.alex-staking-v2 set-blocklist-many (list blocked)))
		(contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-registry-v2-01 set-blocklist-many (list blocked))))

(define-public (callback (sender principal) (payload (buff 2048)))
	(ok true))

(define-public (execute (sender principal))
	(begin 
		(try! (contract-call? 'SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.executor-dao set-extensions (list { extension: .blocklist, enabled: true } )))
		(ok true)))

Functions (12)

FunctionAccessArgs
is-dao-or-extensionread-only
get-approved-updater-or-defaultread-onlyupdater: principal
is-blocklisted-or-defaultread-onlysender: principal
is-blocklisted-or-default-manyread-onlysenders: (list 5000 principal
add-to-blocklist-manypublicblocked-many: (list 500 principal
remove-from-blocklist-manypublicblocked-many: (list 500 principal
approve-updaterpublicupdater: principal, approved: bool
add-to-blocklistprivateblocked: principal
remove-from-blocklistprivateblocked: principal
set-blocklistprivateblocked: { sender: principal, blocked: bool }
callbackpublicsender: principal, payload: (buff 2048
executepublicsender: principal