(define-data-var lc uint u0)
(define-map logs uint
{source: principal, event-type: uint, ref-id: uint, data: uint, block: uint})
(define-map type-count uint uint)
(define-public (log-event (event-type uint) (ref-id uint) (data uint))
(let ((id (var-get lc))
(tc (default-to u0 (map-get? type-count event-type))))
(var-set lc (+ id u1))
(map-set type-count event-type (+ tc u1))
(ok (map-set logs id
{source: tx-sender, event-type: event-type, ref-id: ref-id,
data: data, block: stacks-block-height}))))
(define-read-only (get-log (id uint)) (map-get? logs id))
(define-read-only (get-log-count) (var-get lc))
(define-read-only (get-type-count (event-type uint))
(default-to u0 (map-get? type-count event-type)))