Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Save our own broadcast message directly and save raw gossip message from peers to memory first #434

Merged
merged 18 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/ckb/tests/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ impl Actor for MockChainActor {
}
}
TraceTx(tx, reply_port) => {
debug!("Tracing transaction: {:?}", &tx);
match state.tx_status.get(&tx.tx_hash).cloned() {
Some((tx_view, status)) => {
reply_trace_tx(Some(tx_view), status, reply_port);
Expand Down
39 changes: 26 additions & 13 deletions src/fiber/channel.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#[cfg(debug_assertions)]
use crate::fiber::network::DebugEvent;
use crate::{debug_event, fiber::serde_utils::U64Hex};
use crate::{
debug_event,
fiber::{serde_utils::U64Hex, types::BroadcastMessageWithTimestamp},
};
use bitflags::bitflags;
use ckb_jsonrpc_types::BlockNumber;
use futures::future::OptionFuture;
use secp256k1::XOnlyPublicKey;
use tracing::{debug, error, info, trace, warn};
Expand All @@ -25,7 +27,7 @@ use crate::{
},
serde_utils::{CompactSignatureAsBytes, EntityHex, PubNonceAsBytes},
types::{
AcceptChannel, AddTlc, AnnouncementSignatures, BroadcastMessage, BroadcastMessageQuery,
AcceptChannel, AddTlc, AnnouncementSignatures, BroadcastMessageQuery,
BroadcastMessageQueryFlags, ChannelAnnouncement, ChannelReady, ChannelUpdate,
ClosingSigned, CommitmentSigned, EcdsaSignature, FiberChannelMessage, FiberMessage,
Hash256, OpenChannel, PaymentOnionPacket, PeeledPaymentOnionPacket, Privkey, Pubkey,
Expand All @@ -47,6 +49,7 @@ use ckb_types::{
},
packed::{Bytes, CellInput, CellOutput, OutPoint, Script, Transaction},
prelude::{AsTransactionBuilder, IntoTransactionView, Pack, Unpack},
H256,
};
use molecule::prelude::{Builder, Entity};
use musig2::{
Expand Down Expand Up @@ -1709,7 +1712,7 @@ where
event: ChannelEvent,
) -> Result<(), ProcessingChannelError> {
match event {
ChannelEvent::FundingTransactionConfirmed(block_number, tx_index) => {
ChannelEvent::FundingTransactionConfirmed(block_hash, tx_index, timestamp) => {
debug!("Funding transaction confirmed");
let flags = match state.state {
ChannelState::AwaitingChannelReady(flags) => flags,
Expand All @@ -1723,7 +1726,7 @@ where
"Expecting funding transaction confirmed event in state AwaitingChannelReady or after TX_SIGNATURES_SENT, but got state {:?}", &state.state)));
}
};
state.funding_tx_confirmed_at = Some((block_number, tx_index));
state.funding_tx_confirmed_at = Some((block_hash, tx_index, timestamp));
self.network
.send_message(NetworkActorMessage::new_command(
NetworkActorCommand::SendFiberMessage(FiberMessageWithPeerId::new(
Expand Down Expand Up @@ -1766,7 +1769,7 @@ where
self.network
.send_message(NetworkActorMessage::new_command(
NetworkActorCommand::BroadcastMessages(vec![
BroadcastMessage::ChannelUpdate(update),
BroadcastMessageWithTimestamp::ChannelUpdate(update),
]),
))
.expect(ASSUME_NETWORK_ACTOR_ALIVE);
Expand Down Expand Up @@ -2766,7 +2769,7 @@ pub struct ChannelActorState {
#[serde_as(as = "Option<EntityHex>")]
pub funding_tx: Option<Transaction>,

pub funding_tx_confirmed_at: Option<(BlockNumber, u32)>,
pub funding_tx_confirmed_at: Option<(H256, u32, u64)>,

#[serde_as(as = "Option<EntityHex>")]
pub funding_udt_type_script: Option<Script>,
Expand Down Expand Up @@ -2932,7 +2935,7 @@ pub struct ClosedChannel {}
#[derive(Debug)]
pub enum ChannelEvent {
PeerDisconnected,
FundingTransactionConfirmed(BlockNumber, u32),
FundingTransactionConfirmed(H256, u32, u64),
CommitmentTransactionConfirmed,
ClosingTransactionConfirmed,
CheckTlcSetdown,
Expand Down Expand Up @@ -3453,9 +3456,9 @@ impl ChannelActorState {
let channel_update = self.generate_channel_update(network).await;
network
.send_message(NetworkActorMessage::new_command(
NetworkActorCommand::BroadcastMessages(vec![BroadcastMessage::ChannelUpdate(
channel_update,
)]),
NetworkActorCommand::BroadcastMessages(vec![
BroadcastMessageWithTimestamp::ChannelUpdate(channel_update),
]),
))
.expect(ASSUME_NETWORK_ACTOR_ALIVE);
}
Expand Down Expand Up @@ -4387,6 +4390,13 @@ impl ChannelActorState {
.expect("Funding transaction outpoint is present")
}

pub fn must_get_funding_transaction_timestamp(&self) -> u64 {
self.funding_tx_confirmed_at
.as_ref()
.expect("Funding transaction confirmed at present")
.2
}

pub fn get_local_shutdown_script(&self) -> Script {
self.local_shutdown_script.clone()
}
Expand Down Expand Up @@ -5384,8 +5394,11 @@ impl ChannelActorState {
network
.send_message(NetworkActorMessage::new_command(
NetworkActorCommand::BroadcastMessages(vec![
BroadcastMessage::ChannelAnnouncement(channel_announcement),
BroadcastMessage::ChannelUpdate(channel_update),
BroadcastMessageWithTimestamp::ChannelAnnouncement(
self.must_get_funding_transaction_timestamp(),
channel_announcement,
),
BroadcastMessageWithTimestamp::ChannelUpdate(channel_update),
]),
))
.expect(ASSUME_NETWORK_ACTOR_ALIVE);
Expand Down
Loading
Loading