Source Code

(define-constant err-unauthorized (err u2000))

(define-data-var contract-owner principal tx-sender)
(define-map approved-operators principal bool)
(define-map approved-peg-in-address (buff 128) bool)
(define-map peg-in-sent { tx: (buff 4096), output: uint } bool)

;; peg-in data
(define-read-only (is-peg-in-address-approved (address (buff 128)))
	(default-to false (map-get? approved-peg-in-address address)))

(define-read-only (get-peg-in-sent (tx (buff 4096)) (output uint))
	(default-to false (map-get? peg-in-sent { tx: tx, output: output })))

;; permission data
(define-read-only (get-approved-operator (operator principal))
	(default-to false (map-get? approved-operators operator)))

(define-read-only (is-contract-owner)
	(ok (asserts! (is-eq (var-get contract-owner) contract-caller) err-unauthorized)))

(define-read-only (is-approved-operator)
	(ok (asserts! (or (get-approved-operator contract-caller) (is-ok (is-contract-owner))) err-unauthorized)))

(define-public (approve-operator (operator principal) (approved bool))
	(begin
		(try! (is-contract-owner))
		(print { action: "approve-operator", data: { operator: operator, approved: approved } })
		(ok (map-set approved-operators operator approved))))

(define-public (set-contract-owner (new-contract-owner principal))
	(begin
		(try! (is-contract-owner))
		(print { action: "set-contract-owner", data: { new-contract-owner: new-contract-owner } })
		(ok (var-set contract-owner new-contract-owner))))

(define-public (approve-peg-in-address (address (buff 128)) (approved bool))
	(begin
		(try! (is-contract-owner))
		(print { action: "approve-peg-in-address", data: { address: address, approved: approved } })
		(ok (map-set approved-peg-in-address address approved))))

(define-public (set-peg-in-sent (tx (buff 4096)) (output uint) (sent bool))
	(begin
		(try! (is-approved-operator))
		(print { action: "set-peg-in-sent", data: { tx: tx, output: output, sent: sent } })
		(ok (map-set peg-in-sent { tx: tx, output: output } sent))))

Functions (9)

FunctionAccessArgs
is-peg-in-address-approvedread-onlyaddress: (buff 128
get-peg-in-sentread-onlytx: (buff 4096
get-approved-operatorread-onlyoperator: principal
is-contract-ownerread-only
is-approved-operatorread-only
approve-operatorpublicoperator: principal, approved: bool
set-contract-ownerpublicnew-contract-owner: principal
approve-peg-in-addresspublicaddress: (buff 128
set-peg-in-sentpublictx: (buff 4096