Skip to content

[36] Surface events for health/pause/admin operations #36

Description

@merlik787-droi

Problem Statement

Several state-changing operations do not emit events:

  • reward-pool::set_pause — toggles global pause; no event.
  • reward-pool::initialize — bootstrap; no event.
  • course-registry::initialize — same.
  • badge-nft::initialize — same.
  • stake-vault::initializedoes emit StakeVaultInitialized.
  • quest-engine::initialize — same.
  • governance::initialize — same.

The asymmetry: half the contracts emit init events, half don't. Off-chain indexers can't reconstruct admin wiring from events alone.

Why It Matters

  • Operations and analytics teams use events as the source of truth.
  • An event-less init means indexers must poll, missing the moment.

Expected Outcome

  • Every initialize() emits a ContractInitialized { admin, role_addresses... } event.
  • Every set_pause() emits a PauseToggled { admin, status } event.
  • Symmetric PauseToggled for quest-engine::set_pause.

Acceptance Criteria

  • New event types defined and emitted.
  • Tests assert the events are present.
  • Cross-contract indexer documentation updated.

Implementation Notes

  • Use consistent naming ContractInitialized, PauseToggled, AdminTransferred across all contracts.

Files / Modules Affected

All six contracts; cross-cutting doc updates.

Dependencies

Issue #20 (two-step admin transfer) ties to this.

Difficulty

Easy.

Estimated Effort

2–3 hours.

Suggested Labels

observability, P2, quality


Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions