tln onchain fees: use 2 block ETAs with 150 s/b fallback - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 15a6a83107607d99079863bffc65805472376784 DIR parent f3e5ba6ac16e8e30879079a8a18f7ad931a6017a HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 31 Jul 2018 14:36:42 +0200 ln onchain fees: use 2 block ETAs with 150 s/b fallback Diffstat: M electrum/lnbase.py | 16 +++++++++------- M electrum/lnhtlc.py | 1 - M electrum/lnworker.py | 4 ++-- M electrum/simple_config.py | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) --- DIR diff --git a/electrum/lnbase.py b/electrum/lnbase.py t@@ -284,7 +284,6 @@ def aiosafe(f): class Peer(PrintError): def __init__(self, lnworker, host, port, pubkey, request_initial_sync=False): - self.REV_GENESIS = bytes.fromhex(bitcoin.rev_hex(constants.net.GENESIS)) self.exception = None # set by aiosafe self.host = host self.port = port t@@ -499,7 +498,7 @@ class Peer(PrintError): keyfamilyrevocationroot = 5 keyfamilynodekey = 6 # TODO currently unused # amounts - local_feerate = 20000 + local_feerate = self.current_feerate_per_kw() # key derivation keypair_generator = lambda family, i: Keypair(*wallet.keystore.get_keypair([family, i], password)) local_config=ChannelConfig( t@@ -522,7 +521,7 @@ class Peer(PrintError): msg = gen_msg( "open_channel", temporary_channel_id=temp_channel_id, - chain_hash=self.REV_GENESIS, + chain_hash=constants.net.rev_genesis_bytes(), funding_satoshis=funding_sat, push_msat=push_msat, dust_limit_satoshis=local_config.dust_limit_sat, t@@ -734,7 +733,7 @@ class Peer(PrintError): bitcoin_signature_2=bitcoin_sigs[1], len=0, #features not set (defaults to zeros) - chain_hash=self.REV_GENESIS, + chain_hash=constants.net.rev_genesis_bytes(), short_channel_id=chan.short_channel_id, node_id_1=node_ids[0], node_id_2=node_ids[1], t@@ -791,7 +790,7 @@ class Peer(PrintError): chan_ann = gen_msg("channel_announcement", len=0, #features not set (defaults to zeros) - chain_hash=self.REV_GENESIS, + chain_hash=constants.net.rev_genesis_bytes(), short_channel_id=chan.short_channel_id, node_id_1=node_ids[0], node_id_2=node_ids[1], t@@ -1034,7 +1033,7 @@ class Peer(PrintError): def on_bitcoin_fee_update(self, chan): """ - called when the fee histogram (based on current mempool) changed + called when our fee estimates change """ if not chan.constraints.is_initiator: # TODO force close if initiator does not update_fee enough t@@ -1056,5 +1055,8 @@ class Peer(PrintError): self.lnworker.save_channel(chan) def current_feerate_per_kw(self): - feerate_per_kvbyte = self.network.config.depth_target_to_fee(10*1000000) # 10 MB + from .simple_config import FEE_LN_ETA_TARGET, FEERATE_FALLBACK_STATIC_FEE + feerate_per_kvbyte = self.network.config.eta_target_to_fee(FEE_LN_ETA_TARGET) + if feerate_per_kvbyte is None: + feerate_per_kvbyte = FEERATE_FALLBACK_STATIC_FEE return max(253, feerate_per_kvbyte // 4) DIR diff --git a/electrum/lnhtlc.py b/electrum/lnhtlc.py t@@ -572,7 +572,6 @@ class HTLCStateMachine(PrintError): "constraints": self.constraints, "funding_outpoint": self.funding_outpoint, "node_id": self.node_id, - "channel_id": self.channel_id } def serialize(self): DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -53,7 +53,7 @@ class LNWorker(PrintError): self._last_tried_peer = {} # LNPeerAddr -> unix timestamp self._add_peers_from_config() # wait until we see confirmations - self.network.register_callback(self.on_network_update, ['updated', 'verified', 'fee_histogram']) # thread safe + self.network.register_callback(self.on_network_update, ['updated', 'verified', 'fee']) # thread safe self.on_network_update('updated') # shortcut (don't block) if funding tx locked and verified self.network.futures.append(asyncio.run_coroutine_threadsafe(self.main_loop(), asyncio.get_event_loop())) t@@ -151,7 +151,7 @@ class LNWorker(PrintError): if peer is None: self.print_error("peer not found for {}".format(bh2u(chan.node_id))) return - if event == 'fee_histogram': + if event == 'fee': peer.on_bitcoin_fee_update(chan) conf = self.wallet.get_tx_height(chan.funding_outpoint.txid)[1] peer.on_network_update(chan, conf) DIR diff --git a/electrum/simple_config.py b/electrum/simple_config.py t@@ -18,6 +18,7 @@ from .logging import get_logger, Logger FEE_ETA_TARGETS = [25, 10, 5, 2] FEE_DEPTH_TARGETS = [10000000, 5000000, 2000000, 1000000, 500000, 200000, 100000] +FEE_LN_ETA_TARGET = 2 # note: make sure the network is asking for estimates for this target # satoshi per kbyte FEERATE_MAX_DYNAMIC = 1500000