|
|
@ -68,7 +68,7 @@ class SwapData(StoredObject): |
|
|
|
lightning_amount = attr.ib(type=int) |
|
|
|
redeem_script = attr.ib(type=bytes, converter=hex_to_bytes) |
|
|
|
preimage = attr.ib(type=bytes, converter=hex_to_bytes) |
|
|
|
fee_preimage = attr.ib(type=bytes, converter=hex_to_bytes) |
|
|
|
prepay_hash = attr.ib(type=bytes, converter=hex_to_bytes) |
|
|
|
privkey = attr.ib(type=bytes, converter=hex_to_bytes) |
|
|
|
lockup_address = attr.ib(type=str) |
|
|
|
funding_txid = attr.ib(type=str) |
|
|
@ -109,8 +109,10 @@ class SwapManager(Logger): |
|
|
|
self.lnworker = wallet.lnworker |
|
|
|
self.lnwatcher = self.wallet.lnworker.lnwatcher |
|
|
|
self.swaps = self.wallet.db.get_dict('submarine_swaps') |
|
|
|
self.prepayments = {} |
|
|
|
for swap in self.swaps.values(): |
|
|
|
self.prepayments = {} # fee_preimage -> preimage |
|
|
|
for k, swap in self.swaps.items(): |
|
|
|
if swap.is_reverse and swap.prepay_hash is not None: |
|
|
|
self.prepayments[swap.prepay_hash] = bytes.fromhex(k) |
|
|
|
if swap.is_redeemed: |
|
|
|
continue |
|
|
|
self.add_lnwatcher_callback(swap) |
|
|
@ -154,12 +156,10 @@ class SwapManager(Logger): |
|
|
|
return self.lnwatcher.config.estimate_fee(136, allow_fallback_to_static_rates=True) |
|
|
|
|
|
|
|
def get_swap(self, payment_hash): |
|
|
|
return self.swaps.get(payment_hash.hex()) |
|
|
|
|
|
|
|
def get_swap_by_prepay(self, prepay_payment_hash): |
|
|
|
payment_hash = self.prepayments.get(prepay_payment_hash) |
|
|
|
if payment_hash: |
|
|
|
return self.swaps.get(payment_hash.hex()) |
|
|
|
# for history |
|
|
|
swap = self.swaps.get(payment_hash.hex()) |
|
|
|
if swap: |
|
|
|
return swap |
|
|
|
|
|
|
|
def add_lnwatcher_callback(self, swap): |
|
|
|
callback = lambda: self._claim_swap(swap) |
|
|
@ -222,6 +222,7 @@ class SwapManager(Logger): |
|
|
|
locktime = locktime, |
|
|
|
privkey = privkey, |
|
|
|
preimage = preimage, |
|
|
|
prepay_hash = None, |
|
|
|
lockup_address = lockup_address, |
|
|
|
onchain_amount = onchain_amount, |
|
|
|
lightning_amount = lightning_amount, |
|
|
@ -282,9 +283,9 @@ class SwapManager(Logger): |
|
|
|
if fee_invoice: |
|
|
|
fee_lnaddr = self.lnworker._check_invoice(fee_invoice) |
|
|
|
invoice_amount += fee_lnaddr.get_amount_sat() |
|
|
|
fee_preimage = fee_lnaddr.paymenthash |
|
|
|
prepay_hash = fee_lnaddr.paymenthash |
|
|
|
else: |
|
|
|
fee_preimage = None |
|
|
|
prepay_hash = None |
|
|
|
assert int(invoice_amount) == amount_sat, (invoice_amount, amount_sat) |
|
|
|
# save swap data to wallet file |
|
|
|
swap = SwapData( |
|
|
@ -292,7 +293,7 @@ class SwapManager(Logger): |
|
|
|
locktime = locktime, |
|
|
|
privkey = privkey, |
|
|
|
preimage = preimage, |
|
|
|
fee_preimage = fee_preimage, |
|
|
|
prepay_hash = prepay_hash, |
|
|
|
lockup_address = lockup_address, |
|
|
|
onchain_amount = onchain_amount, |
|
|
|
lightning_amount = amount_sat, |
|
|
|