mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-25 09:29:33 +00:00
fix: dedup Deposit events
This commit is contained in:
parent
10ded0dc23
commit
64a2e5c5cb
@ -1,3 +1,5 @@
|
||||
#[cfg(not(feature = "standalone"))]
|
||||
use std::collections::HashSet;
|
||||
use std::{net::SocketAddr, sync::Arc, time::Duration};
|
||||
|
||||
use anyhow::{Context as _, Result, anyhow};
|
||||
@ -260,6 +262,21 @@ async fn bedrock_deposit_loop(
|
||||
let mut cursor: Option<(MsgId, Slot)> = None;
|
||||
let poll_interval = Duration::from_secs(1);
|
||||
|
||||
/// Mirrors [`logos_blockchain_zone_sdk::Deposit`] but can be stored in a [`HashSet`].
|
||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||
struct HashableDeposit {
|
||||
inputs: logos_blockchain_core::mantle::ledger::Inputs,
|
||||
metadata: Vec<u8>,
|
||||
}
|
||||
impl From<logos_blockchain_zone_sdk::Deposit> for HashableDeposit {
|
||||
fn from(deposit: logos_blockchain_zone_sdk::Deposit) -> Self {
|
||||
let logos_blockchain_zone_sdk::Deposit { inputs, metadata } = deposit;
|
||||
Self { inputs, metadata }
|
||||
}
|
||||
}
|
||||
// TODO: We should probably store this in DB.
|
||||
let mut seen_deposits = HashSet::new();
|
||||
|
||||
loop {
|
||||
let stream = match zone_indexer.next_messages(cursor).await {
|
||||
Ok(stream) => stream,
|
||||
@ -278,6 +295,10 @@ async fn bedrock_deposit_loop(
|
||||
info!("Observed Bedrock channel block id {:?}", block.id);
|
||||
}
|
||||
ZoneMessage::Deposit(deposit) => {
|
||||
let hashable_deposit = HashableDeposit::from(deposit.clone());
|
||||
if !seen_deposits.insert(hashable_deposit) {
|
||||
continue;
|
||||
}
|
||||
let metadata = match DepositMetadata::decode(&deposit.metadata) {
|
||||
Ok(metadata) => metadata,
|
||||
Err(err) => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user