tlnsweep: simplify a few methods - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 7418bd45526a3c9bd2cfb883fa33269814acc42d DIR parent 6bbdbf75961dbda5bac4566c3447e4d7d5beccaa HTML Author: ThomasV <thomasv@electrum.org> Date: Wed, 29 May 2019 11:56:51 +0200 lnsweep: simplify a few methods Diffstat: M electrum/lnsweep.py | 108 ++++++++++++------------------- 1 file changed, 40 insertions(+), 68 deletions(-) --- DIR diff --git a/electrum/lnsweep.py b/electrum/lnsweep.py t@@ -25,35 +25,6 @@ if TYPE_CHECKING: _logger = get_logger(__name__) -def maybe_create_sweeptx_for_their_ctx_to_remote(ctx: Transaction, sweep_address: str, - our_payment_privkey: ecc.ECPrivkey) -> Optional[Transaction]: - our_payment_pubkey = our_payment_privkey.get_public_key_bytes(compressed=True) - to_remote_address = make_commitment_output_to_remote_address(our_payment_pubkey) - output_idx = ctx.get_output_idx_from_address(to_remote_address) - if output_idx is None: return None - sweep_tx = create_sweeptx_their_ctx_to_remote(sweep_address=sweep_address, - ctx=ctx, - output_idx=output_idx, - our_payment_privkey=our_payment_privkey) - return sweep_tx - - -def maybe_create_sweeptx_for_their_ctx_to_local(ctx: Transaction, revocation_privkey: bytes, - to_self_delay: int, delayed_pubkey: bytes, - sweep_address: str) -> Optional[Transaction]: - revocation_pubkey = ecc.ECPrivkey(revocation_privkey).get_public_key_bytes(compressed=True) - witness_script = bh2u(make_commitment_output_to_local_witness_script( - revocation_pubkey, to_self_delay, delayed_pubkey)) - to_local_address = redeem_script_to_address('p2wsh', witness_script) - output_idx = ctx.get_output_idx_from_address(to_local_address) - if output_idx is None: return None - sweep_tx = create_sweeptx_ctx_to_local(sweep_address=sweep_address, - ctx=ctx, - output_idx=output_idx, - witness_script=witness_script, - privkey=revocation_privkey, - is_revocation=True) - return sweep_tx def create_sweeptxs_for_their_revoked_ctx(chan: 'Channel', ctx: Transaction, per_commitment_secret: bytes, t@@ -71,12 +42,19 @@ def create_sweeptxs_for_their_revoked_ctx(chan: 'Channel', ctx: Transaction, per this_delayed_pubkey = derive_pubkey(this_conf.delayed_basepoint.pubkey, pcp) txs = {} # to_local - sweep_tx = maybe_create_sweeptx_for_their_ctx_to_local(ctx=ctx, - revocation_privkey=other_revocation_privkey, - to_self_delay=to_self_delay, - delayed_pubkey=this_delayed_pubkey, - sweep_address=sweep_address) - if sweep_tx: + revocation_pubkey = ecc.ECPrivkey(other_revocation_privkey).get_public_key_bytes(compressed=True) + witness_script = bh2u(make_commitment_output_to_local_witness_script( + revocation_pubkey, to_self_delay, this_delayed_pubkey)) + to_local_address = redeem_script_to_address('p2wsh', witness_script) + output_idx = ctx.get_output_idx_from_address(to_local_address) + if output_idx is not None: + sweep_tx = create_sweeptx_ctx_to_local( + sweep_address=sweep_address, + ctx=ctx, + output_idx=output_idx, + witness_script=witness_script, + privkey=other_revocation_privkey, + is_revocation=True) txs[ctx.txid()] = sweep_tx # HTLCs def create_sweeptx_for_htlc(htlc: 'UpdateAddHtlc', is_received_htlc: bool) -> Tuple[Optional[Transaction], t@@ -214,20 +192,28 @@ def create_sweeptxs_for_our_ctx(chan: 'Channel', ctx: Transaction, our_pcp = ecc.ECPrivkey(our_per_commitment_secret).get_public_key_bytes(compressed=True) # prep this_delayed_bp_privkey = ecc.ECPrivkey(this_conf.delayed_basepoint.privkey) - this_localdelayed_privkey = derive_privkey(this_delayed_bp_privkey.secret_scalar, our_pcp) - this_localdelayed_privkey = ecc.ECPrivkey.from_secret_scalar(this_localdelayed_privkey) - other_revocation_pubkey = derive_blinded_pubkey(other_conf.revocation_basepoint.pubkey, our_pcp) + our_localdelayed_privkey = derive_privkey(this_delayed_bp_privkey.secret_scalar, our_pcp) + our_localdelayed_privkey = ecc.ECPrivkey.from_secret_scalar(our_localdelayed_privkey) + remote_revocation_pubkey = derive_blinded_pubkey(other_conf.revocation_basepoint.pubkey, our_pcp) to_self_delay = chan.config[REMOTE].to_self_delay this_htlc_privkey = derive_privkey(secret=int.from_bytes(this_conf.htlc_basepoint.privkey, 'big'), per_commitment_point=our_pcp).to_bytes(32, 'big') txs = {} # to_local - sweep_tx = maybe_create_sweeptx_that_spends_to_local_in_our_ctx(ctx=ctx, - sweep_address=sweep_address, - our_localdelayed_privkey=this_localdelayed_privkey, - remote_revocation_pubkey=other_revocation_pubkey, - to_self_delay=to_self_delay) - if sweep_tx: + our_localdelayed_pubkey = our_localdelayed_privkey.get_public_key_bytes(compressed=True) + to_local_witness_script = bh2u(make_commitment_output_to_local_witness_script( + remote_revocation_pubkey, to_self_delay, our_localdelayed_pubkey)) + to_local_address = redeem_script_to_address('p2wsh', to_local_witness_script) + output_idx = ctx.get_output_idx_from_address(to_local_address) + if output_idx is not None: + sweep_tx = create_sweeptx_ctx_to_local( + sweep_address=sweep_address, + ctx=ctx, + output_idx=output_idx, + witness_script=to_local_witness_script, + privkey=our_localdelayed_privkey.get_secret_bytes(), + is_revocation=False, + to_self_delay=to_self_delay) txs[sweep_tx.prevout(0)] = sweep_tx # HTLCs def create_txns_for_htlc(htlc: 'UpdateAddHtlc', is_received_htlc: bool) -> Tuple[Optional[Transaction], Optional[Transaction]]: t@@ -253,7 +239,7 @@ def create_sweeptxs_for_our_ctx(chan: 'Channel', ctx: Transaction, htlc_tx=htlc_tx, htlctx_witness_script=htlctx_witness_script, sweep_address=sweep_address, - privkey=this_localdelayed_privkey.get_secret_bytes(), + privkey=our_localdelayed_privkey.get_secret_bytes(), is_revocation=False) return htlc_tx, to_wallet_tx # offered HTLCs, in our ctx --> "timeout" t@@ -311,10 +297,15 @@ def create_sweeptxs_for_their_ctx(chan: 'Channel', ctx: Transaction, txs = {} # to_local is handled by lnwatcher # to_remote - sweep_tx = maybe_create_sweeptx_for_their_ctx_to_remote(ctx=ctx, - sweep_address=sweep_address, - our_payment_privkey=other_payment_privkey) - if sweep_tx: + our_payment_pubkey = other_payment_privkey.get_public_key_bytes(compressed=True) + to_remote_address = make_commitment_output_to_remote_address(our_payment_pubkey) + output_idx = ctx.get_output_idx_from_address(to_remote_address) + if output_idx is not None: + sweep_tx = create_sweeptx_their_ctx_to_remote( + sweep_address=sweep_address, + ctx=ctx, + output_idx=output_idx, + our_payment_privkey=other_payment_privkey) txs[sweep_tx.prevout(0)] = sweep_tx # HTLCs # from their ctx, we can only redeem HTLCs if the ctx was not revoked, t@@ -362,25 +353,6 @@ def create_sweeptxs_for_their_ctx(chan: 'Channel', ctx: Transaction, return txs -def maybe_create_sweeptx_that_spends_to_local_in_our_ctx( - ctx: Transaction, sweep_address: str, our_localdelayed_privkey: ecc.ECPrivkey, - remote_revocation_pubkey: bytes, to_self_delay: int) -> Optional[Transaction]: - our_localdelayed_pubkey = our_localdelayed_privkey.get_public_key_bytes(compressed=True) - to_local_witness_script = bh2u(make_commitment_output_to_local_witness_script( - remote_revocation_pubkey, to_self_delay, our_localdelayed_pubkey)) - to_local_address = redeem_script_to_address('p2wsh', to_local_witness_script) - output_idx = ctx.get_output_idx_from_address(to_local_address) - if output_idx is None: return None - sweep_tx = create_sweeptx_ctx_to_local(sweep_address=sweep_address, - ctx=ctx, - output_idx=output_idx, - witness_script=to_local_witness_script, - privkey=our_localdelayed_privkey.get_secret_bytes(), - is_revocation=False, - to_self_delay=to_self_delay) - return sweep_tx - - def create_htlctx_that_spends_from_our_ctx(chan: 'Channel', our_pcp: bytes, ctx: Transaction, htlc: 'UpdateAddHtlc', local_htlc_privkey: bytes, preimage: Optional[bytes],