tlnbase: use sign_next_commitment for initial remote_ctx - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 9010ea7e6ee227f5918c321b1eecfb3ecbd5d052 DIR parent 434ce49451e958fa4fb103d39001237aa4c50d51 HTML Author: Janus <ysangkok@gmail.com> Date: Wed, 13 Jun 2018 16:27:44 +0200 lnbase: use sign_next_commitment for initial remote_ctx Diffstat: M lib/lnbase.py | 40 +++++++++++-------------------- 1 file changed, 14 insertions(+), 26 deletions(-) --- DIR diff --git a/lib/lnbase.py b/lib/lnbase.py t@@ -866,36 +866,11 @@ class Peer(PrintError): funding_tx = wallet.mktx([funding_output], password, config, 1000) funding_txid = funding_tx.txid() funding_index = funding_tx.outputs().index(funding_output) - # derive keys - local_payment_pubkey = derive_pubkey(local_config.payment_basepoint.pubkey, remote_per_commitment_point) - #local_payment_privkey = derive_privkey(base_secret, remote_per_commitment_point) - remote_payment_pubkey = derive_pubkey(remote_config.payment_basepoint.pubkey, per_commitment_point_first) - revocation_pubkey = derive_blinded_pubkey(local_config.revocation_basepoint.pubkey, remote_per_commitment_point) - remote_revocation_pubkey = derive_blinded_pubkey(remote_config.revocation_basepoint.pubkey, per_commitment_point_first) - local_delayedpubkey = derive_pubkey(local_config.delayed_basepoint.pubkey, per_commitment_point_first) - remote_delayedpubkey = derive_pubkey(remote_config.delayed_basepoint.pubkey, remote_per_commitment_point) # compute amounts - htlcs = [] local_amount = funding_sat*1000 - push_msat remote_amount = push_msat # remote commitment transaction - remote_ctx = make_commitment( - 0, - remote_config.multisig_key.pubkey, local_config.multisig_key.pubkey, local_payment_pubkey, - local_config.payment_basepoint.pubkey, remote_config.payment_basepoint.pubkey, - revocation_pubkey, remote_delayedpubkey, local_config.to_self_delay, - funding_txid, funding_index, funding_sat, - remote_amount, local_amount, remote_config.dust_limit_sat, local_feerate, False, we_are_initiator=True, htlcs=[]) - sig_64 = sign_and_get_sig_string(remote_ctx, local_config, remote_config) channel_id, funding_txid_bytes = channel_id_from_funding_tx(funding_txid, funding_index) - self.send_message(gen_msg("funding_created", - temporary_channel_id=temp_channel_id, - funding_txid=funding_txid_bytes, - funding_output_index=funding_index, - signature=sig_64)) - payload = await self.funding_signed[channel_id].get() - self.print_error('received funding_signed') - remote_sig = payload['signature'] their_revocation_store = RevocationStore() chan = OpenChannel( node_id=self.pubkey, t@@ -921,7 +896,20 @@ class Peer(PrintError): ), constraints=ChannelConstraints(capacity=funding_sat, feerate=local_feerate, is_initiator=True, funding_txn_minimum_depth=funding_txn_minimum_depth) ) - m = HTLCStateMachine(chan._replace(local_state=chan.local_state._replace(ctn=-1))) + m = HTLCStateMachine(chan._replace( + local_state=chan.local_state._replace(ctn=-1), + remote_state=chan.remote_state._replace( + next_per_commitment_point=remote_per_commitment_point, + last_per_commitment_point=None, ctn=-1))) + sig_64, _ = m.sign_next_commitment() + self.send_message(gen_msg("funding_created", + temporary_channel_id=temp_channel_id, + funding_txid=funding_txid_bytes, + funding_output_index=funding_index, + signature=sig_64)) + payload = await self.funding_signed[channel_id].get() + self.print_error('received funding_signed') + remote_sig = payload['signature'] m.receive_new_commitment(remote_sig, []) # broadcast funding tx success, _txid = self.network.broadcast_transaction(funding_tx)