Skip to content

lnbits/watchonly

Repository files navigation

Onchain Wallet (watch-only) - LNbits extension

For more about LNBits extension check this tutorial

Monitor an onchain wallet and generate addresses for onchain payments

Monitor an extended public key and generate deterministic fresh public keys with this simple watch only wallet. Invoice payments can also be generated, both through a publically shareable page and API.

You can now use this wallet on the LNbits SatsPayServer extension

Video demo

Wallet Account

  • a user can add one or more xPubs or descriptors
    • the xPub must be unique per user
    • such and entry is called an Wallet Account
    • the addresses in a Wallet Account are split into Receive Addresses and Change Address
    • the user interacts directly only with the Receive Addresses (by sharing them)
    • see BIP44 for more details
    • same xPub will always generate the same addresses (deterministic)
  • when a Wallet Account is created, there are generated 20 Receive Addresses and 5 Change Address
    • the limits can be change from the Config page (see screenshot 1)
    • regular wallets only scan up to 20 empty receive addresses. If the user generates addresses beyond this limit a warning is shown (see screenshot 4)
  • an account can be added From Hardware Device

Scan Blockchain

  • when the user clicks Scan Blockchain, the wallet will loop over the all addresses (for each account)
    • if funds are found, then the list is extended
    • will scan addresses for all wallet accounts
  • the search is done on the client-side (using the mempool.space API). mempool.space has a limit on the number of req/sec, therefore it is expected for the scanning to start fast, but slow down as more HTTP requests have to be retried
  • addresses can also be rescanned individually form the Address Details section (Addresses tab) of each address

New Receive Address

  • the New Receive Address button show the user the NEXT un-used address
    • un-used means funds have not already been sent to that address AND the address has not already been shared
    • internally there is a counter that keeps track of the last shared address
    • it is possible to add a Note to each address in order to remember when/with whom it was shared
    • mind the gap (screenshot 4)

Addresses Tab

  • the Addresses tab contains a list with the addresses for all the Wallet Accounts
    • only one entry per address will be shown (even if there are multiple UTXOs at that address)
    • several filter criteria can be applied
    • unconfirmed funds are also taken into account
    • Address Details can be viewed by clicking the Expand button

History Tap

  • shows the chronological order of transactions
  • it shows unconfirmed transactions at the top
  • it can be exported as CSV file

Coins Tab

  • shows the UTXOs for all wallets
  • there can be multiple UTXOs for the same address

New Payment

  • create a new Partially Signed Bitcoin Transaction
  • multiple Send Addresses can be added
    • the Max button next to an address is for sending the remaining funds to this address (no change)
  • the user can select the inputs (UTXOs) manually, or it can use of the basic selection algorithms
    • amounts have to be provided for the Send Addresses beforehand (so the algorithm knows the amount to be selected)
  • Show Change allows to select from which account the change address will be selected (defaults to the first one)
  • Show Custom Fee allows to manually select the fee
    • it defaults to the Medium value at the moment the New Payment button was clicked
    • it can be refreshed
    • warnings are shown if the fee is too Low or to High

Check & Send

  • creates the PSBT and sends it to the Hardware Wallet
  • a confirmation will be shown for each Output and for the Fee
  • after the user confirms the addresses and amounts, the transaction will be signed on the Hardware Device

Share PSBT

  • Show the PSBT without sending it to the Hardware Wallet

Screensots

  • screenshot 1: image

  • screenshot 2: image

  • screenshot 3: image

  • screenshot 4: image