URI: 
       twallet_db: encapsulate type conversions with attr.s converter - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 444610452e4c3344f262680e779b208647d134d5
   DIR parent df15042cee9fc7ca68ad6d0034567aa8024907c3
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 17 Mar 2020 11:04:49 +0100
       
       wallet_db: encapsulate type conversions with attr.s converter
       
       Diffstat:
         M electrum/lnutil.py                  |      29 +++++++++++++++++------------
         M electrum/wallet_db.py               |      12 ------------
       
       2 files changed, 17 insertions(+), 24 deletions(-)
       ---
   DIR diff --git a/electrum/lnutil.py b/electrum/lnutil.py
       t@@ -41,22 +41,27 @@ def ln_dummy_address():
        
        from .json_db import StoredObject
        
       +
       +hex_to_bytes = lambda v: v if isinstance(v, bytes) else bytes.fromhex(v) if v is not None else None
       +json_to_keypair = lambda v: v if isinstance(v, OnlyPubkeyKeypair) else Keypair(**v) if len(v)==2 else OnlyPubkeyKeypair(**v)
       +
       +
        @attr.s
        class OnlyPubkeyKeypair(StoredObject):
       -    pubkey = attr.ib(type=bytes)
       +    pubkey = attr.ib(type=bytes, converter=hex_to_bytes)
        
        @attr.s
        class Keypair(OnlyPubkeyKeypair):
       -    privkey = attr.ib(type=bytes)
       +    privkey = attr.ib(type=bytes, converter=hex_to_bytes)
        
        @attr.s
        class Config(StoredObject):
            # shared channel config fields
       -    payment_basepoint = attr.ib(type=OnlyPubkeyKeypair)
       -    multisig_key = attr.ib(type=OnlyPubkeyKeypair)
       -    htlc_basepoint = attr.ib(type=OnlyPubkeyKeypair)
       -    delayed_basepoint = attr.ib(type=OnlyPubkeyKeypair)
       -    revocation_basepoint = attr.ib(type=OnlyPubkeyKeypair)
       +    payment_basepoint = attr.ib(type=OnlyPubkeyKeypair, converter=json_to_keypair)
       +    multisig_key = attr.ib(type=OnlyPubkeyKeypair, converter=json_to_keypair)
       +    htlc_basepoint = attr.ib(type=OnlyPubkeyKeypair, converter=json_to_keypair)
       +    delayed_basepoint = attr.ib(type=OnlyPubkeyKeypair, converter=json_to_keypair)
       +    revocation_basepoint = attr.ib(type=OnlyPubkeyKeypair, converter=json_to_keypair)
            to_self_delay = attr.ib(type=int)
            dust_limit_sat = attr.ib(type=int)
            max_htlc_value_in_flight_msat = attr.ib(type=int)
       t@@ -66,17 +71,17 @@ class Config(StoredObject):
        
        @attr.s
        class LocalConfig(Config):
       -    per_commitment_secret_seed = attr.ib(type=bytes)
       +    per_commitment_secret_seed = attr.ib(type=bytes, converter=hex_to_bytes)
            funding_locked_received = attr.ib(type=bool)
            was_announced = attr.ib(type=bool)
       -    current_commitment_signature = attr.ib(type=bytes)
       -    current_htlc_signatures = attr.ib(type=bytes)
       +    current_commitment_signature = attr.ib(type=bytes, converter=hex_to_bytes)
       +    current_htlc_signatures = attr.ib(type=bytes, converter=hex_to_bytes)
        
        @attr.s
        class RemoteConfig(Config):
            htlc_minimum_msat = attr.ib(type=int)
       -    next_per_commitment_point = attr.ib(type=bytes)
       -    current_per_commitment_point = attr.ib(default=None, type=bytes)
       +    next_per_commitment_point = attr.ib(type=bytes, converter=hex_to_bytes)
       +    current_per_commitment_point = attr.ib(default=None, type=bytes, converter=hex_to_bytes)
        
        @attr.s
        class FeeUpdate(StoredObject):
   DIR diff --git a/electrum/wallet_db.py b/electrum/wallet_db.py
       t@@ -1101,18 +1101,6 @@ class WalletDB(JsonDB):
                    v = ChannelConstraints(**v)
                elif key == 'funding_outpoint':
                    v = Outpoint(**v)
       -        elif key.endswith("_basepoint") or key.endswith("_key"):
       -            v = Keypair(**v) if len(v)==2 else OnlyPubkeyKeypair(**v)
       -        elif key in [
       -                "short_channel_id",
       -                "current_per_commitment_point",
       -                "next_per_commitment_point",
       -                "per_commitment_secret_seed",
       -                "current_commitment_signature",
       -                "current_htlc_signatures"]:
       -            v = binascii.unhexlify(v) if v is not None else None
       -        elif len(path) > 2 and path[-2] in ['local_config', 'remote_config'] and key in ["pubkey", "privkey"]:
       -            v = binascii.unhexlify(v) if v is not None else None
                return v
        
            def write(self, storage: 'WalletStorage'):