## Description
Both SuiSyncer and EthSyncer query bridge events with cursors. Before
this PR,
1. unlike the regular `EventID` cursor (`EventID` = `TransactionDigest`
+ `EventSeq`), SuiSyncer uses `TransactionDigest`, in the hope that it
will simplify the downstream handling. This turns out to be an over
optimization and does not work because of how Event cursor is
implemented.
2. EthSyncer keeps track of events by block range. But we only update
the cursor when there are events. In the case of no event, cursor will
stay static. This is not great because eth's RPC only handles up to 50k
block ranges' query.
In this PR, we have the following changes:
1. change SuiSyncer's cursor to `EventID`.
2. EthSyncer sends empty event list too, in order to consistently move
the cursor forward.
## Test Plan
unit test cases
---
If your changes are not user-facing and do not break anything, you can
skip the following section. Otherwise, please briefly describe what has
changed under the Release Notes section.
### Type of Change (Check all that apply)
- [ ] protocol change
- [ ] user-visible impact
- [ ] breaking change for a client SDKs
- [ ] breaking change for FNs (FN binary must upgrade)
- [ ] breaking change for validators or node operators (must upgrade
binaries)
- [ ] breaking change for on-chain data layout
- [ ] necessitate either a data wipe or data migration
### Release notes
redo bridge syncer's curosrs.