Description
None of the contracts publish events. State-changing calls — treasury::deposit, governance::create_proposal, voting::cast_vote, dividends::fund/record_share — mutate storage silently. Off-chain consumers (the future @lumio/sdk indexer, the dashboard) have no event stream to follow, which is the idiomatic Soroban way to expose state changes.
Scope
- Publish a
contract event from each state-changing entrypoint using env.events().publish(...) with a small, documented topic/data shape (e.g. topic ("deposit", member), data amount).
- Keep events minimal and consistent across contracts.
- Add tests asserting the event is emitted (Soroban testutils
env.events().all()).
Out of scope
- An off-chain indexer (separate repo/phase).
- Changing existing return values.
Acceptance criteria
Where to start
Estimated effort: ~4–6h. Good Soroban issue.
Description
None of the contracts publish events. State-changing calls —
treasury::deposit,governance::create_proposal,voting::cast_vote,dividends::fund/record_share— mutate storage silently. Off-chain consumers (the future@lumio/sdkindexer, the dashboard) have no event stream to follow, which is the idiomatic Soroban way to expose state changes.Scope
contract eventfrom each state-changing entrypoint usingenv.events().publish(...)with a small, documented topic/data shape (e.g. topic("deposit", member), dataamount).env.events().all()).Out of scope
Acceptance criteria
treasury::depositandvoting::cast_vote.Where to start
contracts/treasury/src/lib.rs:31,contracts/voting/src/lib.rs:32,contracts/governance/src/lib.rs:39,contracts/dividends/src/lib.rs:28.Estimated effort: ~4–6h. Good Soroban issue.