Gate every wallet-side effect on this: a watch-only event has no contract.
`if (!isContractVtxoEvent(event)) return;` inside `onContractEvent`,before reading `event.contract` — which does not compile without it. Copy
`if (!isContractVtxoEvent(event)) return;` inside `onContractEvent`,before reading `event.contract` — which does not compile without it.
Gate every wallet-side effect on this: a watch-only event has no contract.