eclair

Run and interact with eclair Lightning Network daemon in Docker. Use for Lightning development, testing payment channels on regtest, managing eclair containers, and calling eclair API endpoints (getinfo, connect, open/close channels, pay/receive).

$ 설치

git clone https://github.com/Roasbeef/claude-files /tmp/claude-files && cp -r /tmp/claude-files/skills/eclair ~/.claude/skills/claude-files

// tip: Run this command in your terminal to install the skill


name: eclair description: Run and interact with eclair Lightning Network daemon in Docker. Use for Lightning development, testing payment channels on regtest, managing eclair containers, and calling eclair API endpoints (getinfo, connect, open/close channels, pay/receive).

Eclair Lightning Network Skill

Eclair is a Scala implementation of the Lightning Network. This skill helps you run eclair in Docker for development and testing, primarily on regtest.

Prerequisites

  • Docker and Docker Compose installed
  • (Optional) Bitcoin Core if not using the bundled docker-compose

Quick Start

Start the full regtest stack (Bitcoin Core + Eclair):

cd ~/.claude/skills/eclair/templates
docker-compose up -d --build   # First time: builds eclair from source (~5-10 min)
docker-compose up -d           # Subsequent runs: uses cached image

This starts:

  • bitcoind: Bitcoin Core 30 in regtest mode with ZMQ
  • eclair: Eclair 0.14.0-SNAPSHOT (built from local source)

Notes:

  • Eclair is built from source at /Users/roasbeef/codez/eclair because Docker Hub images have a "kill switch" for older versions
  • Eclair 0.14+ requires Bitcoin Core 29+, so we use lightninglabs/bitcoin-core:30
  • First build takes ~5-10 minutes to compile Scala code

Check status:

docker exec eclair eclair-cli -p devpassword getinfo

Docker Management

Build Image (from eclair source)

~/.claude/skills/eclair/scripts/docker-build.sh [--source /path/to/eclair]

Or pull pre-built image:

docker pull acinq/eclair:latest

Start Containers

Using docker-compose (recommended for regtest):

cd ~/.claude/skills/eclair/templates
docker-compose up -d

Using a custom image (e.g., from PR build):

cd ~/.claude/skills/eclair/templates
ECLAIR_IMAGE=eclair:pr-3144 docker-compose up -d

Single eclair container (requires external bitcoind):

~/.claude/skills/eclair/scripts/docker-start.sh --network regtest

Stop Containers

cd ~/.claude/skills/eclair/templates
docker-compose down

# To also remove volumes:
docker-compose down -v

View Logs

docker logs -f eclair
docker logs -f bitcoind

Execute Commands

docker exec eclair eclair-cli -p devpassword <command>
docker exec bitcoind bitcoin-cli -regtest <command>

Essential API Operations

All commands use the eclair REST API. Default password in regtest: devpassword

Node Information

# Get node info (nodeId, alias, blockHeight, etc.)
docker exec eclair eclair-cli -p devpassword getinfo

# List connected peers
docker exec eclair eclair-cli -p devpassword peers

Connect to Peers

# Connect by URI
docker exec eclair eclair-cli -p devpassword connect --uri=<nodeId>@<host>:<port>

# Connect by nodeId (requires DNS or known address)
docker exec eclair eclair-cli -p devpassword connect --nodeId=<nodeId>

# Disconnect
docker exec eclair eclair-cli -p devpassword disconnect --nodeId=<nodeId>

Channel Management

# Open channel (amount in satoshis)
docker exec eclair eclair-cli -p devpassword open \
  --nodeId=<pubkey> \
  --fundingSatoshis=1000000

# List all channels
docker exec eclair eclair-cli -p devpassword channels

# List channels (short format)
docker exec eclair eclair-cli -p devpassword -s channels

# Get specific channel
docker exec eclair eclair-cli -p devpassword channel --channelId=<id>

# Get channel balances
docker exec eclair eclair-cli -p devpassword channelbalances

# Close channel gracefully
docker exec eclair eclair-cli -p devpassword close --channelId=<id>

# Force close channel
docker exec eclair eclair-cli -p devpassword forceclose --channelId=<id>

Payments

# Create invoice (amount in millisatoshis)
docker exec eclair eclair-cli -p devpassword createinvoice \
  --description="test payment" \
  --amountMsat=100000000

# Parse invoice to see details
docker exec eclair eclair-cli -p devpassword parseinvoice --invoice=<bolt11>

# Pay invoice
docker exec eclair eclair-cli -p devpassword payinvoice --invoice=<bolt11>

# Check sent payment status
docker exec eclair eclair-cli -p devpassword getsentinfo --paymentHash=<hash>

# Check received payment status
docker exec eclair eclair-cli -p devpassword getreceivedinfo --paymentHash=<hash>

On-Chain Wallet

# Get new address
docker exec eclair eclair-cli -p devpassword getnewaddress

# Get on-chain balance
docker exec eclair eclair-cli -p devpassword onchainbalance

# Get global balance (on-chain + channels)
docker exec eclair eclair-cli -p devpassword globalbalance

# Send on-chain
docker exec eclair eclair-cli -p devpassword sendonchain \
  --address=<btc_address> \
  --amountSatoshis=50000 \
  --confirmationTarget=6

Usable Balances

# Check how much you can send across all channels
docker exec eclair eclair-cli -p devpassword usablebalances

Regtest Development Workflow

1. Start the Stack

cd ~/.claude/skills/eclair/templates
docker-compose up -d

2. Fund the Eclair Wallet

# Generate blocks to have spendable coins
docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin generatetoaddress 101 $(docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin getnewaddress)

# Get eclair address
ECLAIR_ADDR=$(docker exec eclair eclair-cli -p devpassword getnewaddress)

# Send funds to eclair
docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin sendtoaddress $ECLAIR_ADDR 10

# Mine a block to confirm
docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin generatetoaddress 1 $(docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin getnewaddress)

# Verify eclair balance
docker exec eclair eclair-cli -p devpassword onchainbalance

3. Open a Channel (with second node)

To test channels, you'll need a second Lightning node. You can start another eclair instance or use a different implementation.

# Connect to peer
docker exec eclair eclair-cli -p devpassword connect --uri=<nodeId>@<host>:9735

# Open 1M sat channel
docker exec eclair eclair-cli -p devpassword open --nodeId=<nodeId> --fundingSatoshis=1000000

# Mine blocks to confirm channel
docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin generatetoaddress 6 $(docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin getnewaddress)

# Check channel status
docker exec eclair eclair-cli -p devpassword -s channels

4. Send a Payment

# On receiving node: create invoice
INVOICE=$(docker exec eclair2 eclair-cli -p devpassword createinvoice --amountMsat=50000000 --description="test" | jq -r .serialized)

# On sending node: pay invoice
docker exec eclair eclair-cli -p devpassword payinvoice --invoice=$INVOICE

Using the Helper Scripts

docker-build.sh

Build eclair Docker image from source (useful for ARM64/Apple Silicon):

~/.claude/skills/eclair/scripts/docker-build.sh --source /path/to/eclair

Build from a specific branch, commit, or GitHub PR (for interop testing):

# Build from a specific branch
~/.claude/skills/eclair/scripts/docker-build.sh --branch taproot-feature-bit

# Build from a GitHub PR (requires gh CLI)
~/.claude/skills/eclair/scripts/docker-build.sh --pr 3144

# Build from a specific commit
~/.claude/skills/eclair/scripts/docker-build.sh --commit ea9c4ca8dc1403bca6c6dcbe9bc4f3bd81d76513

# Combine with custom tag
~/.claude/skills/eclair/scripts/docker-build.sh --pr 3144 --tag eclair:taproot

build-pr.sh

Quick convenience wrapper for building from a GitHub PR:

~/.claude/skills/eclair/scripts/build-pr.sh 3144   # Builds and tags as eclair:pr-3144

docker-start.sh

Start eclair with custom configuration:

~/.claude/skills/eclair/scripts/docker-start.sh \
  --network regtest \
  --api-password mypassword \
  --data-dir /tmp/eclair-data

docker-stop.sh

Stop and optionally clean up:

~/.claude/skills/eclair/scripts/docker-stop.sh
~/.claude/skills/eclair/scripts/docker-stop.sh --clean  # Also removes volumes

eclair-cli.sh

Convenient wrapper for eclair API:

~/.claude/skills/eclair/scripts/eclair-cli.sh getinfo
~/.claude/skills/eclair/scripts/eclair-cli.sh channels
~/.claude/skills/eclair/scripts/eclair-cli.sh createinvoice --amountMsat=100000000 --description="test"

regtest-setup.sh

Initialize regtest environment with funded wallet:

~/.claude/skills/eclair/scripts/regtest-setup.sh

mine.sh

Mine blocks in regtest:

~/.claude/skills/eclair/scripts/mine.sh        # Mine 1 block
~/.claude/skills/eclair/scripts/mine.sh 6      # Mine 6 blocks (confirm channel)
~/.claude/skills/eclair/scripts/mine.sh 100    # Mine 100 blocks (coinbase maturity)

bitcoin-cli.sh

Wrapper for Bitcoin Core commands:

~/.claude/skills/eclair/scripts/bitcoin-cli.sh getblockchaininfo
~/.claude/skills/eclair/scripts/bitcoin-cli.sh getbalance
~/.claude/skills/eclair/scripts/bitcoin-cli.sh sendtoaddress <address> <amount>

Bitcoin Core Control

The bitcoind container is fully accessible for controlling the regtest blockchain.

Mining Blocks

# Using the helper script
~/.claude/skills/eclair/scripts/mine.sh 6

# Or directly
docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin \
  generatetoaddress 6 $(docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin getnewaddress)

Blockchain Info

~/.claude/skills/eclair/scripts/bitcoin-cli.sh getblockchaininfo
~/.claude/skills/eclair/scripts/bitcoin-cli.sh getmempoolinfo
~/.claude/skills/eclair/scripts/bitcoin-cli.sh getblockcount

Wallet Operations

# Get balance
~/.claude/skills/eclair/scripts/bitcoin-cli.sh getbalance

# Generate address
~/.claude/skills/eclair/scripts/bitcoin-cli.sh getnewaddress

# Send funds
~/.claude/skills/eclair/scripts/bitcoin-cli.sh sendtoaddress <address> 1.0

Connecting Other Lightning Nodes (lnd, c-lightning)

The bitcoind container exposes all ports to the host, allowing other Lightning implementations to connect:

PortProtocolUsage
18443RPCBitcoin Core RPC (regtest)
18444P2PBitcoin Core P2P (regtest)
28332ZMQBlock notifications
28333ZMQTransaction notifications

Example lnd configuration to connect to the shared bitcoind:

[Bitcoin]
bitcoin.active=1
bitcoin.regtest=1
bitcoin.node=bitcoind

[Bitcoind]
bitcoind.rpchost=localhost:18443
bitcoind.rpcuser=bitcoin
bitcoind.rpcpass=bitcoin
bitcoind.zmqpubrawblock=tcp://localhost:28332
bitcoind.zmqpubrawtx=tcp://localhost:28333

Example c-lightning/CLN configuration:

network=regtest
bitcoin-rpcconnect=localhost
bitcoin-rpcport=18443
bitcoin-rpcuser=bitcoin
bitcoin-rpcpassword=bitcoin

Configuration

Key configuration options (set via environment variables or eclair.conf):

OptionDescriptionDefault
eclair.chainNetwork: mainnet, testnet, signet, regtestregtest
eclair.api.enabledEnable REST APItrue
eclair.api.passwordAPI authentication password(required)
eclair.api.portAPI port8080
eclair.node-aliasNode name visible on networkeclair
eclair.bitcoind.hostBitcoin Core hostbitcoind
eclair.bitcoind.rpcuserBitcoin Core RPC userbitcoin
eclair.bitcoind.rpcpasswordBitcoin Core RPC passwordbitcoin

See templates/eclair.conf.template for full configuration.

Ports

PortServiceDescription
9735LightningPeer-to-peer Lightning protocol
8080APIREST API and WebSocket
18443Bitcoin RPCBitcoin Core RPC (regtest)
28332Bitcoin ZMQBitcoin Core ZMQ notifications

Troubleshooting

"Connection refused" to API

  • Ensure eclair container is running: docker ps
  • Check logs: docker logs eclair
  • Verify API is enabled in config

"Unauthorized" API response

  • Check password matches eclair.api.password in config
  • Default regtest password: devpassword

Channel stuck in "WAIT_FOR_FUNDING_CONFIRMED"

  • Mine more blocks: docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin generatetoaddress 6 $(docker exec bitcoind bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoin getnewaddress)

"Insufficient funds"

  • Check on-chain balance: eclair-cli onchainbalance
  • Fund wallet from bitcoind (see regtest workflow above)

Bitcoin Core connection failed

  • Verify bitcoind is running: docker ps
  • Check ZMQ is enabled and ports match
  • Verify RPC credentials match between bitcoind and eclair config

Building on Apple Silicon (ARM64)

Use the docker-build.sh script which handles ARM64 builds:

~/.claude/skills/eclair/scripts/docker-build.sh --source /path/to/eclair

Interop Testing with Custom Branches/PRs

For testing in-development features across Lightning implementations:

Testing a GitHub PR

# Build and tag from PR #3144 (taproot feature bit)
~/.claude/skills/eclair/scripts/build-pr.sh 3144

# Or manually with docker-build.sh
~/.claude/skills/eclair/scripts/docker-build.sh --pr 3144 --tag eclair:taproot

# Start the stack with the PR image
cd ~/.claude/skills/eclair/templates
ECLAIR_IMAGE=eclair:pr-3144 docker-compose up -d --build

Testing a Feature Branch

# Build from taproot-feature-bit branch
~/.claude/skills/eclair/scripts/docker-build.sh --branch taproot-feature-bit --tag eclair:taproot

# Start the stack
cd ~/.claude/skills/eclair/templates
ECLAIR_IMAGE=eclair:taproot docker-compose up -d

Environment Variables for docker-compose

VariableDescriptionDefault
ECLAIR_SOURCEPath to eclair source directory/Users/roasbeef/codez/eclair
ECLAIR_IMAGEDocker image tag to useeclair:local

Further Reading