Skip to content

Commit 634afad

Browse files
committed
Pass along ChannelManager's last block hash
Channel and its corresponding ChannelMonitor keep track of the last block connected. However, they are initialized with the default block hash, which is a problem if the ChannelMonitor is serialized before a block is connected. Instead, pass along ChannelManager's last block hash, which is initialized with a "birthday" hash.
1 parent 7215087 commit 634afad

File tree

6 files changed

+55
-30
lines changed

6 files changed

+55
-30
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
//! channel being force-closed.
2020
2121
use bitcoin::blockdata::block::BlockHeader;
22+
use bitcoin::blockdata::constants::genesis_block;
2223
use bitcoin::blockdata::transaction::{Transaction, TxOut};
2324
use bitcoin::blockdata::script::{Builder, Script};
2425
use bitcoin::blockdata::opcodes;
@@ -35,7 +36,7 @@ use lightning::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr,
3536
use lightning::chain::transaction::OutPoint;
3637
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
3738
use lightning::chain::keysinterface::{KeysInterface, InMemorySigner};
38-
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret, PaymentSendFailure, ChannelManagerReadArgs};
39+
use lightning::ln::channelmanager::{ChainParameters, ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret, PaymentSendFailure, ChannelManagerReadArgs};
3940
use lightning::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
4041
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, DecodeError, ErrorAction, UpdateAddHTLC, Init};
4142
use lightning::util::enforcing_trait_impls::{EnforcingSigner, INITIAL_REVOKED_COMMITMENT_NUMBER};
@@ -318,7 +319,13 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
318319
config.channel_options.fee_proportional_millionths = 0;
319320
config.channel_options.announced_channel = true;
320321
config.peer_channel_config_limits.min_dust_limit_satoshis = 0;
321-
(ChannelManager::new(Network::Bitcoin, fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, 0),
322+
let network = Network::Bitcoin;
323+
let params = ChainParameters {
324+
network,
325+
latest_hash: genesis_block(network).block_hash(),
326+
latest_height: 0,
327+
};
328+
(ChannelManager::new(fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, params),
322329
monitor, keys_manager)
323330
} }
324331
}

fuzz/src/full_stack.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget,
3131
use lightning::chain::chainmonitor;
3232
use lightning::chain::transaction::OutPoint;
3333
use lightning::chain::keysinterface::{InMemorySigner, KeysInterface};
34-
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret};
34+
use lightning::ln::channelmanager::{ChainParameters, ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret};
3535
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor};
3636
use lightning::ln::msgs::DecodeError;
3737
use lightning::routing::router::get_route;
@@ -348,9 +348,16 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
348348
config.channel_options.fee_proportional_millionths = slice_to_be32(get_slice!(4));
349349
config.channel_options.announced_channel = get_slice!(1)[0] != 0;
350350
config.peer_channel_config_limits.min_dust_limit_satoshis = 0;
351-
let channelmanager = Arc::new(ChannelManager::new(Network::Bitcoin, fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, 0));
351+
let network = Network::Bitcoin;
352+
let genesis_hash = genesis_block(network).block_hash();
353+
let params = ChainParameters {
354+
network,
355+
latest_hash: genesis_hash,
356+
latest_height: 0,
357+
};
358+
let channelmanager = Arc::new(ChannelManager::new(fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, params));
352359
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret());
353-
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(genesis_block(Network::Bitcoin).header.block_hash(), None, Arc::clone(&logger)));
360+
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(genesis_hash, None, Arc::clone(&logger)));
354361

355362
let peers = RefCell::new([false; 256]);
356363
let mut loss_detector = MoneyLossDetector::new(&peers, channelmanager.clone(), monitor.clone(), PeerManager::new(MessageHandler {

lightning/src/chain/channelmonitor.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,8 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
980980
channel_parameters: &ChannelTransactionParameters,
981981
funding_redeemscript: Script, channel_value_satoshis: u64,
982982
commitment_transaction_number_obscure_factor: u64,
983-
initial_holder_commitment_tx: HolderCommitmentTransaction) -> ChannelMonitor<Signer> {
983+
initial_holder_commitment_tx: HolderCommitmentTransaction,
984+
last_block_hash: BlockHash) -> ChannelMonitor<Signer> {
984985

985986
assert!(commitment_transaction_number_obscure_factor <= (1 << 48));
986987
let our_channel_close_key_hash = WPubkeyHash::hash(&shutdown_pubkey.serialize());
@@ -1067,7 +1068,7 @@ impl<Signer: Sign> ChannelMonitor<Signer> {
10671068
lockdown_from_offchain: false,
10681069
holder_tx_signed: false,
10691070

1070-
last_block_hash: Default::default(),
1071+
last_block_hash,
10711072
secp_ctx,
10721073
}),
10731074
}
@@ -2789,10 +2790,12 @@ impl<'a, Signer: Sign, K: KeysInterface<Signer = Signer>> ReadableArgs<&'a K>
27892790

27902791
#[cfg(test)]
27912792
mod tests {
2793+
use bitcoin::blockdata::constants::genesis_block;
27922794
use bitcoin::blockdata::script::{Script, Builder};
27932795
use bitcoin::blockdata::opcodes;
27942796
use bitcoin::blockdata::transaction::{Transaction, TxIn, TxOut, SigHashType};
27952797
use bitcoin::blockdata::transaction::OutPoint as BitcoinOutPoint;
2798+
use bitcoin::network::constants::Network;
27962799
use bitcoin::util::bip143;
27972800
use bitcoin::hashes::Hash;
27982801
use bitcoin::hashes::sha256::Hash as Sha256;
@@ -2895,14 +2898,15 @@ mod tests {
28952898
}),
28962899
funding_outpoint: Some(funding_outpoint),
28972900
};
2901+
let last_block_hash = genesis_block(Network::Testnet).block_hash();
28982902
// Prune with one old state and a holder commitment tx holding a few overlaps with the
28992903
// old state.
29002904
let monitor = ChannelMonitor::new(Secp256k1::new(), keys,
29012905
&PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap()), 0, &Script::new(),
29022906
(OutPoint { txid: Txid::from_slice(&[43; 32]).unwrap(), index: 0 }, Script::new()),
29032907
&channel_parameters,
29042908
Script::new(), 46, 0,
2905-
HolderCommitmentTransaction::dummy());
2909+
HolderCommitmentTransaction::dummy(), last_block_hash);
29062910

29072911
monitor.provide_latest_holder_commitment_tx(HolderCommitmentTransaction::dummy(), preimages_to_holder_htlcs!(preimages[0..10])).unwrap();
29082912
let dummy_txid = dummy_tx.txid();

lightning/src/ln/channel.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ use util::errors::APIError;
3939
use util::config::{UserConfig,ChannelConfig};
4040

4141
use std;
42-
use std::default::Default;
4342
use std::{cmp,mem,fmt};
4443
use std::ops::Deref;
4544
#[cfg(any(test, feature = "fuzztarget"))]
@@ -496,7 +495,7 @@ impl<Signer: Sign> Channel<Signer> {
496495
}
497496

498497
// Constructors:
499-
pub fn new_outbound<K: Deref, F: Deref>(fee_estimator: &F, keys_provider: &K, counterparty_node_id: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, config: &UserConfig) -> Result<Channel<Signer>, APIError>
498+
pub fn new_outbound<K: Deref, F: Deref>(fee_estimator: &F, keys_provider: &K, counterparty_node_id: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, config: &UserConfig, last_block_connected: BlockHash) -> Result<Channel<Signer>, APIError>
500499
where K::Target: KeysInterface<Signer = Signer>,
501500
F::Target: FeeEstimator,
502501
{
@@ -569,7 +568,7 @@ impl<Signer: Sign> Channel<Signer> {
569568

570569
funding_tx_confirmed_in: None,
571570
short_channel_id: None,
572-
last_block_connected: Default::default(),
571+
last_block_connected,
573572
funding_tx_confirmations: 0,
574573

575574
feerate_per_kw: feerate,
@@ -623,7 +622,7 @@ impl<Signer: Sign> Channel<Signer> {
623622

624623
/// Creates a new channel from a remote sides' request for one.
625624
/// Assumes chain_hash has already been checked and corresponds with what we expect!
626-
pub fn new_from_req<K: Deref, F: Deref>(fee_estimator: &F, keys_provider: &K, counterparty_node_id: PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel, user_id: u64, config: &UserConfig) -> Result<Channel<Signer>, ChannelError>
625+
pub fn new_from_req<K: Deref, F: Deref>(fee_estimator: &F, keys_provider: &K, counterparty_node_id: PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel, user_id: u64, config: &UserConfig, last_block_connected: BlockHash) -> Result<Channel<Signer>, ChannelError>
627626
where K::Target: KeysInterface<Signer = Signer>,
628627
F::Target: FeeEstimator
629628
{
@@ -805,7 +804,7 @@ impl<Signer: Sign> Channel<Signer> {
805804

806805
funding_tx_confirmed_in: None,
807806
short_channel_id: None,
808-
last_block_connected: Default::default(),
807+
last_block_connected,
809808
funding_tx_confirmations: 0,
810809

811810
feerate_per_kw: msg.feerate_per_kw,
@@ -1576,7 +1575,7 @@ impl<Signer: Sign> Channel<Signer> {
15761575
&self.channel_transaction_parameters,
15771576
funding_redeemscript.clone(), self.channel_value_satoshis,
15781577
obscure_factor,
1579-
holder_commitment_tx);
1578+
holder_commitment_tx, self.last_block_connected);
15801579

15811580
channel_monitor.provide_latest_counterparty_commitment_tx(counterparty_initial_commitment_txid, Vec::new(), self.cur_counterparty_commitment_transaction_number, self.counterparty_cur_commitment_point.unwrap(), logger);
15821581

@@ -1646,7 +1645,7 @@ impl<Signer: Sign> Channel<Signer> {
16461645
&self.channel_transaction_parameters,
16471646
funding_redeemscript.clone(), self.channel_value_satoshis,
16481647
obscure_factor,
1649-
holder_commitment_tx);
1648+
holder_commitment_tx, self.last_block_connected);
16501649

16511650
channel_monitor.provide_latest_counterparty_commitment_tx(counterparty_initial_bitcoin_tx.txid, Vec::new(), self.cur_counterparty_commitment_transaction_number, self.counterparty_cur_commitment_point.unwrap(), logger);
16521651

@@ -4788,12 +4787,13 @@ mod tests {
47884787

47894788
let node_a_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
47904789
let config = UserConfig::default();
4791-
let node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, node_a_node_id, 10000000, 100000, 42, &config).unwrap();
4790+
let genesis_hash = genesis_block(network).header.block_hash();
4791+
let node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, node_a_node_id, 10000000, 100000, 42, &config, genesis_hash).unwrap();
47924792

47934793
// Now change the fee so we can check that the fee in the open_channel message is the
47944794
// same as the old fee.
47954795
fee_est.fee_est = 500;
4796-
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
4796+
let open_channel_msg = node_a_chan.get_open_channel(genesis_hash);
47974797
assert_eq!(open_channel_msg.feerate_per_kw, original_fee);
47984798
}
47994799

@@ -4813,14 +4813,15 @@ mod tests {
48134813
// Create Node A's channel pointing to Node B's pubkey
48144814
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
48154815
let config = UserConfig::default();
4816-
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&feeest, &&keys_provider, node_b_node_id, 10000000, 100000, 42, &config).unwrap();
4816+
let genesis_hash = genesis_block(network).header.block_hash();
4817+
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&feeest, &&keys_provider, node_b_node_id, 10000000, 100000, 42, &config, genesis_hash).unwrap();
48174818

48184819
// Create Node B's channel by receiving Node A's open_channel message
48194820
// Make sure A's dust limit is as we expect.
4820-
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
4821+
let open_channel_msg = node_a_chan.get_open_channel(genesis_hash);
48214822
assert_eq!(open_channel_msg.dust_limit_satoshis, 1560);
48224823
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
4823-
let node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, InitFeatures::known(), &open_channel_msg, 7, &config).unwrap();
4824+
let node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, InitFeatures::known(), &open_channel_msg, 7, &config, genesis_hash).unwrap();
48244825

48254826
// Node B --> Node A: accept channel, explicitly setting B's dust limit.
48264827
let mut accept_channel_msg = node_b_chan.get_accept_channel();
@@ -4880,7 +4881,8 @@ mod tests {
48804881

48814882
let node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
48824883
let config = UserConfig::default();
4883-
let mut chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, node_id, 10000000, 100000, 42, &config).unwrap();
4884+
let block_hash = genesis_block(network).header.block_hash();
4885+
let mut chan = Channel::<EnforcingSigner>::new_outbound(&&fee_est, &&keys_provider, node_id, 10000000, 100000, 42, &config, block_hash).unwrap();
48844886

48854887
let commitment_tx_fee_0_htlcs = chan.commit_tx_fee_msat(0);
48864888
let commitment_tx_fee_1_htlc = chan.commit_tx_fee_msat(1);
@@ -4927,12 +4929,13 @@ mod tests {
49274929
// Create Node A's channel pointing to Node B's pubkey
49284930
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
49294931
let config = UserConfig::default();
4930-
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&feeest, &&keys_provider, node_b_node_id, 10000000, 100000, 42, &config).unwrap();
4932+
let genesis_hash = genesis_block(network).header.block_hash();
4933+
let mut node_a_chan = Channel::<EnforcingSigner>::new_outbound(&&feeest, &&keys_provider, node_b_node_id, 10000000, 100000, 42, &config, genesis_hash).unwrap();
49314934

49324935
// Create Node B's channel by receiving Node A's open_channel message
4933-
let open_channel_msg = node_a_chan.get_open_channel(genesis_block(network).header.block_hash());
4936+
let open_channel_msg = node_a_chan.get_open_channel(genesis_hash);
49344937
let node_b_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[7; 32]).unwrap());
4935-
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, InitFeatures::known(), &open_channel_msg, 7, &config).unwrap();
4938+
let mut node_b_chan = Channel::<EnforcingSigner>::new_from_req(&&feeest, &&keys_provider, node_b_node_id, InitFeatures::known(), &open_channel_msg, 7, &config, genesis_hash).unwrap();
49364939

49374940
// Node B --> Node A: accept channel
49384941
let accept_channel_msg = node_b_chan.get_accept_channel();
@@ -5005,7 +5008,8 @@ mod tests {
50055008
let counterparty_node_id = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
50065009
let mut config = UserConfig::default();
50075010
config.channel_options.announced_channel = false;
5008-
let mut chan = Channel::<InMemorySigner>::new_outbound(&&feeest, &&keys_provider, counterparty_node_id, 10_000_000, 100000, 42, &config).unwrap(); // Nothing uses their network key in this test
5011+
let block_hash = genesis_block(Network::Testnet).header.block_hash();
5012+
let mut chan = Channel::<InMemorySigner>::new_outbound(&&feeest, &&keys_provider, counterparty_node_id, 10_000_000, 100000, 42, &config, block_hash).unwrap(); // Nothing uses their network key in this test
50095013
chan.holder_dust_limit_satoshis = 546;
50105014

50115015
let funding_info = OutPoint{ txid: Txid::from_hex("8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be").unwrap(), index: 0 };

lightning/src/ln/channelmanager.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,8 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
836836
}
837837

838838
let config = if override_config.is_some() { override_config.as_ref().unwrap() } else { &self.default_configuration };
839-
let channel = Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, channel_value_satoshis, push_msat, user_id, config)?;
839+
let block_hash = *self.last_block_hash.lock().unwrap();
840+
let channel = Channel::new_outbound(&self.fee_estimator, &self.keys_manager, their_network_key, channel_value_satoshis, push_msat, user_id, config, block_hash)?;
840841
let res = channel.get_open_channel(self.genesis_hash.clone());
841842

842843
let _persistence_guard = PersistenceNotifierGuard::new(&self.total_consistency_lock, &self.persistence_notifier);
@@ -2365,7 +2366,8 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
23652366
return Err(MsgHandleErrInternal::send_err_msg_no_close("Unknown genesis block hash".to_owned(), msg.temporary_channel_id.clone()));
23662367
}
23672368

2368-
let channel = Channel::new_from_req(&self.fee_estimator, &self.keys_manager, counterparty_node_id.clone(), their_features, msg, 0, &self.default_configuration)
2369+
let block_hash = *self.last_block_hash.lock().unwrap();
2370+
let channel = Channel::new_from_req(&self.fee_estimator, &self.keys_manager, counterparty_node_id.clone(), their_features, msg, 0, &self.default_configuration, block_hash)
23692371
.map_err(|e| MsgHandleErrInternal::from_chan_no_close(e, msg.temporary_channel_id))?;
23702372
let mut channel_state_lock = self.channel_state.lock().unwrap();
23712373
let channel_state = &mut *channel_state_lock;

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7408,9 +7408,10 @@ fn test_user_configurable_csv_delay() {
74087408
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
74097409
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &user_cfgs);
74107410
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
7411+
let block_hash = genesis_block(Network::Testnet).header.block_hash();
74117412

74127413
// We test config.our_to_self > BREAKDOWN_TIMEOUT is enforced in Channel::new_outbound()
7413-
if let Err(error) = Channel::new_outbound(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), 1000000, 1000000, 0, &low_our_to_self_config) {
7414+
if let Err(error) = Channel::new_outbound(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), 1000000, 1000000, 0, &low_our_to_self_config, block_hash) {
74147415
match error {
74157416
APIError::APIMisuseError { err } => { assert!(regex::Regex::new(r"Configured with an unreasonable our_to_self_delay \(\d+\) putting user funds at risks").unwrap().is_match(err.as_str())); },
74167417
_ => panic!("Unexpected event"),
@@ -7421,7 +7422,7 @@ fn test_user_configurable_csv_delay() {
74217422
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
74227423
let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
74237424
open_channel.to_self_delay = 200;
7424-
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::known(), &open_channel, 0, &low_our_to_self_config) {
7425+
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::known(), &open_channel, 0, &low_our_to_self_config, block_hash) {
74257426
match error {
74267427
ChannelError::Close(err) => { assert!(regex::Regex::new(r"Configured with an unreasonable our_to_self_delay \(\d+\) putting user funds at risks").unwrap().is_match(err.as_str())); },
74277428
_ => panic!("Unexpected event"),
@@ -7447,7 +7448,7 @@ fn test_user_configurable_csv_delay() {
74477448
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
74487449
let mut open_channel = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
74497450
open_channel.to_self_delay = 200;
7450-
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::known(), &open_channel, 0, &high_their_to_self_config) {
7451+
if let Err(error) = Channel::new_from_req(&&test_utils::TestFeeEstimator { sat_per_kw: 253 }, &nodes[0].keys_manager, nodes[1].node.get_our_node_id(), InitFeatures::known(), &open_channel, 0, &high_their_to_self_config, block_hash) {
74517452
match error {
74527453
ChannelError::Close(err) => { assert!(regex::Regex::new(r"They wanted our payments to be delayed by a needlessly long period\. Upper limit: \d+\. Actual: \d+").unwrap().is_match(err.as_str())); },
74537454
_ => panic!("Unexpected event"),

0 commit comments

Comments
 (0)