Rebalancing lightning channels after a lightning liquidity swap

Well done, you have participated in a lightning liquidity swap and all channels are open (future post about how to actually do the swap and common problems).

Now you should see a new incoming channel and a new outgoing channel. The incoming channel will have all the liquidity remotely and your outgoing channel will have all the liquidity locally.

This means that no lightning payments can be routed via you. You have to balance those channels to have 50% local and 50% remote liquidity.

In summary your will pay yourself half of the channel capacity and route the payment through all the swap participants. This will result in all channels in the swap to become 50/50 balanced.

triangle swapCase 1: Now for a simple triangle swap, where there are only two other participants, you can use the plugin Thunderhub or Ride The Lightning (RTL) to perform this payment.

Select the node you connected to as Outgoing. You should see 100% blue bar, this means the balance is all on your side (local).

Select the node that connected to you as Incoming. You should see a 100% green bar, this means that the balance is all on the other side (remote).

Thunder Hub rebalance channel dialog

Set the fees to something you are comfortable with, perhaps 100 for each field.

 If your swap participants have done their job they have lowered all fees to 0 and the rebalance should be free.

Set the amount to Fixed and half the channel size (or slightly less if you get liquidity problems).

Hit rebalance!

Pentagram swapCase 2: For any more complicated swaps like a square (4 participants) or a pentagram (5 participants) you will have to build an exact payment route through all the participants to do the balancing correctly (and cheaply).

You still want to pay yourself half the channel size but it has to go out to the node you connected to, then via each participant in the correct order, and then back in via the node that connected to you.

You will have to use the lncli command after you SSH to your node to perform this more complicated payment.

Some swap sites like will prepare the correct route for you already. Please start by running the provided command to test whether the route works correctly:

lncli buildroute --amt [AMOUNT] --hops 1a613234234116def5de68...,7243578234df738...,87827ea233...,014aea43432244...,0a34324445...

Replace the example hops with the actual public keys of the nodes in your swap.

If all is well you will get a json output with a prebuilt route and the cost for this transfer:

"route": {
"total_time_lock": 715773,
"total_fees": "4",
"total_amt": "1250004",
"hops": [

If the fees seem too high then you should start a dialog with the other swap participants to lower their channel fees. Skill levels of the participants varies widely and you may need to assist them.

You can now prepare an invoice which will be the payment to yourself since the routing appears to be successful:

lncli addinvoice --amt [AMOUNT]

This command will return you a PAYMENT_ADDR and a R_HASH that you have to use in the below step.

You can now run the command provided by your service that will in a single line build the route using lncli buildroute, add a multi-payment record (mpp) using the jq utility and then send the payment using lncli sendtoroute:

lncli buildroute --amt [AMOUNT] --hops 1a613234234116def5de68…,7243578234df738…,87827ea233…,014aea43432244…,0a34324445… | jq -r '(.route.hops[-1] | .mpp_record) |= {payment_addr:"[PAYMENT_ADDR]", total_amt_msat: "[AMOUNT]"}' | lncli sendtoroute --payment_hash=[R_HASH] -

You can also construct the hops manually by hand by starting with the node you connected to, traverse the participants one by one and finishing with the public key of your own node.

If all goes well, you should get a SUCCESS result code and also information about the total fees paid.

Congratulations, you are now balanced!

Common problems with liquidity rebalancing

Not all channels have been set up.

The swap participants are reporting that they all have opened channels but how can you be sure? The lncli buildroute command is a quick way to test that the route is correctly set up.

Private channels

If a swap participant accidentally created a private channel instead of a public one then the liquidity swap will not work.

Not enough liquidity in existing channels

A participant can accidentally crate a smaller channel than specified.

I have also seen cases where participants already had existing channels with the other participants so they didn’t feel like creating additional ones.

This will however break the swap as the liquidity in the swap is less than was specified. Rebalancing will not work for example.

Remote node is down

You are unable to open the channel and you see errors like 503, 'FailedToSuccessfullyConnectToRemotePeer'.

This is likely due to the remote node being down, having TOR configuration issues or other resource problems. A restart of the remote node often helps.

Divide the channel opening process into two steps: 1) connect to the peer first and 2) open the channel with the existing peer

Node not accepting the specified channel size in the swap

A node can be misconfigured to only allow chanel size above a certain size… a size that is larger than the swap. Often this is due to am extra zero in the required channel size.

Blockchain reorg

Luckily this hasn’t happened to me but there is a theoretical scenario where the open channel has only one confirmation and due to blockchain reorg that transaction becomes void. Wait for a few confirmations before using a newly open channel!

You are using Umbrel and thus LND in a Docker container. You get the error “The input device is not a TTY”

Umbrel is popular Lightning node operating system. If uses docker container for many of the require services, such as lncli. This means you don’t have direct access to lcnli and linux “piping” between processes doesn’t work.

Split the routing command into two steps:

lncli buildroute --amt [AMOUNT] --hops 1a613234234116def5de68…,7243578234df738…,87827ea233…,014aea43432244…,0a34324445… | jq -r '(.route.hops[-1] | .mpp_record) |= {payment_addr:"[PAYMENT_ADDRESS]", total_amt_msat: "[AMOUNT]"}' > path.txt

lncli sendtoroute --payment_hash=[R_HASH] --routes="$(cat path.txt)"

“not enough witness outputs to create funding transaction”

You are opening a channel and you have enough funds in your on-chain wallet but you still get this error.

Some of your utxo are probably unconfirmed and you cannot spend them even though they are showing in your total balance.

You probably have some chennels pending. There are unconfirmed payments to yourself as part of it.

Wait until all channels are confirmed and all funds should be available again for new channel opening!

Securing your bitcoins in offline storage

There are various levels of security that you can apply to your bitcoins. A specific level of security should be applied depending on the size of the stash.
A mobile or online wallet is often sufficient for smaller sums that you intend to be using for online trading or online purchases. I would still recommend enabling 2 factor authentication for any online wallets and avoiding rooting or jailbreaking your mobile when using mobile wallet.
However the ultimate security for your bitcoins is a wallet that is completely disconnected from the internet and as such unreachable by hackers.
Such wallets are commonly called offline wallets or cold storage and some concrete examples are paper wallets, other physical media, USB hard drives and upcoming dedicated hardware devices.
I’d like to talk about encrypted paper wallets because they appeal to me the most as a cold storage due to their simplicity and the low cost of creating them.
The common theme when creating offline wallets is that any device used to create them has to be offline and the wallet itself can never be connected to an online device until you plan to spend the bitcoins it contains.
An offline wallet will prevent any money to be spent but you are still able to send bitcoins to it and to view the balance easily. Just import the public key into your favourite wallet client.
(Remember that a bitcoin wallet consists of two parts: the public key is like an account number that you give out for people to send money to and you can also use to check the balance. The private key is like a PIN code that is used to spend the bitcoins. If anyone finds your private key your wallet will be emptied and this is irreversible).
When combined with the very strong encryption standard BIP0038, the paper wallet can even be publicly shared without risk of being compromised (as long as the password is kept secret). They can also be packed up online!
What you need: a live linux cd, source code for, one or more usb drives, a printer.

  • Download the code to your freshly formatted USB stick
  • Download Tails linux ISO and burn it to a DVD.
  • Boot up your computer using the DVD and load up html from the USB stick.
  • Generate one or more encrypted paper wallets and scan the public address so that you can send coins to it later.
  • Save the paper wallets as PDF to the USB stick(s)
  • Print multiple copies of the paper wallets or write down the private key manually using pen/paper.
  • You are done

If you find creating and booting from the DVD complicated you can use the online versions of but be aware that your are then exposed to any man-in-the-middle attacks or if your computer has been compromised an attacker could get hold of all your paper wallets.
Additional steps depend on the sum you are planning to store. Put the paper wallets in waterproof bags. Leave a copy with a friend you can trust. Consider storing a copy in a safe. Split up your stash between multiple wallets to lower the risk and to allow for spending in increments.
A recent version of the Android mobile wallet Mycelium has added import of BIP0038 encrypted private keys. This makes it very easy to scan the encrypted wallet and start spending the bitcoins on it.

How do I get Bitcoins in the UK

bitcoinBitCoin is taking the world with storm and with it the price of BitCoin is skyrocketing.
In the last 6 months there have been a flood of new and innovative services that use BitCoin. Enough to justify a long term life for bitcoin and to justify an ever increasing price due to a physical limit on how many bitcoins that can be created.
ATMs that convert cash to bitcoins, online and high street shops that accept bitcoins as payments, high street brokers that convert money to BTC and back, payment gateways and even Subway that accept bitcoins and are just some of the examples.
You may have been interested in getting in on the action; be it for investment purposes or just to experiment.
Unfortunately BitCoin (and all crypto-currencies in general) is a complicated concept and the barrier to entry is quite high.
You have to consider how to get your money, be it USD or GBP or EUR, across to a person that is willing to part with their bitcoins (BTC).
You also have to consider security: how to avoid losing your cash, how to transfer the bitcoins to yourself and how to keep your bitcoins safe.
Bitcoin exchanges are a place where sellers meet buyers and the bitcoin exchange provides a service to match these people up. There are several established bitcoin exchanges but instead of discussing them all I’d like to mention the one that has allowed me to instantly purchase bitcoins (and litecoins, LTC) in the UK on several occasions. is using UK bank transfers, also known as Faster Payments.
This allows for near instant and free transfers between buyers and sellers. I cannot stress enough how much this facilitates bitcoin trading in the UK.
The downside is that the purchase prices on Bitbargain are a bit higher than on an exchange so this favours sellers but not buyers. The markup seems to be 8-10%. However if you want to get in on Bitcoins quickly then this is still the best option.
Once you have your bitcoins, you have to consider security. Bitbargain charge a small fee to leave your bitcoins with them which is an incentive to move them away. This is a smart move because exchanges with a lot of bitcoins have been target of hackers that have stolen millions worth of bitcoins.
Bitcoin paper WalletTo purchase bitcoins and tucking them away my preferred method is a “paper wallet”. The concept is to print out the cryptographic secret that secures your bitcoins and store the physical paper in a safe place (or multiple places).
You can still use you your wallets public address to send bitcoins to but you (nor anybody else) is able to spend those bitcoins without having access to the printed secret.
To keep smaller amounts I can recommend a mobile bitcoin wallet, for example Bitcoin Wallet for android devices and Blockchain for iOS devices. Keep it to small amounts only!
Good luck, have fun and please avoid purchasing at the top of a cycle!