diff --git a/lnbits/extensions/boltz/README.md b/lnbits/extensions/boltz/README.md
deleted file mode 100644
index 9ca38d491..000000000
--- a/lnbits/extensions/boltz/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Swap on [Boltz](https://boltz.exchange)
-providing **trustless** and **account-free** swap services since **2018.**
-move **IN** and **OUT** of the **lightning network** and remain in control of your bitcoin, at all times.
-* [Lightning Node](https://amboss.space/node/026165850492521f4ac8abd9bd8088123446d126f648ca35e60f88177dc149ceb2)
-* [Documentation](https://docs.boltz.exchange/en/latest/)
-* [Discord](https://discord.gg/d6EK85KK)
-* [Twitter](https://twitter.com/Boltzhq)
-* [FAQ](https://www.notion.so/Frequently-Asked-Questions-585328ae43944e2eba351050790d5eec) very cool!
-
-# usage
-This extension lets you create swaps, reverse swaps and in the case of failure refund your onchain funds.
-
-## create normal swap (Onchain -> Lightning)
-1. click on "Swap (IN)" button to open following dialog, select a wallet, choose a proper amount in the min-max range and choose a onchain address to do your refund to if the swap fails after you already commited onchain funds.
----
-
----
-2. after you confirm your inputs, following dialog with the QR code for the onchain transaction, onchain- address and amount, will pop up.
----
-
----
-3. after you pay this onchain address with the correct amount, boltz will see it and will pay your invoice and the sats will appear on your wallet.
-
-if anything goes wrong when boltz is trying to pay your invoice, the swap will fail and you will need to refund your onchain funds after the timeout block height hit. (if boltz can pay the invoice, it wont be able to redeem your onchain funds either).
-
-## create reverse swap (Lightning -> Onchain)
-1. click on "Swap (OUT)" button to open following dialog, select a wallet, choose a proper amount in the min-max range and choose a onchain address to receive your funds to. Instant settlement: means that LNbits will create the onchain claim transaction if it sees the boltz lockup transaction in the mempool, but it is not confirmed yet. it is advised to leave this checked because it is faster and the longer is takes to settle, the higher the chances are that the lightning invoice expires and the swap fails.
----
-
----
-if this swap fails, boltz is doing the onchain refunding, because they have to commit onchain funds.
-
-# refund locked onchain funds from a normal swap (Onchain -> Lightning)
-if for some reason the normal swap fails and you already paid onchain, you can easily refund your btc.
-this can happen if boltz is not able to pay your lightning invoice after you locked up your funds.
-in case that happens, there is a info icon in the Swap (In) List which opens following dialog.
----
-
-----
-if the timeout block height is exceeded you can either press refund and lnbits will do the refunding to the address you specified when creating the swap. Or download the refundfile so you can manually refund your onchain directly on the boltz.exchange website.
-if you think there is something wrong and/or you are unsure, you can ask for help either in LNbits telegram or in Boltz [Discord](https://discord.gg/d6EK85KK).
-In a recent update we made *automated check*, every 15 minutes, to check if LNbits can refund your failed swap.
diff --git a/lnbits/extensions/boltz/__init__.py b/lnbits/extensions/boltz/__init__.py
deleted file mode 100644
index 98255e5e5..000000000
--- a/lnbits/extensions/boltz/__init__.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import asyncio
-
-from fastapi import APIRouter
-from fastapi.staticfiles import StaticFiles
-
-from lnbits.db import Database
-from lnbits.helpers import template_renderer
-from lnbits.tasks import catch_everything_and_restart
-
-db = Database("ext_boltz")
-
-boltz_ext: APIRouter = APIRouter(prefix="/boltz", tags=["boltz"])
-
-
-def boltz_renderer():
- return template_renderer(["lnbits/extensions/boltz/templates"])
-
-
-boltz_static_files = [
- {
- "path": "/boltz/static",
- "app": StaticFiles(directory="lnbits/extensions/boltz/static"),
- "name": "boltz_static",
- }
-]
-
-from .tasks import check_for_pending_swaps, wait_for_paid_invoices
-from .views import * # noqa: F401,F403
-from .views_api import * # noqa: F401,F403
-
-
-def boltz_start():
- loop = asyncio.get_event_loop()
- loop.create_task(check_for_pending_swaps())
- loop.create_task(catch_everything_and_restart(wait_for_paid_invoices))
diff --git a/lnbits/extensions/boltz/config.json b/lnbits/extensions/boltz/config.json
deleted file mode 100644
index db678207e..000000000
--- a/lnbits/extensions/boltz/config.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "Boltz",
- "short_description": "Perform onchain/offchain swaps",
- "tile": "/boltz/static/image/boltz.png",
- "contributors": ["dni"]
-}
diff --git a/lnbits/extensions/boltz/crud.py b/lnbits/extensions/boltz/crud.py
deleted file mode 100644
index 5ad923f6d..000000000
--- a/lnbits/extensions/boltz/crud.py
+++ /dev/null
@@ -1,284 +0,0 @@
-import time
-from typing import List, Optional, Union
-
-from boltz_client.boltz import BoltzReverseSwapResponse, BoltzSwapResponse
-from loguru import logger
-
-from lnbits.helpers import urlsafe_short_hash
-
-from . import db
-from .models import (
- AutoReverseSubmarineSwap,
- CreateAutoReverseSubmarineSwap,
- CreateReverseSubmarineSwap,
- CreateSubmarineSwap,
- ReverseSubmarineSwap,
- SubmarineSwap,
-)
-
-
-async def get_submarine_swaps(wallet_ids: Union[str, List[str]]) -> List[SubmarineSwap]:
- if isinstance(wallet_ids, str):
- wallet_ids = [wallet_ids]
-
- q = ",".join(["?"] * len(wallet_ids))
- rows = await db.fetchall(
- f"SELECT * FROM boltz.submarineswap WHERE wallet IN ({q}) order by time DESC",
- (*wallet_ids,),
- )
-
- return [SubmarineSwap(**row) for row in rows]
-
-
-async def get_all_pending_submarine_swaps() -> List[SubmarineSwap]:
- rows = await db.fetchall(
- "SELECT * FROM boltz.submarineswap WHERE status='pending' order by time DESC",
- )
- return [SubmarineSwap(**row) for row in rows]
-
-
-async def get_submarine_swap(swap_id) -> Optional[SubmarineSwap]:
- row = await db.fetchone(
- "SELECT * FROM boltz.submarineswap WHERE id = ?", (swap_id,)
- )
- return SubmarineSwap(**row) if row else None
-
-
-async def create_submarine_swap(
- data: CreateSubmarineSwap,
- swap: BoltzSwapResponse,
- swap_id: str,
- refund_privkey_wif: str,
- payment_hash: str,
-) -> Optional[SubmarineSwap]:
-
- await db.execute(
- """
- INSERT INTO boltz.submarineswap (
- id,
- wallet,
- payment_hash,
- status,
- boltz_id,
- refund_privkey,
- refund_address,
- expected_amount,
- timeout_block_height,
- address,
- bip21,
- redeem_script,
- amount
- )
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
- """,
- (
- swap_id,
- data.wallet,
- payment_hash,
- "pending",
- swap.id,
- refund_privkey_wif,
- data.refund_address,
- swap.expectedAmount,
- swap.timeoutBlockHeight,
- swap.address,
- swap.bip21,
- swap.redeemScript,
- data.amount,
- ),
- )
- return await get_submarine_swap(swap_id)
-
-
-async def get_reverse_submarine_swaps(
- wallet_ids: Union[str, List[str]]
-) -> List[ReverseSubmarineSwap]:
- if isinstance(wallet_ids, str):
- wallet_ids = [wallet_ids]
-
- q = ",".join(["?"] * len(wallet_ids))
- rows = await db.fetchall(
- f"SELECT * FROM boltz.reverse_submarineswap WHERE wallet IN ({q}) order by time DESC",
- (*wallet_ids,),
- )
-
- return [ReverseSubmarineSwap(**row) for row in rows]
-
-
-async def get_all_pending_reverse_submarine_swaps() -> List[ReverseSubmarineSwap]:
- rows = await db.fetchall(
- "SELECT * FROM boltz.reverse_submarineswap WHERE status='pending' order by time DESC"
- )
-
- return [ReverseSubmarineSwap(**row) for row in rows]
-
-
-async def get_reverse_submarine_swap(swap_id) -> Optional[ReverseSubmarineSwap]:
- row = await db.fetchone(
- "SELECT * FROM boltz.reverse_submarineswap WHERE id = ?", (swap_id,)
- )
- return ReverseSubmarineSwap(**row) if row else None
-
-
-async def create_reverse_submarine_swap(
- data: CreateReverseSubmarineSwap,
- claim_privkey_wif: str,
- preimage_hex: str,
- swap: BoltzReverseSwapResponse,
-) -> ReverseSubmarineSwap:
-
- swap_id = urlsafe_short_hash()
-
- reverse_swap = ReverseSubmarineSwap(
- id=swap_id,
- wallet=data.wallet,
- status="pending",
- boltz_id=swap.id,
- instant_settlement=data.instant_settlement,
- preimage=preimage_hex,
- claim_privkey=claim_privkey_wif,
- lockup_address=swap.lockupAddress,
- invoice=swap.invoice,
- onchain_amount=swap.onchainAmount,
- onchain_address=data.onchain_address,
- timeout_block_height=swap.timeoutBlockHeight,
- redeem_script=swap.redeemScript,
- amount=data.amount,
- time=int(time.time()),
- )
-
- await db.execute(
- """
- INSERT INTO boltz.reverse_submarineswap (
- id,
- wallet,
- status,
- boltz_id,
- instant_settlement,
- preimage,
- claim_privkey,
- lockup_address,
- invoice,
- onchain_amount,
- onchain_address,
- timeout_block_height,
- redeem_script,
- amount
- )
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
- """,
- (
- reverse_swap.id,
- reverse_swap.wallet,
- reverse_swap.status,
- reverse_swap.boltz_id,
- reverse_swap.instant_settlement,
- reverse_swap.preimage,
- reverse_swap.claim_privkey,
- reverse_swap.lockup_address,
- reverse_swap.invoice,
- reverse_swap.onchain_amount,
- reverse_swap.onchain_address,
- reverse_swap.timeout_block_height,
- reverse_swap.redeem_script,
- reverse_swap.amount,
- ),
- )
- return reverse_swap
-
-
-async def get_auto_reverse_submarine_swaps(
- wallet_ids: List[str],
-) -> List[AutoReverseSubmarineSwap]:
- q = ",".join(["?"] * len(wallet_ids))
- rows = await db.fetchall(
- f"SELECT * FROM boltz.auto_reverse_submarineswap WHERE wallet IN ({q}) order by time DESC",
- (*wallet_ids,),
- )
- return [AutoReverseSubmarineSwap(**row) for row in rows]
-
-
-async def get_auto_reverse_submarine_swap(
- swap_id,
-) -> Optional[AutoReverseSubmarineSwap]:
- row = await db.fetchone(
- "SELECT * FROM boltz.auto_reverse_submarineswap WHERE id = ?", (swap_id,)
- )
- return AutoReverseSubmarineSwap(**row) if row else None
-
-
-async def get_auto_reverse_submarine_swap_by_wallet(
- wallet_id,
-) -> Optional[AutoReverseSubmarineSwap]:
- row = await db.fetchone(
- "SELECT * FROM boltz.auto_reverse_submarineswap WHERE wallet = ?", (wallet_id,)
- )
- return AutoReverseSubmarineSwap(**row) if row else None
-
-
-async def create_auto_reverse_submarine_swap(
- swap: CreateAutoReverseSubmarineSwap,
-) -> Optional[AutoReverseSubmarineSwap]:
-
- swap_id = urlsafe_short_hash()
- await db.execute(
- """
- INSERT INTO boltz.auto_reverse_submarineswap (
- id,
- wallet,
- onchain_address,
- instant_settlement,
- balance,
- amount
- )
- VALUES (?, ?, ?, ?, ?, ?)
- """,
- (
- swap_id,
- swap.wallet,
- swap.onchain_address,
- swap.instant_settlement,
- swap.balance,
- swap.amount,
- ),
- )
- return await get_auto_reverse_submarine_swap(swap_id)
-
-
-async def delete_auto_reverse_submarine_swap(swap_id):
- await db.execute(
- "DELETE FROM boltz.auto_reverse_submarineswap WHERE id = ?", (swap_id,)
- )
-
-
-async def update_swap_status(swap_id: str, status: str):
-
- swap = await get_submarine_swap(swap_id)
- if swap:
- await db.execute(
- "UPDATE boltz.submarineswap SET status='"
- + status
- + "' WHERE id='"
- + swap.id
- + "'"
- )
- logger.info(
- f"Boltz - swap status change: {status}. boltz_id: {swap.boltz_id}, wallet: {swap.wallet}"
- )
- return swap
-
- reverse_swap = await get_reverse_submarine_swap(swap_id)
- if reverse_swap:
- await db.execute(
- "UPDATE boltz.reverse_submarineswap SET status='"
- + status
- + "' WHERE id='"
- + reverse_swap.id
- + "'"
- )
- logger.info(
- f"Boltz - reverse swap status change: {status}. boltz_id: {reverse_swap.boltz_id}, wallet: {reverse_swap.wallet}"
- )
- return reverse_swap
-
- return None
diff --git a/lnbits/extensions/boltz/migrations.py b/lnbits/extensions/boltz/migrations.py
deleted file mode 100644
index 66648fccc..000000000
--- a/lnbits/extensions/boltz/migrations.py
+++ /dev/null
@@ -1,64 +0,0 @@
-async def m001_initial(db):
- await db.execute(
- f"""
- CREATE TABLE boltz.submarineswap (
- id TEXT PRIMARY KEY,
- wallet TEXT NOT NULL,
- payment_hash TEXT NOT NULL,
- amount {db.big_int} NOT NULL,
- status TEXT NOT NULL,
- boltz_id TEXT NOT NULL,
- refund_address TEXT NOT NULL,
- refund_privkey TEXT NOT NULL,
- expected_amount {db.big_int} NOT NULL,
- timeout_block_height INT NOT NULL,
- address TEXT NOT NULL,
- bip21 TEXT NOT NULL,
- redeem_script TEXT NOT NULL,
- time TIMESTAMP NOT NULL DEFAULT """
- + db.timestamp_now
- + """
- );
- """
- )
- await db.execute(
- f"""
- CREATE TABLE boltz.reverse_submarineswap (
- id TEXT PRIMARY KEY,
- wallet TEXT NOT NULL,
- onchain_address TEXT NOT NULL,
- amount {db.big_int} NOT NULL,
- instant_settlement BOOLEAN NOT NULL,
- status TEXT NOT NULL,
- boltz_id TEXT NOT NULL,
- timeout_block_height INT NOT NULL,
- redeem_script TEXT NOT NULL,
- preimage TEXT NOT NULL,
- claim_privkey TEXT NOT NULL,
- lockup_address TEXT NOT NULL,
- invoice TEXT NOT NULL,
- onchain_amount {db.big_int} NOT NULL,
- time TIMESTAMP NOT NULL DEFAULT """
- + db.timestamp_now
- + """
- );
- """
- )
-
-
-async def m002_auto_swaps(db):
- await db.execute(
- """
- CREATE TABLE boltz.auto_reverse_submarineswap (
- id TEXT PRIMARY KEY,
- wallet TEXT NOT NULL,
- onchain_address TEXT NOT NULL,
- amount INT NOT NULL,
- balance INT NOT NULL,
- instant_settlement BOOLEAN NOT NULL,
- time TIMESTAMP NOT NULL DEFAULT """
- + db.timestamp_now
- + """
- );
- """
- )
diff --git a/lnbits/extensions/boltz/models.py b/lnbits/extensions/boltz/models.py
deleted file mode 100644
index 9500b678a..000000000
--- a/lnbits/extensions/boltz/models.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from fastapi import Query
-from pydantic import BaseModel
-
-
-class SubmarineSwap(BaseModel):
- id: str
- wallet: str
- amount: int
- payment_hash: str
- time: int
- status: str
- refund_privkey: str
- refund_address: str
- boltz_id: str
- expected_amount: int
- timeout_block_height: int
- address: str
- bip21: str
- redeem_script: str
-
-
-class CreateSubmarineSwap(BaseModel):
- wallet: str = Query(...)
- refund_address: str = Query(...)
- amount: int = Query(...)
-
-
-class ReverseSubmarineSwap(BaseModel):
- id: str
- wallet: str
- amount: int
- onchain_address: str
- instant_settlement: bool
- time: int
- status: str
- boltz_id: str
- preimage: str
- claim_privkey: str
- lockup_address: str
- invoice: str
- onchain_amount: int
- timeout_block_height: int
- redeem_script: str
-
-
-class CreateReverseSubmarineSwap(BaseModel):
- wallet: str = Query(...)
- amount: int = Query(...)
- instant_settlement: bool = Query(...)
- onchain_address: str = Query(...)
-
-
-class AutoReverseSubmarineSwap(BaseModel):
- id: str
- wallet: str
- amount: int
- balance: int
- onchain_address: str
- instant_settlement: bool
- time: int
-
-
-class CreateAutoReverseSubmarineSwap(BaseModel):
- wallet: str = Query(...)
- amount: int = Query(...)
- balance: int = Query(0)
- instant_settlement: bool = Query(...)
- onchain_address: str = Query(...)
diff --git a/lnbits/extensions/boltz/static/image/boltz.png b/lnbits/extensions/boltz/static/image/boltz.png
deleted file mode 100644
index 2dcefc945..000000000
Binary files a/lnbits/extensions/boltz/static/image/boltz.png and /dev/null differ
diff --git a/lnbits/extensions/boltz/tasks.py b/lnbits/extensions/boltz/tasks.py
deleted file mode 100644
index 63b981b1c..000000000
--- a/lnbits/extensions/boltz/tasks.py
+++ /dev/null
@@ -1,180 +0,0 @@
-import asyncio
-
-from boltz_client.boltz import BoltzNotFoundException, BoltzSwapStatusException
-from boltz_client.mempool import MempoolBlockHeightException
-from loguru import logger
-
-from lnbits.core.crud import get_wallet
-from lnbits.core.models import Payment
-from lnbits.core.services import check_transaction_status, fee_reserve
-from lnbits.helpers import get_current_extension_name
-from lnbits.tasks import register_invoice_listener
-
-from .crud import (
- create_reverse_submarine_swap,
- get_all_pending_reverse_submarine_swaps,
- get_all_pending_submarine_swaps,
- get_auto_reverse_submarine_swap_by_wallet,
- get_submarine_swap,
- update_swap_status,
-)
-from .models import CreateReverseSubmarineSwap, ReverseSubmarineSwap, SubmarineSwap
-from .utils import create_boltz_client, execute_reverse_swap
-
-
-async def wait_for_paid_invoices():
- invoice_queue = asyncio.Queue()
- register_invoice_listener(invoice_queue, get_current_extension_name())
-
- while True:
- payment = await invoice_queue.get()
- await on_invoice_paid(payment)
-
-
-async def on_invoice_paid(payment: Payment) -> None:
-
- await check_for_auto_swap(payment)
-
- if payment.extra.get("tag") != "boltz":
- # not a boltz invoice
- return
-
- await payment.set_pending(False)
-
- if payment.extra:
- swap_id = payment.extra.get("swap_id")
- if swap_id:
- swap = await get_submarine_swap(swap_id)
- if swap:
- await update_swap_status(swap_id, "complete")
-
-
-async def check_for_auto_swap(payment: Payment) -> None:
- auto_swap = await get_auto_reverse_submarine_swap_by_wallet(payment.wallet_id)
- if auto_swap:
- wallet = await get_wallet(payment.wallet_id)
- if wallet:
- reserve = fee_reserve(wallet.balance_msat) / 1000
- balance = wallet.balance_msat / 1000
- amount = balance - auto_swap.balance - reserve
- if amount >= auto_swap.amount:
-
- client = create_boltz_client()
- claim_privkey_wif, preimage_hex, swap = client.create_reverse_swap(
- amount=int(amount)
- )
- new_swap = await create_reverse_submarine_swap(
- CreateReverseSubmarineSwap(
- wallet=auto_swap.wallet,
- amount=int(amount),
- instant_settlement=auto_swap.instant_settlement,
- onchain_address=auto_swap.onchain_address,
- ),
- claim_privkey_wif,
- preimage_hex,
- swap,
- )
- await execute_reverse_swap(client, new_swap)
-
- logger.info(
- f"Boltz: auto reverse swap created with amount: {amount}, boltz_id: {new_swap.boltz_id}"
- )
-
-
-"""
-testcases for boltz startup
-A. normal swaps
- 1. test: create -> kill -> start -> startup invoice listeners -> pay onchain funds -> should complete
- 2. test: create -> kill -> pay onchain funds -> mine block -> start -> startup check -> should complete
- 3. test: create -> kill -> mine blocks and hit timeout -> start -> should go timeout/failed
- 4. test: create -> kill -> pay to less onchain funds -> mine blocks hit timeout -> start lnbits -> should be refunded
-
-B. reverse swaps
- 1. test: create instant -> kill -> boltz does lockup -> not confirmed -> start lnbits -> should claim/complete
- 2. test: create -> kill -> boltz does lockup -> not confirmed -> start lnbits -> mine blocks -> should claim/complete
- 3. test: create -> kill -> boltz does lockup -> confirmed -> start lnbits -> should claim/complete
-"""
-
-
-async def check_for_pending_swaps():
- try:
- swaps = await get_all_pending_submarine_swaps()
- reverse_swaps = await get_all_pending_reverse_submarine_swaps()
- if len(swaps) > 0 or len(reverse_swaps) > 0:
- logger.debug("Boltz - startup swap check")
- except:
- logger.error(
- "Boltz - startup swap check, database is not created yet, do nothing"
- )
- return
-
- client = create_boltz_client()
-
- if len(swaps) > 0:
- logger.debug(f"Boltz - {len(swaps)} pending swaps")
- for swap in swaps:
- await check_swap(swap, client)
-
- if len(reverse_swaps) > 0:
- logger.debug(f"Boltz - {len(reverse_swaps)} pending reverse swaps")
- for reverse_swap in reverse_swaps:
- await check_reverse_swap(reverse_swap, client)
-
-
-async def check_swap(swap: SubmarineSwap, client):
- try:
- payment_status = await check_transaction_status(swap.wallet, swap.payment_hash)
- if payment_status.paid:
- logger.debug(f"Boltz - swap: {swap.boltz_id} got paid while offline.")
- await update_swap_status(swap.id, "complete")
- else:
- try:
- _ = client.swap_status(swap.id)
- except:
- txs = client.mempool.get_txs_from_address(swap.address)
- if len(txs) == 0:
- await update_swap_status(swap.id, "timeout")
- else:
- await client.refund_swap(
- privkey_wif=swap.refund_privkey,
- lockup_address=swap.address,
- receive_address=swap.refund_address,
- redeem_script_hex=swap.redeem_script,
- timeout_block_height=swap.timeout_block_height,
- )
- await update_swap_status(swap.id, "refunded")
- except BoltzNotFoundException:
- logger.debug(f"Boltz - swap: {swap.boltz_id} does not exist.")
- await update_swap_status(swap.id, "failed")
- except MempoolBlockHeightException:
- logger.debug(
- f"Boltz - tried to refund swap: {swap.id}, but has not reached the timeout."
- )
- except Exception as exc:
- logger.error(f"Boltz - unhandled exception, swap: {swap.id} - {str(exc)}")
-
-
-async def check_reverse_swap(reverse_swap: ReverseSubmarineSwap, client):
- try:
- _ = client.swap_status(reverse_swap.boltz_id)
- await client.claim_reverse_swap(
- lockup_address=reverse_swap.lockup_address,
- receive_address=reverse_swap.onchain_address,
- privkey_wif=reverse_swap.claim_privkey,
- preimage_hex=reverse_swap.preimage,
- redeem_script_hex=reverse_swap.redeem_script,
- zeroconf=reverse_swap.instant_settlement,
- )
- await update_swap_status(reverse_swap.id, "complete")
-
- except BoltzSwapStatusException as exc:
- logger.debug(f"Boltz - swap_status: {str(exc)}")
- await update_swap_status(reverse_swap.id, "failed")
- # should only happen while development when regtest is reset
- except BoltzNotFoundException:
- logger.debug(f"Boltz - reverse swap: {reverse_swap.boltz_id} does not exist.")
- await update_swap_status(reverse_swap.id, "failed")
- except Exception as exc:
- logger.error(
- f"Boltz - unhandled exception, reverse swap: {reverse_swap.id} - {str(exc)}"
- )
diff --git a/lnbits/extensions/boltz/templates/boltz/_api_docs.html b/lnbits/extensions/boltz/templates/boltz/_api_docs.html
deleted file mode 100644
index f1be62a7d..000000000
--- a/lnbits/extensions/boltz/templates/boltz/_api_docs.html
+++ /dev/null
@@ -1,109 +0,0 @@
- NON CUSTODIAL atomic swap service
- Link:
- https://boltz.exchange
-
-
- Extension created by,
- dni
-
- onchain_amount_received = amount - (amount * boltz_fee / 100) -
- lockup_fee - claim_fee
- onchain_payment = amount + (amount * boltz_fee / 100) + claim_fee
-
-
- Providing trustless and account-free swap services since 2018. Move IN and
- OUT of the lightning network and remain in control of your bitcoin, at all
- time.
-
-
- README:
- read more
-
- Fee Information
-
-
- {% raw %} Every swap consists of 2 onchain transactions, lockup and claim
- / refund, routing fees and a Boltz fee of
- {{ boltzConfig.fee_percentage }}%. {% endraw %}
-
-
-
-
-
- Auto Lightning -> Onchain
- pending swaps
- pending reverse swaps
-
- Expected amount (sats): {{ qrCodeDialog.data.expected_amount }}
-
- Expected amount (btc): {{ qrCodeDialog.data.expected_amount_btc }}
-
- Onchain Address: {{ qrCodeDialog.data.address }}
- {% endraw %}
- Lightning -> Onchain
-
-
- {% endraw %}
- Onchain -> Lightning
-