Source Code

;; deadman-notification-logger
;; Centralized protocol event logging.
;; Provides a sequential event log for off-chain indexers.
;; Events are stored on-chain with IDs for queryability.

(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-NOT-AUTHORIZED (err u900))

(define-data-var next-event-id uint u1)
(define-data-var authorized-caller principal CONTRACT-OWNER)

(define-map events uint {
  event-type: (string-ascii 32),
  vault-id: uint,
  actor: principal,
  data: uint,
  block: uint
})

;; --- Authorization ---

(define-public (set-authorized-caller (caller principal))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (ok (var-set authorized-caller caller))))

(define-private (is-authorized)
  (or (is-eq contract-caller (var-get authorized-caller))
      (is-eq contract-caller CONTRACT-OWNER)))

;; --- Event Logging ---

;; Log a protocol event. Returns the assigned event ID.
(define-public (log-event
    (event-type (string-ascii 32))
    (vault-id uint)
    (actor principal)
    (data uint))
  (let ((event-id (var-get next-event-id)))
    (asserts! (is-authorized) ERR-NOT-AUTHORIZED)
    (map-set events event-id {
      event-type: event-type,
      vault-id: vault-id,
      actor: actor,
      data: data,
      block: block-height
    })
    (var-set next-event-id (+ event-id u1))
    (print { event: "protocol-event", event-id: event-id, event-type: event-type, vault-id: vault-id })
    (ok event-id)))

;; --- Read Functions ---

(define-read-only (get-event (event-id uint))
  (map-get? events event-id))

(define-read-only (get-next-event-id)
  (var-get next-event-id))

Functions (5)

FunctionAccessArgs
set-authorized-callerpubliccaller: principal
is-authorizedprivate
log-eventpublicevent-type: (string-ascii 32
get-eventread-onlyevent-id: uint
get-next-event-idread-only