## Description
This PR reworks `last_synced_sui_checkpoints` and
`last_synced_eth_blocks`.
* `last_synced_sui_checkpoints`: when SuiSyncer gets events with false
`has_next_page`, it means it has synced to the tip of the blockchain.
Then it notifies the metrics update task to query the latest checkpoint
from chain and update it. Apparently this is not accurate, but it is the
best we can do today, because event query does not return checkpoint
number. In the future when we switch to graphql, checkpoint num will be
available and we can get rid of this.
* Also note that when the bridge node is catching up, `has_next_page`
will be true and the metrics is not going to be updated.
* `last_synced_eth_blocks`: make it a vector to track all contract
progresses.
## Test plan
added a unit test for sui side.
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] REST API: