1
0

ln chan verifier: fix code rot

This commit is contained in:
SomberNight
2019-12-10 01:14:38 +01:00
parent 0ab88b821c
commit 24ebc77d76
3 changed files with 36 additions and 25 deletions

View File

@@ -55,7 +55,7 @@ class LNChannelVerifier(NetworkJobOnDefaultServer):
def __init__(self, network: 'Network', channel_db: 'ChannelDB'):
self.channel_db = channel_db
self.lock = threading.Lock()
self.unverified_channel_info = {} # type: Dict[ShortChannelID, dict] # scid -> msg_payload
self.unverified_channel_info = {} # type: Dict[ShortChannelID, dict] # scid -> msg_dict
# channel announcements that seem to be invalid:
self.blacklist = set() # type: Set[ShortChannelID]
NetworkJobOnDefaultServer.__init__(self, network)
@@ -65,13 +65,14 @@ class LNChannelVerifier(NetworkJobOnDefaultServer):
self.started_verifying_channel = set() # type: Set[ShortChannelID]
# TODO make async; and rm self.lock completely
def add_new_channel_info(self, short_channel_id: ShortChannelID, msg_payload):
def add_new_channel_info(self, short_channel_id: ShortChannelID, msg: dict) -> bool:
if short_channel_id in self.unverified_channel_info:
return
return False
if short_channel_id in self.blacklist:
return
return False
with self.lock:
self.unverified_channel_info[short_channel_id] = msg_payload
self.unverified_channel_info[short_channel_id] = msg
return True
async def _start_tasks(self):
async with self.group as group:
@@ -146,10 +147,8 @@ class LNChannelVerifier(NetworkJobOnDefaultServer):
self.logger.info(f"received tx does not match expected txid ({tx_hash} != {tx.txid()})")
return
# check funding output
msg_payload = self.unverified_channel_info[short_channel_id]
msg_type, chan_ann = decode_msg(msg_payload)
assert msg_type == 'channel_announcement'
redeem_script = funding_output_script_from_keys(chan_ann['bitcoin_key_1'], chan_ann['bitcoin_key_2'])
chan_ann_msg = self.unverified_channel_info[short_channel_id]
redeem_script = funding_output_script_from_keys(chan_ann_msg['bitcoin_key_1'], chan_ann_msg['bitcoin_key_2'])
expected_address = bitcoin.redeem_script_to_address('p2wsh', redeem_script)
try:
actual_output = tx.outputs()[short_channel_id.output_index]
@@ -162,14 +161,13 @@ class LNChannelVerifier(NetworkJobOnDefaultServer):
self._remove_channel_from_unverified_db(short_channel_id)
return
# put channel into channel DB
self.channel_db.add_verified_channel_info(short_channel_id, actual_output.value)
self.channel_db.add_verified_channel_info(chan_ann_msg, capacity_sat=actual_output.value)
self._remove_channel_from_unverified_db(short_channel_id)
def _remove_channel_from_unverified_db(self, short_channel_id: ShortChannelID):
with self.lock:
self.unverified_channel_info.pop(short_channel_id, None)
try: self.started_verifying_channel.remove(short_channel_id)
except KeyError: pass
self.started_verifying_channel.discard(short_channel_id)
def _blacklist_short_channel_id(self, short_channel_id: ShortChannelID) -> None:
self.blacklist.add(short_channel_id)