mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-05-27 02:19:25 +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 std::{net::SocketAddr, sync::Arc, time::Duration};
|
||||||
|
|
||||||
use anyhow::{Context as _, Result, anyhow};
|
use anyhow::{Context as _, Result, anyhow};
|
||||||
@ -260,6 +262,21 @@ async fn bedrock_deposit_loop(
|
|||||||
let mut cursor: Option<(MsgId, Slot)> = None;
|
let mut cursor: Option<(MsgId, Slot)> = None;
|
||||||
let poll_interval = Duration::from_secs(1);
|
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 {
|
loop {
|
||||||
let stream = match zone_indexer.next_messages(cursor).await {
|
let stream = match zone_indexer.next_messages(cursor).await {
|
||||||
Ok(stream) => stream,
|
Ok(stream) => stream,
|
||||||
@ -278,6 +295,10 @@ async fn bedrock_deposit_loop(
|
|||||||
info!("Observed Bedrock channel block id {:?}", block.id);
|
info!("Observed Bedrock channel block id {:?}", block.id);
|
||||||
}
|
}
|
||||||
ZoneMessage::Deposit(deposit) => {
|
ZoneMessage::Deposit(deposit) => {
|
||||||
|
let hashable_deposit = HashableDeposit::from(deposit.clone());
|
||||||
|
if !seen_deposits.insert(hashable_deposit) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
let metadata = match DepositMetadata::decode(&deposit.metadata) {
|
let metadata = match DepositMetadata::decode(&deposit.metadata) {
|
||||||
Ok(metadata) => metadata,
|
Ok(metadata) => metadata,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user