Setting Up Lightning Network on your BTCPay Server: A Merchant's Journey from Zero to First Channel

Setting Up Lightning Network on your BTCPay Server: A Merchant's Journey from Zero to First Channel

A practical guide documenting the actual process, some gotchas, and a few lessons learned in the journey to configure one's BTCPay Server internal Lightning Node to be a peer in the Lightning Network.

Starting Point

You're a Shopify store owner who wants to accept Bitcoin Lightning payments. You have read our posts on how Lightning facilitates modern commerce for the ideal money Bitcoin by offering currency liquidity and on how to set up your BTCPay Server. You have read our recommendation for the books on the Lightning Network and on Bitcoin.

If not, see the advice below this post. You're ready to enable the Lightning Node in your BTCPay Server and you have also:

  • Set up a BTCPay Server instance
  • Waited for Bitcoin full node to sync (this takes about 2 weeks running 24x7(
  • Created a BTCPay hot wallet and securely saved your seed phrase
  • Installed Lightning Network in that BTCPay Server (and the green light says it's ready)
  • Have a Coinbase account for converting USD to Bitcoin (or a similar USD-to-BTC app)

But when you click into Ride the Lightning (RTL), everything shows zero. Your Lightning node is installed but not configured. Now what?

This is the story of getting from "green lights but nothing works" to actually having a functioning Lightning channel. Spoiler: it's not as straightforward as you'd hope, but it's absolutely doable.

The Goal: Open Your First Lightning Channel

We're aiming for outbound liquidity - the ability to send Lightning payments. This is step one. Receiving payments (inbound liquidity) is a separate challenge we'll tackle in a future post.

Budget: $500 USD in Bitcoin
Target: One reliable channel to a well-connected node
Time investment: 2-3 hours (mostly waiting for blockchain confirmations)

Step 1: Buy Bitcoin and Send to BTCPay Wallet

This seems straightforward, and it is - but pay attention to which wallet you're funding.

What I did:

  1. Logged into Coinbase
  2. Purchased $500 of Bitcoin from my TradFi bank
  3. Found my BTCPay Server Wallet address (on the BTCPay Server page for the BTC service)
  4. Switched back to Coinbase (non-Advanced)
  5. Chose Pay and the BTC currency
  6. Typed in $500 USD
  7. Sent it to my BTCPay Store Wallet address
  8. Watched it appear on mempool.space - (where it appears "unconfirmed" at first)

The wait: About 30 minutes for confirmations. I overpaid fees slightly (~$3.38 for 4.20 sat/vB) but it confirmed quickly.

First lesson: mempool.space is one of the observers of the public global blockchain. It is interesting to see your small transactions become part of irrefutable History.

Step 2: The Critical Discovery - Two Separate Wallets

This was confusing. My $500 showed up in my BTCPay wallet, fully confirmed. I went to RTL to open a Lightning channel, and... the "Remaining" field showed 0 sats. Six hours later, the Remaining Sats were still at 0. The Lightning Node was not getting funded.

Why?

The revelation: a BTCPay Server has two separate on-chain wallets:

  1. Your BTCPay Store Wallet - where customer payments go, where I sent my $500
  2. Your Lightning Node's Internal Wallet - what RTL uses to open channels

They're completely separate. You need to transfer Bitcoin from the store wallet to the Lightning node wallet.

How to transfer:

  1. In RTL, go to On-Chain → Receive
  2. Select Bech32 (P2WKH) address type
  3. Click Generate Address
    1. you'll get an address starting with bc1...
  4. Copy that address
  5. Go to your BTCPay Store Wallet
  6. Send your Bitcoin to that RTL address
  7. Sign your outbound BTC transaction
  8. Wait for confirmations (another 10-30 minutes)

Critical note: When BTCPay asks you to "Sign" the transaction, you'll need your seed phrase if you're using a the BTCPay internal "hot" wallet.

Don't panic when you see the "NOT RECOMMENDED" warning - you're on your own server signing your own transaction. It's safe in this context.

Retrieve your 12-word seed phrase from your excellent mental recall or from a password manager.

Step 3: Testing the Waters (and learning limits)

Once the transfer confirmed and RTL showed my balance, I proceeded cautiously. It is good to test BTC transactions with small amounts because these transactions are irrevocable. Once spent, those coins are gone - or at least moved somewhere perhaps inconvenient.

First attempt: 90,000 sats (~$68)

Using a popular-named Lightning Node:

Not having any biases or prior experience, knowing any Lightning Node peer let alone which peer to choose is ambiguous. You find Lightning Nodes at directories like 1ml.com or amboss.space.

On my first attempt, I chose the Lightning Node with the trendy and attractive name WalletOfSatoshi.com.

Read on for what happened with that choice. Keep reading for a better choice.

Copy the chosen node's address from the directory site. For example:

035e4ff418fc8b5554c5d9eea66396c227bd429a3251c8cbc711002ba215bfc226@170.75.163.209:9735

Navigation to try opening a channel:

  1. From BTCPay Server main page → Lightning settings
  2. Click into RTL (Ride the Lightning)
  3. Navigate to Peers/Channels → Peers tab
  4. Click Add Peer
  5. Paste in the WalletOfSatoshi peer address
  6. Click Add Peer, wait for connection
  7. Click Open Channel (appears in the dialog after peer connects)

I tried to open a channel and got this error:

Reserved Wallet Balance Invalidated: Transaction Would Leave Insufficient 
Funds For Fee Bumping Anchor Channel Closings

What this means: LND (Lightning Network Daemon) reserves extra Bitcoin (~10,000-20,000 sats) for emergency channel closings. With only 90k sats total, there wasn't enough buffer.

Second attempt: 70,000 sats

Reducing the channel size, we try again. With this, RTL reports that WalletOfSatoshi denied the peering with the following message:

Peer is not accepting inbound channels

Takeaway: make sure to find and choose a Lightning Node that is accepting new Inbound Connections.

Step 4: Understanding Peers and Channel Partners

You can't just open a channel to anyone. The peer has to accept it. More importantly, who you try to connect and the direction of the connection matters for a merchant.

Defining outbound vs inbound:

  • Opening a channel TO someone = You get outbound liquidity, the ability to send
  • Someone opening a channel TO you = You get inbound liquidity, an ability to receive

As a merchant, you ultimately need inbound liquidity. But for your first channel, connecting to a well-established node for outbound liquidity is still valuable.

Choosing a reliable peer:

Research several options. ACINQ is a fine choice because:

  • 230+ BTC capacity
  • 500+ channels
  • 7 years operating history
  • Makes Phoenix wallet - they're a serious Lightning company
  • Verifiable stats on 1ml.com

How to research any node:

  1. Search on 1ml.com or amboss.space
  2. Look for: 50+ BTC capacity, 500+ channels, 99%+ uptime, years of history
  3. Check community discussions on Reddit or Lightning forums

Step 5: Opening the Channel to ACINQ (a Working Choice)

Retrieve the Lighting address for the more accepting Lightning Node and with more Bitcoin added (bringing my total to 400,000 sats), let's do this with working choices.

The complete navigation and process:

Getting to RTL

  1. From your BTCPay Server main page
  2. Go to Lightning settings/page
  3. Click into RTL (Ride the Lightning)
  4. Navigate to Peers/Channels → Peers tab

Add the Peer

  1. Click Add Peer
  2. Paste the ACINQ node URI:
03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f@3.33.236.230:9735
  1. Click Add Peer
  2. Wait for connection (usually instant)

Open the Channel (Right from the Add Peer Dialog)

Here's what can be missed initially: after successfully adding the peer, RTL's dialog offers an Open Channel button right there. You don't have to navigate to another tab - it's streamlined.

  1. After peer connects, click Open Channel in the dialog
  2. Set the Amount: 400,000 sats (leaving a few thousand in your balance for reserves)
  3. Advanced Options - keep the defaults:
    • Priority: Normal (balanced fees, not urgent)
    • Taproot: OFF (stick with standard channels for first time)
    • Spend Unconfirmed: OFF (wait for confirmations to be safe)
    • Private Channel: OFF (you want a public channel)
  4. Click Open Channel

That's it. No complicated navigation. The UI actually makes this pretty straightforward once you know the flow. IFYKYK.

Now, notice that the funding amount is 400,000. That is because a peer Node may have a funding limit. ACINQ did and it rejected the connection requests until it was funded at 400000 sats (about $350 USD or so currently).

What happens next:

  • RTL creates an on-chain transaction to open the channel
  • Status shows as "Pending" or "Opening"
  • Needs 3-6 confirmations (30-60 minutes)
  • Then changes to "Active"

Current Status: What you Have at this Stage

✅ Working Lightning Node

  • Connected to ACINQ (a major Lightning Network node)
  • 400,000 sats of outbound liquidity
  • Can send Lightning payments
  • All on your own infrastructure

❌ What you Still Need

  • Inbound liquidity to receive payments from customers
  • Multiple channels for redundancy
  • Channel balancing strategies

Lessons Learned

The two-wallet architecture wasn't obvious

BTCPay doesn't make it obvious that you need to fund the Lightning node separately. Budget extra time for this transfer.

Having been through the process, looking back, it is obvious. But from the beginning, wondering what to do next, it isn't apparent.

Minimum channel size limits exist

Don't try to open channels with tiny funds. Aim for at least 400,000 sats, minimum, to avoid reserve-funding issues.

Not all nodes accept incoming channels

Popular wallet services like WalletOfSatoshi may not accept random channel requests. Choose other well-connected routing nodes which do accept input connections, instead.

Use clearnet, not Tor

For merchant nodes where you are prioritizing reliability over privacy, clearnet connections are faster and more stable. There is simply more to configure for Tor networks.

The signing process varies

If you have a BTCPay hot wallet, you'll use your seed phrase. If you set up with an xpub, you'll use PSBT. Knowing your wallet type before starting helps you speed through the configurations and transfers.

Navigation matters

Getting from the BTCPay home pages to Lightning to RTL to Peers isn't obvious at first.

The easiest path through the UI is:

BTCPay Server → Lightning → RTL → Peers/Channels → Peers → Add Peer → Open Channel.

Getting Started Cost Breakdown

  • Bitcoin purchase: $500.00
  • Transfer to BTCPay wallet: $3.38 (on-chain fee)
  • Transfer to Lightning node: $2-5 (on-chain fee, varies)
  • Channel open: $2-5 (on-chain fee, varies)
  • Total in fees: ~$10-15
  • Bitcoin locked in channel: 400,000 sats (~$350-400)

That locked Bitcoin isn't gone - you could close the channel anytime and get it back (minus closing fees).

What's Next: Inbound Liquidity

Having outbound liquidity means I can send Lightning payments, but as a merchant, I need to receive them. That requires inbound liquidity, which is a separate challenge.

Options that are explored in another post include:

  • Loop - Submarine swaps built into RTL
  • Lightning Service Providers (LSPs) - Like Bitrefill's Thor
  • Channel rebalancing - Moving liquidity between channels
  • Waiting for routing - Natural rebalancing over time

Resources

See the products and blogs linked to this post. Additionally, see the following.

Essential Reading:

Tools Used:

Community:

Final Thoughts

Getting Lightning operational on BTCPay Server is not plug-and-play. There is good documentation exists some details - like the two-wallet system, minimum reserves, and peer selection - whose use and configuration aren't obvious.

This is a midway stage in the journey. The next challenge - and of real value for merchants - comes from configuration for inbound liquidity.

Return to Collection