mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-31 01:11:35 +00:00
fix lnwatcher for channels initiated by remote
This commit is contained in:
parent
d12107e743
commit
0a67872e83
2 changed files with 13 additions and 14 deletions
|
@ -398,24 +398,24 @@ def invert_short_channel_id(short_channel_id: bytes) -> (int, int, int):
|
|||
oi = int.from_bytes(short_channel_id[6:8], byteorder='big')
|
||||
return bh, tpos, oi
|
||||
|
||||
def get_obscured_ctn(ctn: int, local: bytes, remote: bytes) -> int:
|
||||
mask = int.from_bytes(sha256(local + remote)[-6:], 'big')
|
||||
def get_obscured_ctn(ctn: int, funder: bytes, fundee: bytes) -> int:
|
||||
mask = int.from_bytes(sha256(funder + fundee)[-6:], 'big')
|
||||
return ctn ^ mask
|
||||
|
||||
def extract_ctn_from_tx(tx, txin_index: int, local_payment_basepoint: bytes,
|
||||
remote_payment_basepoint: bytes) -> int:
|
||||
def extract_ctn_from_tx(tx, txin_index: int, funder_payment_basepoint: bytes,
|
||||
fundee_payment_basepoint: bytes) -> int:
|
||||
tx.deserialize()
|
||||
locktime = tx.locktime
|
||||
sequence = tx.inputs()[txin_index]['sequence']
|
||||
obs = ((sequence & 0xffffff) << 24) + (locktime & 0xffffff)
|
||||
return get_obscured_ctn(obs, local_payment_basepoint, remote_payment_basepoint)
|
||||
return get_obscured_ctn(obs, funder_payment_basepoint, fundee_payment_basepoint)
|
||||
|
||||
def extract_ctn_from_tx_and_chan(tx, chan) -> int:
|
||||
local_pubkey = chan.local_config.payment_basepoint.pubkey
|
||||
remote_pubkey = chan.remote_config.payment_basepoint.pubkey
|
||||
funder_conf = chan.local_config if chan.constraints.is_initiator else chan.remote_config
|
||||
fundee_conf = chan.local_config if not chan.constraints.is_initiator else chan.remote_config
|
||||
return extract_ctn_from_tx(tx, txin_index=0,
|
||||
local_payment_basepoint=local_pubkey,
|
||||
remote_payment_basepoint=remote_pubkey)
|
||||
funder_payment_basepoint=funder_conf.payment_basepoint.pubkey,
|
||||
fundee_payment_basepoint=fundee_conf.payment_basepoint.pubkey)
|
||||
|
||||
def overall_weight(num_htlc):
|
||||
return 500 + 172 * num_htlc + 224
|
||||
|
|
|
@ -265,10 +265,9 @@ class LNWatcher(PrintError):
|
|||
ctn = extract_ctn_from_tx_and_chan(ctx, chan)
|
||||
latest_ctn_on_channel = chan.local_state.ctn if ours else chan.remote_state.ctn
|
||||
last_ctn_watcher_saw = self._get_last_ctn_for_processed_ctx(funding_address, ours)
|
||||
# TODO make it work when we are not initiator
|
||||
if chan.constraints.is_initiator and latest_ctn_on_channel + 1 != ctn:
|
||||
if latest_ctn_on_channel + 1 != ctn:
|
||||
raise Exception('unexpected ctn {}. latest is {}. our ctx: {}'.format(ctn, latest_ctn_on_channel, ours))
|
||||
if chan.constraints.is_initiator and last_ctn_watcher_saw + 1 != ctn:
|
||||
if last_ctn_watcher_saw + 1 != ctn:
|
||||
raise Exception('watcher skipping ctns!! ctn {}. last seen {}. our ctx: {}'.format(ctn, last_ctn_watcher_saw, ours))
|
||||
#self.print_error("process_new_offchain_ctx. funding {}, ours {}, ctn {}, ctx {}"
|
||||
# .format(chan.funding_outpoint.to_str(), ours, ctn, ctx.txid()))
|
||||
|
@ -291,9 +290,9 @@ class LNWatcher(PrintError):
|
|||
ctn = extract_ctn_from_tx_and_chan(ctx, chan)
|
||||
latest_ctn_on_channel = chan.remote_state.ctn
|
||||
last_ctn_watcher_saw = self._get_last_ctn_for_revoked_secret(funding_address)
|
||||
if chan.constraints.is_initiator and latest_ctn_on_channel != ctn:
|
||||
if latest_ctn_on_channel != ctn:
|
||||
raise Exception('unexpected ctn {}. latest is {}'.format(ctn, latest_ctn_on_channel))
|
||||
if chan.constraints.is_initiator and last_ctn_watcher_saw + 1 != ctn:
|
||||
if last_ctn_watcher_saw + 1 != ctn:
|
||||
raise Exception('watcher skipping ctns!! ctn {}. last seen {}'.format(ctn, last_ctn_watcher_saw))
|
||||
sweep_address = self._get_sweep_address_for_chan(chan)
|
||||
encumbered_sweeptx = maybe_create_sweeptx_for_their_ctx_to_local(chan, ctx, per_commitment_secret, sweep_address)
|
||||
|
|
Loading…
Add table
Reference in a new issue