X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fln%2Fchannel.rs;h=c7c3208e78e3007293e7171074f52d555aa1ba60;hb=7318a97b157cdf69b41dda1ea918fea142d26399;hp=f3455a9f5c71eef0642e15a8101c9ba2888ba023;hpb=716b37863a553de6fcf83202d5e1294a47e7660f;p=rust-lightning diff --git a/src/ln/channel.rs b/src/ln/channel.rs index f3455a9f..c7c3208e 100644 --- a/src/ln/channel.rs +++ b/src/ln/channel.rs @@ -23,7 +23,7 @@ use chain::chaininterface::{FeeEstimator,ConfirmationTarget}; use chain::transaction::OutPoint; use util::{transaction_utils,rng}; use util::sha2::Sha256; -use util::logger::{Logger, Record}; +use util::logger::Logger; use util::errors::APIError; use std; @@ -360,7 +360,8 @@ impl Channel { /// Guaranteed to return a value no larger than channel_value_satoshis fn get_our_channel_reserve_satoshis(channel_value_satoshis: u64) -> u64 { - cmp::min(channel_value_satoshis, 1000) //TODO + let (q, _) = channel_value_satoshis.overflowing_div(100); + cmp::min(channel_value_satoshis, cmp::max(q, 1000)) //TODO } fn derive_our_dust_limit_satoshis(at_open_background_feerate: u64) -> u64 { @@ -391,8 +392,13 @@ impl Channel { return Err(APIError::APIMisuseError{err: "push value > channel value"}); } - let feerate = fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Normal); + let background_feerate = fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Background); + if Channel::get_our_channel_reserve_satoshis(channel_value_satoshis) < Channel::derive_our_dust_limit_satoshis(background_feerate) { + return Err(APIError::FeeRateTooHigh{err: format!("Not enough reserve above dust limit can be found at current fee rate({})", background_feerate), feerate: background_feerate}); + } + + let feerate = fee_estimator.get_est_sat_per_1000_weight(ConfirmationTarget::Normal); let secp_ctx = Secp256k1::new(); let our_channel_monitor_claim_key_hash = Hash160::from_data(&PublicKey::from_secret_key(&secp_ctx, &chan_keys.channel_monitor_claim_key).unwrap().serialize()); @@ -512,9 +518,6 @@ impl Channel { if msg.max_accepted_htlcs > 483 { return_error_message!("max_accpted_htlcs > 483"); } - if (msg.channel_flags & 254) != 0 { - return Err(HandleError{err: "Unknown channel flags", action: Some(msgs::ErrorAction::IgnoreError) }); - } // Convert things into internal flags and prep our state: