This repository has been archived by the owner. It is now read-only.
Decentralized, instant off-chain Bitcoin payments library in Java. NOTE: For historical purposes only; prototype of precursor to Lightning Network.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is a proof of concept implementation of chained payment channels with two
phase commit as described at

The advantages are:

- Instant low-trust payments from one party to any other using the same
  payment intermediary or (eventually) a connected intermediary without
  requiring storage of funds with the intermediary
- Instant, indirect micropayments open up use cases such as instant point of
  sale payments for small purchases like a stick of gum in a vending machine,
  and micropayments to peers in peer-to-peer networks or access points in mesh
  networks for allocation of resources
- Escrow support is built-in
- Payments can happen even when the network hash rate drops catastrophically,
  with the caveat that channels can't be established or torn down without
  network confirmation
- Allows intermediary operators to earn Bitcoin-denominated income on their
  bitcoins, hopefully funding full nodes that don't have to mine to earn money
- Permits exchanges (including small, ad-hoc ones) where each trade doesn't
  require a new on-chain transaction but the server can't run with your money

One caveat is that participants will have to lock bitcoins into payment
channels.  This can reduce supply available for sale and drive a higher
exchange rate as this payment mechanism is adopted within the Bitcoin economy
without requiring additional Bitcoin adoption.  However, it can also create
risk of loss of bitcoins, as bitcoins locked into a contract are not stored
offline.  This means that potential vulnerabilities may cause destruction or
theft of value.

The current version is only a proof of concept, and not at all usable for
anything but very basic experimentation.

If there's enough interest, I'll rewrite it into a usable library and set up a
repository, issue tracker and wiki.  I'm busy with paying work and family, and
my Java skills are quite rusty, so it'll take some time.  I will accept code
contributions that are released to the public domain.  If payment processors
or exchanges are interested in integrating this into their service offering,
I can offer assistance.

Contact information:


To test the demo:

- Compile and run snapshot of bitcoind at 
- Run it with the "regtest=1" option enabled in bitcoin.conf
- Run "bitcoind setgenerate true" about 120 times to generate blocks
- Run this project (it's set up for Maven as its dependencies are, too)
- Send coins to the addresses for ep1, ep2 and im (endpoints and intermediary)
- Run "bitcoind setgenerate true" enough times for the program to end
- Use a local block explorer to look at the output

Please DO NOT rely on the API in this demo; this is a proof of concept only
and is not even pre-alpha quality.  See the TODO file for things that need
to be done in order to bring this to pre-alpha stage.