feat(exex): send ExExNotification instead of CanonStateNotification (#7803)

This commit is contained in:
Alexey Shekhirin
2024-04-23 11:05:46 +01:00
committed by GitHub
parent c499797a6c
commit d6b861ea5d
10 changed files with 148 additions and 89 deletions

View File

@ -12,7 +12,7 @@ reth-node-api.workspace = true
reth-node-core.workspace = true
reth-node-ethereum.workspace = true
reth-primitives.workspace = true
reth-provider.workspace = true
reth-tracing.workspace = true
eyre.workspace = true
tokio.workspace = true

View File

@ -1,8 +1,8 @@
use futures::Future;
use reth_exex::{ExExContext, ExExEvent};
use reth_exex::{ExExContext, ExExEvent, ExExNotification};
use reth_node_api::FullNodeComponents;
use reth_node_ethereum::EthereumNode;
use reth_provider::CanonStateNotification;
use reth_tracing::tracing::info;
/// The initialization logic of the ExEx is just an async function.
///
@ -21,19 +21,20 @@ async fn exex_init<Node: FullNodeComponents>(
async fn exex<Node: FullNodeComponents>(mut ctx: ExExContext<Node>) -> eyre::Result<()> {
while let Some(notification) = ctx.notifications.recv().await {
match &notification {
CanonStateNotification::Commit { new } => {
println!("Received commit: {:?}", new.first().number..=new.tip().number);
ExExNotification::ChainCommitted { new } => {
info!(committed_chain = ?new.range(), "Received commit");
}
CanonStateNotification::Reorg { old, new } => {
println!(
"Received reorg: {:?} -> {:?}",
old.first().number..=old.tip().number,
new.first().number..=new.tip().number
);
ExExNotification::ChainReorged { old, new } => {
info!(from_chain = ?old.range(), to_chain = ?new.range(), "Received reorg");
}
ExExNotification::ChainReverted { old } => {
info!(reverted_chain = ?old.range(), "Received revert");
}
};
ctx.events.send(ExExEvent::FinishedHeight(notification.tip().number))?;
if let Some(committed_chain) = notification.committed_chain() {
ctx.events.send(ExExEvent::FinishedHeight(committed_chain.tip().number))?;
}
}
Ok(())
}

View File

@ -94,7 +94,8 @@ async fn op_bridge_exex<Node: FullNodeComponents>(
) -> eyre::Result<()> {
// Process all new chain state notifications
while let Some(notification) = ctx.notifications.recv().await {
if let Some(reverted_chain) = notification.reverted() {
// Revert all deposits and withdrawals
if let Some(reverted_chain) = notification.reverted_chain() {
let events = decode_chain_into_events(&reverted_chain);
let mut deposits = 0;
@ -126,22 +127,22 @@ async fn op_bridge_exex<Node: FullNodeComponents>(
}
// Insert all new deposits and withdrawals
let committed_chain = notification.committed();
let events = decode_chain_into_events(&committed_chain);
if let Some(committed_chain) = notification.committed_chain() {
let events = decode_chain_into_events(&committed_chain);
let mut deposits = 0;
let mut withdrawals = 0;
let mut deposits = 0;
let mut withdrawals = 0;
for (block, tx, log, event) in events {
match event {
// L1 -> L2 deposit
L1StandardBridgeEvents::ETHBridgeInitiated(ETHBridgeInitiated {
amount,
from,
to,
..
}) => {
let inserted = connection.execute(
for (block, tx, log, event) in events {
match event {
// L1 -> L2 deposit
L1StandardBridgeEvents::ETHBridgeInitiated(ETHBridgeInitiated {
amount,
from,
to,
..
}) => {
let inserted = connection.execute(
r#"
INSERT INTO deposits (block_number, tx_hash, contract_address, "from", "to", amount)
VALUES (?, ?, ?, ?, ?, ?)
@ -155,16 +156,16 @@ async fn op_bridge_exex<Node: FullNodeComponents>(
amount.to_string(),
),
)?;
deposits += inserted;
}
// L2 -> L1 withdrawal
L1StandardBridgeEvents::ETHBridgeFinalized(ETHBridgeFinalized {
amount,
from,
to,
..
}) => {
let inserted = connection.execute(
deposits += inserted;
}
// L2 -> L1 withdrawal
L1StandardBridgeEvents::ETHBridgeFinalized(ETHBridgeFinalized {
amount,
from,
to,
..
}) => {
let inserted = connection.execute(
r#"
INSERT INTO withdrawals (block_number, tx_hash, contract_address, "from", "to", amount)
VALUES (?, ?, ?, ?, ?, ?)
@ -178,17 +179,18 @@ async fn op_bridge_exex<Node: FullNodeComponents>(
amount.to_string(),
),
)?;
withdrawals += inserted;
}
_ => continue,
};
withdrawals += inserted;
}
_ => continue,
};
}
info!(block_range = ?committed_chain.range(), %deposits, %withdrawals, "Committed chain events");
// Send a finished height event, signaling the node that we don't need any blocks below
// this height anymore
ctx.events.send(ExExEvent::FinishedHeight(committed_chain.tip().number))?;
}
info!(block_range = ?committed_chain.range(), %deposits, %withdrawals, "Committed chain events");
// Send a finished height event, signaling the node that we don't need any blocks below
// this height anymore
ctx.events.send(ExExEvent::FinishedHeight(notification.tip().number))?;
}
Ok(())