tchanneldb: also store "message_flags" field for channel updates - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit f0588846d51c5b206ccc00121c4fbb0030708cce (DIR) parent d229bb4e4d582515a802f110e8818a23da8cbb99 (HTM) Author: SomberNight <somber.night@protonmail.com> Date: Fri, 16 Aug 2019 22:31:11 +0200 channeldb: also store "message_flags" field for channel updates tthis is a breaking change for the db format. As in comment in diff, "It would make more sense to store the raw gossip messages in the db." Diffstat: M electrum/channel_db.py | 16 ++++++++++++---- M electrum/lnpeer.py | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) --- (DIR) diff --git a/electrum/channel_db.py b/electrum/channel_db.py t@@ -92,10 +92,11 @@ class Policy(NamedTuple): key: bytes cltv_expiry_delta: int htlc_minimum_msat: int - htlc_maximum_msat: int + htlc_maximum_msat: Optional[int] fee_base_msat: int fee_proportional_millionths: int channel_flags: int + message_flags: int timestamp: int @staticmethod t@@ -107,6 +108,7 @@ class Policy(NamedTuple): htlc_maximum_msat = int.from_bytes(payload['htlc_maximum_msat'], "big") if 'htlc_maximum_msat' in payload else None, fee_base_msat = int.from_bytes(payload['fee_base_msat'], "big"), fee_proportional_millionths = int.from_bytes(payload['fee_proportional_millionths'], "big"), + message_flags = int.from_bytes(payload['message_flags'], "big"), channel_flags = int.from_bytes(payload['channel_flags'], "big"), timestamp = int.from_bytes(payload['timestamp'], "big") ) t@@ -186,7 +188,7 @@ class Address(NamedTuple): node_id: bytes host: str port: int - last_connected_date: int + last_connected_date: Optional[int] class CategorizedChannelUpdates(NamedTuple): t@@ -197,6 +199,9 @@ class CategorizedChannelUpdates(NamedTuple): to_delete: List # database entries to delete +# TODO It would make more sense to store the raw gossip messages in the db. +# That is pretty much a pre-requisite of actively participating in gossip. + create_channel_info = """ CREATE TABLE IF NOT EXISTS channel_info ( short_channel_id VARCHAR(64), t@@ -215,6 +220,7 @@ htlc_maximum_msat INTEGER, fee_base_msat INTEGER NOT NULL, fee_proportional_millionths INTEGER NOT NULL, channel_flags INTEGER NOT NULL, +message_flags INTEGER NOT NULL, timestamp INTEGER NOT NULL, PRIMARY KEY(key) )""" t@@ -314,7 +320,7 @@ class ChannelDB(SqlDB): self.update_counts() self.logger.debug('add_channel_announcement: %d/%d'%(added, len(msg_payloads))) - def print_change(self, old_policy, new_policy): + def print_change(self, old_policy: Policy, new_policy: Policy): # print what changed between policies if old_policy.cltv_expiry_delta != new_policy.cltv_expiry_delta: self.logger.info(f'cltv_expiry_delta: {old_policy.cltv_expiry_delta} -> {new_policy.cltv_expiry_delta}') t@@ -328,6 +334,8 @@ class ChannelDB(SqlDB): self.logger.info(f'fee_proportional_millionths: {old_policy.fee_proportional_millionths} -> {new_policy.fee_proportional_millionths}') if old_policy.channel_flags != new_policy.channel_flags: self.logger.info(f'channel_flags: {old_policy.channel_flags} -> {new_policy.channel_flags}') + if old_policy.message_flags != new_policy.message_flags: + self.logger.info(f'message_flags: {old_policy.message_flags} -> {new_policy.message_flags}') def add_channel_updates(self, payloads, max_age=None, verify=True) -> CategorizedChannelUpdates: orphaned = [] t@@ -394,7 +402,7 @@ class ChannelDB(SqlDB): @sql def save_policy(self, policy): c = self.conn.cursor() - c.execute("""REPLACE INTO policy (key, cltv_expiry_delta, htlc_minimum_msat, htlc_maximum_msat, fee_base_msat, fee_proportional_millionths, channel_flags, timestamp) VALUES (?,?,?,?,?,?, ?, ?)""", list(policy)) + c.execute("""REPLACE INTO policy (key, cltv_expiry_delta, htlc_minimum_msat, htlc_maximum_msat, fee_base_msat, fee_proportional_millionths, channel_flags, message_flags, timestamp) VALUES (?,?,?,?,?,?,?,?,?)""", list(policy)) @sql def delete_policy(self, node_id, short_channel_id): (DIR) diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py t@@ -982,6 +982,7 @@ class Peer(Logger): { "short_channel_id": chan.short_channel_id, 'channel_flags': channel_flags, + 'message_flags': b'\x00', 'cltv_expiry_delta': b'\x90', 'htlc_minimum_msat': b'\x03\xe8', 'fee_base_msat': b'\x03\xe8',