A scala implementation of the Lightning Network. Eclair is french for Lightning.
More precisely, this is an implementation of Rusty's deployable lightning. In particular it uses the same wire protocol, and almost the same state machine.
The general idea is to have an actor per channel, everything being non-blocking.
A "blockchain watcher" is responsible for monitoring the blockchain, and sending events (eg. when the anchor is spent).
- lightning-types: scala code generation using protobuf's compiler (wire protocol)
- eclair-demo: actual implementation
Prerequisites:
- A JRE or JDK depending on wether you want to compile yourself or not (preferably > 1.8)
- A running bitcoin-core (testnet or regtest)
Either run from source:
mvn exec:java -Dexec.mainClass=fr.acinq.eclair.Boot
Or grab the latest released jar and run:
java -jar eclair-demo_2.11-*-capsule-fat.jar
See TESTING.md for more details on how to use this software.
Available jvm options (see application.conf
for full reference):
eclair.server.port (default: 45000)
eclair.http.port (default: 8080)
eclair.bitcoind.rpcuser (default: foo)
eclair.bitcoind.rpcpassword (default: bar)
method | params | description |
---|---|---|
connect | host, port, anchor_amount | opens a channel with another eclair or lightningd instance |
list | lists existing channels | |
addhtlc | channel_id, amount, rhash, locktime | sends an htlc |
fulfillhtlc | channel_id, r | fulfills an htlc |
close | channel_id | closes a channel |
help | displays available methods |
- Network
- Routing
- Channel state machine
- HTLC Scripts
- Unilateral close handling
- Relaying Payment
- Blockchain watcher
- Storing states in a database
- [1] Lightning Network by Joseph Poon and Thaddeus Dryja (website), github repository (golang)
- [2] Deployable Lightning by Rusty Russel (Blockstream), github repository (C)
- [3] Thunder Network by Mats Jerratsch (Blockchain.info), github repository (Java)