URI: 
       tGenerate channel keys from random seed - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 55e0e1a72e7b57ef8a91722a060b6d09056e0879
   DIR parent c2432aa1251a4f2775d90ff67c1896997b564e1a
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri, 21 Feb 2020 12:18:28 +0100
       
       Generate channel keys from random seed
       
       Diffstat:
         M electrum/lnpeer.py                  |       7 +++++--
         M electrum/lnutil.py                  |      10 +++++++---
         M electrum/lnworker.py                |       3 +--
       
       3 files changed, 13 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py
       t@@ -20,6 +20,7 @@ import aiorpcx
        
        from .crypto import sha256, sha256d
        from . import bitcoin
       +from .bip32 import BIP32Node
        from . import ecc
        from .ecc import sig_string_from_r_and_s, get_r_and_s_from_sig_string, der_sig_from_sig_string
        from . import constants
       t@@ -455,8 +456,10 @@ class Peer(Logger):
        
            def make_local_config(self, funding_sat: int, push_msat: int, initiator: HTLCOwner) -> LocalConfig:
                # key derivation
       -        channel_counter = self.lnworker.get_and_inc_counter_for_channel_keys()
       -        keypair_generator = lambda family: generate_keypair(self.lnworker.ln_keystore, family, channel_counter)
       +        seed = os.urandom(32)
       +        node = BIP32Node.from_rootseed(seed, xtype='standard')
       +        keypair_generator = lambda family: generate_keypair(node, family)
       +
                if initiator == LOCAL:
                    initial_msat = funding_sat * 1000 - push_msat
                else:
   DIR diff --git a/electrum/lnutil.py b/electrum/lnutil.py
       t@@ -22,7 +22,7 @@ from .bitcoin import push_script, redeem_script_to_address, address_to_script
        from . import segwit_addr
        from .i18n import _
        from .lnaddr import lndecode
       -from .keystore import BIP32_KeyStore
       +from .bip32 import BIP32Node
        
        if TYPE_CHECKING:
            from .lnchannel import Channel
       t@@ -791,8 +791,12 @@ class LnKeyFamily(IntEnum):
            NODE_KEY = 6
        
        
       -def generate_keypair(ln_keystore: BIP32_KeyStore, key_family: LnKeyFamily, index: int) -> Keypair:
       -    return Keypair(*ln_keystore.get_keypair([key_family, 0, index], None))
       +def generate_keypair(node: BIP32Node, key_family: LnKeyFamily) -> Keypair:
       +    node2 = node.subkey_at_private_derivation([key_family])
       +    k = node2.eckey.get_secret_bytes()
       +    cK = ecc.ECPrivkey(k).get_public_key_bytes()
       +    return Keypair(cK, k)
       +
        
        
        NUM_MAX_HOPS_IN_PAYMENT_PATH = 20
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -124,7 +124,7 @@ class LNWorker(Logger):
        
            def __init__(self, xprv):
                Logger.__init__(self)
       -        self.node_keypair = generate_keypair(keystore.from_xprv(xprv), LnKeyFamily.NODE_KEY, 0)
       +        self.node_keypair = generate_keypair(BIP32Node.from_xkey(xprv), LnKeyFamily.NODE_KEY)
                self.peers = {}  # type: Dict[bytes, Peer]  # pubkey -> Peer
                # set some feature flags as baseline for both LNWallet and LNGossip
                # note that e.g. DATA_LOSS_PROTECT is needed for LNGossip as many peers require it
       t@@ -358,7 +358,6 @@ class LNWallet(LNWorker):
                self.db = wallet.db
                self.config = wallet.config
                LNWorker.__init__(self, xprv)
       -        self.ln_keystore = keystore.from_xprv(xprv)
                self.localfeatures |= LnLocalFeatures.OPTION_DATA_LOSS_PROTECT_REQ
                self.payments = self.db.get_dict('lightning_payments')     # RHASH -> amount, direction, is_paid
                self.preimages = self.db.get_dict('lightning_preimages')   # RHASH -> preimage