diff --git a/electrum/lnsweep.py b/electrum/lnsweep.py index d80707004..e4744468b 100644 --- a/electrum/lnsweep.py +++ b/electrum/lnsweep.py @@ -458,7 +458,7 @@ def create_htlctx_that_spends_from_our_ctx( assert (htlc_direction == RECEIVED) == bool(preimage), 'preimage is required iff htlc is received' preimage = preimage or b'' ctn = extract_ctn_from_tx_and_chan(ctx, chan) - witness_script, htlc_tx = make_htlc_tx_with_open_channel( + witness_script_out, htlc_tx = make_htlc_tx_with_open_channel( chan=chan, pcp=our_pcp, subject=LOCAL, @@ -471,9 +471,10 @@ def create_htlctx_that_spends_from_our_ctx( remote_htlc_sig = chan.get_remote_htlc_sig_for_htlc(htlc_relative_idx=htlc_relative_idx) local_htlc_sig = htlc_tx.sign_txin(0, local_htlc_privkey) txin = htlc_tx.inputs()[0] - witness_program = Transaction.get_preimage_script(txin) - txin.witness = make_htlc_tx_witness(remote_htlc_sig, local_htlc_sig, preimage, witness_program) - return witness_script, htlc_tx + witness_script_in = txin.witness_script + assert witness_script_in + txin.witness = make_htlc_tx_witness(remote_htlc_sig, local_htlc_sig, preimage, witness_script_in) + return witness_script_out, htlc_tx def create_sweeptx_their_ctx_htlc( diff --git a/electrum/lnutil.py b/electrum/lnutil.py index fa9d5bc05..6209363cd 100644 --- a/electrum/lnutil.py +++ b/electrum/lnutil.py @@ -620,14 +620,14 @@ def make_htlc_tx_witness(remotehtlcsig: bytes, localhtlcsig: bytes, return construct_witness([0, remotehtlcsig, localhtlcsig, payment_preimage, witness_script]) def make_htlc_tx_inputs(htlc_output_txid: str, htlc_output_index: int, - amount_msat: int, witness_script: str) -> List[PartialTxInput]: + amount_msat: int, witness_script: bytes) -> List[PartialTxInput]: assert type(htlc_output_txid) is str assert type(htlc_output_index) is int assert type(amount_msat) is int - assert type(witness_script) is str + assert type(witness_script) is bytes txin = PartialTxInput(prevout=TxOutpoint(txid=bfh(htlc_output_txid), out_idx=htlc_output_index), nsequence=0) - txin.witness_script = bfh(witness_script) + txin.witness_script = witness_script txin.script_sig = b'' txin._trusted_value_sats = amount_msat // 1000 c_inputs = [txin] @@ -826,13 +826,15 @@ def possible_output_idxs_of_htlc_in_ctx(*, chan: 'Channel', pcp: bytes, subject: other_revocation_pubkey = derive_blinded_pubkey(other_conf.revocation_basepoint.pubkey, pcp) other_htlc_pubkey = derive_pubkey(other_conf.htlc_basepoint.pubkey, pcp) htlc_pubkey = derive_pubkey(conf.htlc_basepoint.pubkey, pcp) - preimage_script = make_htlc_output_witness_script(is_received_htlc=htlc_direction == RECEIVED, - remote_revocation_pubkey=other_revocation_pubkey, - remote_htlc_pubkey=other_htlc_pubkey, - local_htlc_pubkey=htlc_pubkey, - payment_hash=payment_hash, - cltv_abs=cltv_abs) - htlc_address = redeem_script_to_address('p2wsh', preimage_script) + witness_script = make_htlc_output_witness_script( + is_received_htlc=htlc_direction == RECEIVED, + remote_revocation_pubkey=other_revocation_pubkey, + remote_htlc_pubkey=other_htlc_pubkey, + local_htlc_pubkey=htlc_pubkey, + payment_hash=payment_hash, + cltv_abs=cltv_abs, + ) + htlc_address = redeem_script_to_address('p2wsh', witness_script) candidates = ctx.get_output_idxs_from_address(htlc_address) return {output_idx for output_idx in candidates if ctx.outputs()[output_idx].value == htlc.amount_msat // 1000} @@ -889,16 +891,18 @@ def make_htlc_tx_with_open_channel(*, chan: 'Channel', pcp: bytes, subject: 'HTL local_delayedpubkey=delayedpubkey, success = is_htlc_success, to_self_delay = other_conf.to_self_delay) - preimage_script = make_htlc_output_witness_script(is_received_htlc=is_htlc_success, - remote_revocation_pubkey=other_revocation_pubkey, - remote_htlc_pubkey=other_htlc_pubkey, - local_htlc_pubkey=htlc_pubkey, - payment_hash=payment_hash, - cltv_abs=cltv_abs) + witness_script_in = make_htlc_output_witness_script( + is_received_htlc=is_htlc_success, + remote_revocation_pubkey=other_revocation_pubkey, + remote_htlc_pubkey=other_htlc_pubkey, + local_htlc_pubkey=htlc_pubkey, + payment_hash=payment_hash, + cltv_abs=cltv_abs, + ) htlc_tx_inputs = make_htlc_tx_inputs( commit.txid(), ctx_output_idx, amount_msat=amount_msat, - witness_script=preimage_script.hex()) + witness_script=witness_script_in) if is_htlc_success: cltv_abs = 0 htlc_tx = make_htlc_tx(cltv_abs=cltv_abs, inputs=htlc_tx_inputs, output=htlc_tx_output) diff --git a/tests/test_lnutil.py b/tests/test_lnutil.py index 3689253d7..1d05cbc5d 100644 --- a/tests/test_lnutil.py +++ b/tests/test_lnutil.py @@ -584,7 +584,7 @@ class TestLNUtil(ElectrumTestCase): htlc_output_txid=our_commit_tx.txid(), htlc_output_index=htlc_output_index, amount_msat=amount_msat, - witness_script=htlc.hex()) + witness_script=htlc) our_htlc_tx = make_htlc_tx( cltv_abs=cltv_abs, inputs=our_htlc_tx_inputs,