Solutions to inbound capacity problem in Lightning Network
If you want to accept payments through lightning network or to properly balance your channels — your node needs to have sufficient inbound capacity. This article describes what that is and practical ways to get it.
Payments over Lightning Network (LN) work differently from how on-chain bitcoin transactions work. My previous post describes beautiful cryptographical magic behind LN, below are just few practical points.
- Lightning network consist of two-sided channels, and all the coins are locked in these channels.
- The total amount of bitcoins locked in a channel is called channel capacity.
- The amount on your side of the channel is called local balance. The amount on the side of the peer is called remote balance.
- When you open a new channel — all your balance is local (here we omit dual-funded channels and pushed amount for simplicity).
- The capacity of a channel always stays the same (here we omit splicing for simplicity) and roughly equals to your local balance plus the remote balance (roughly because of commit fees).
- When you pay — the balance flows from your side of the channel to the remote side. When you receive payments — the other way around.
Which brings us to one of the biggest culprits:
In order to receive payments, your node needs to have sufficient inbound capacity: sufficient number of open channels with sufficient remote balance (otherwise the balance cannot flow to your side).
To increase inbound capacity means to somehow get channels with large remote balance. And for small new nodes it can be very-very tricky. And if that is not enough, there is one more aspect to this:
Not all inbound capacity is the same. It can be more useful or less useful. A channel from a well-connected and balanced node will connect your node to hundreds of other nodes. A channel from a new non-public node will not.
Confused about how to get it right? Fear not, there are ways!
Solution 1: Spend
This is the obvious one, but it needs to be said. When you use a channel to spend coins, they are written off the local balance and added to the remote balance. The more you spend — the larger your remote balance, the more inbound capacity you have.
Of course this approach does not solve all the problems for everyone. But if you have a choice to pay via LN — use it and you will have less troubles with incoming payments in the future.
Solution 2: Ask for incoming channels
This is probably the best option for most nodes: if you need inbound capacity — ask for incoming channels. If you are a merchant — ask your clients, if you know someone running a node — ask them.
But by far the easiest way is to use channel opening services. To the best of my knowledge — there are currently only three out there.
- Thor — a service by a lightning-enabled merchant Bitrefill. They can rent you a private channel with capacities from 0.003 and up to 0.16 BTC, which they promise to keep open for at least 30 days. Depending on the capacity it will cost you anywhere from a dollar and up to more than 20 bucks.
- Y’alls — a service by Alex Bosworth, which allows you to pay less than a dollar for a 0.02 BTC channel. And while this may seem cheaper than Bitrefill, beware that Y’alls sets higher than usual routing fees (which your clients will have to pay).
- LightningTo.Me — my personal and non-profit hobby project that will open a 0.02 BTC channel to your node for free. And yes, it also sets routing fees to zero. Here you can read the answers to some frequently asked questions.
- LNBig.com — a large liquidity provider that will open a channel of up to 0.04 BTC for free. Their policy about routing fees change quite often: they are currently rebalancing their node and set the fees to almost zero, but expect them to grow at any time.
There are also nodes that promise to open a channel to your node if you first open a channel to their node. You can check WILL_CONNECT_BACK or Lightning Power Users. Beware that this will not always work with nodes running c-lightning, which allows only one channel between two nodes.
Solution 3: Custodial exchange lightning bitcoins to on-chain bitcoins
This may seem ridiculous to some, but that is actually a thing: you can exchange bitcoins for bitcoins. In a way, this is also a form of spending: you spend lightning bitcoins and buy on-chain bitcoins.
I hope that soon enough many large exchanges will enable lightning deposits, but for the moment there are not so many options. I will just mention some links: zigzag.io, sideshift.ai, southxchange.com, btcduke.com, coinplaza.it, ln.zone, lightningconductor.net.
Please beware that exchange services are not always very reliable. Do your own research and immediately withdraw your coins once exchanged.
Solution 4: Non-custodial inverse submarine swaps
Similarly to the previous solution, inverse submarine swaps implement an exchange from lightning (off-chain) bitcoin to on-chain bitcoin. But this solution is better than the previous one, because it is non-custodial (does not require trust). It is currently not very user-friendly and more oriented towards developers, so I will just mention it briefly here. Please refer to the introduction blog post or go directly to the github repository.
Solution 5: Use custodial storage
This is an even more dangerous way, because it requires you to trust a service for a long period of time. Doing your own research here is even more important than in the previous case. Essentially, these services allow you to deposit your money into their custody and promise to give it back when you need it.
Examples include various custodial wallets: BlueWallet, Wallet of Satoshi or HTLC.me. For these everything is quite clear: you deposit lightning bitcoins from your node to theirs, freeing up local balance of your node.
But if you are creative enough, you can also make use of other services. For example, you can send yourself a large tip via tippin.me. This way you will store some portion of your funds on their node.
Solution 6: Keep your node online
If you simply keep your node always online— you will most probably get some incoming capacity. Open channels to random well-maintained nodes (I would appreciate if my node will be one of them), make sure that your node is publicly advertising its IP address, check that the ports are open, and setup monitoring to ensure that LN software is running 24/7.
First, people like nodes with at least some connectivity that are always online, because these nodes are more likely to root their payments. Second, some nodes are running on autopilot, and if you are online — you may get a channel from these nodes just by pure chance.
Accepting Lightning payments is trickier than accepting on-chain payments, but do not be discouraged, use some of the tips above. When your node matures — it will not be a problem at all.
Do you have any comments? Did I forget something? Please do not hesitate to share your thoughts! Let’s keep improving this post and help Lightning grow. Oh, and follow LightningTo.Me updates on twitter!