The “Litening” Network: Litecoin Support in LND


Two Chainzz

By Olaoluwa Osuntokun

Segwit Activation on Litecoin

At the time of the writing of this blog post, SegWit is slated to activate on Litecoin within the next two weeks. As the lead developers of lnd this is extremely exciting for us! The activation of SegWit on Litecoin will serve as a proving and hardening ground for the Lightning Network until segwit activates on Bitcoin’s mainnet. And as Litecoin is very similar to Bitcoin, we can redirect our pre-production development efforts to Litecoin’s testnet without loss of generality for our ultimate launch on Bitcoin’s mainnet.

The eventual activation of segwit on Litecoin has many Layer 2 protocol developers modifying their codebases and testing infrastructure to target a preliminary launch on Litecoin.

Similarly, we are also extremely excited at the prospect of an initial production run of Lightning on Litecoin! The activation of segwit on Litecoin allows us to deploy Lightning on an active production blockchain. With our ultimate launch, we’ll be able to examine monetary incentives within the network, observe the emergent properties of the networks’ channel graph, and see the rise of production services and applications built on top of the network.

In this post, we’re announcing the (simultaneous) support for Litecoin’s new testnet within lnd, review the additional software infrastructure we built to make the shift possible, and provide a brief peek into a Lightning Network that spans multiple blockchains.

Announcing ltcd:

As a bit of necessary infrastructure for lnd's support of Litecoin’s new testnet4, in collaboration with the Litecoin Developers, we’ve forked btcd for Litecoin, creating ltcd! ltcd is a independent full-node implementation of Litecoin which includes full support for the CSV and SegWit soft forks. Anyone is now able to use ltcd to interact with Litecoin’s testnet4 network, supported by the excellent software infrastructure and libraries originally developed by btcsuite.

Users of btcd will be familiar with the btcctl command-line tool which serves as the control plan for their btcd instance. Similar to btcd, ltcd provides the ltcctl command-line tool complete with identical functionality:

$ ltcctl --testnet getinfo
{
  "version": 120000,
  "protocolversion": 70002,
  "blocks": 49146,
  "timeoffset": 0,
  "connections": 5,
  "proxy": "",
  "difficulty": 21.07561353,
  "testnet": true,
  "relayfee": 0.00001,
  "errors": ""
}

In collaboration with the Litecoin developer community, we’ll continue to maintain ltcd as a fully independent implementation of Litecoin closely following the improvements to the mainline btcd. The creation of ltcd was required to add support for Litecoin to lnd as btcd's websockets interface is currently the only concrete supported backend for lnd.

lnd Now Supports Litecoin!

With ltcd created, adding Litecoin support to lnd was relatively straightforward. However, lnd wasn’t modified to only support Litecoin. Instead, the necessary scaffolding was added to lnd to allow it to (in the future) concurrently support multiple chains. At the time of the writing of this blog post, two chains are currently supported by lnd: Bitcoin and Litecoin. As a result of the slight internal modification, the configuration of lnd has changed a bit.

Previously, one was able to start lnd on Bitcoin’s testnet with the following command:

$ lnd --testnet

However, with lnd’s new multi-chain awareness, users will now need to explicitly specify which chain lnd should run on:

$ lnd --bitcoin.active --bitcoin.testnet

Within lnds configuration file (lnd.conf), two new “groups” have been added, dedicated to the configuration of parameters for the two chains currently supported. As an example, here’s a valid configuration file which specifies chain-parameters for Litecoin:

[Application Options]
debuglevel=debug

[Litecoin]
litecoin.active
litecoin.rpcuser=kek
litecoin.rpcpass=kek

To change an lnd node to instead be a member of the Lightning Network on Bitcoin’s testnet, the configuration file would be modified as so:

[Application Options]
debuglevel=debug

[Bitcoin]
bitcoin.active
bitcoin.rpcuser=kek
bitcoin.rpcpass=kek

Additionally, the getinfo command of lncli has been modified to indicate which chain lnd is currently resident on:

$ lncli getinfo
{
    "identity_pubkey": "03cf20bbc6d29b43969fb444c7af2e50c9228872d820fff8a9548a8974206980a5",
    "alias": "",
    "num_pending_channels": 0,
    "num_active_channels": 1,
    "num_peers": 1,
    "block_height": 48992,
    "block_hash": "de77e5a059bc6d15a5a61f58c899f15806a700990991323ac9c18a8e7a2e98e7",
    "synced_to_chain": true,
    "testnet": true,
    "chains": [
        "litecoin"  <--- new field!!
    ]
}

lnd is able to dynamically switch between the two networks with a simple configuration change, and a restart of the daemon. Running on Litecoin will require an active ltcd instance running, whilst for Bitcoin, an active btcd instance must be running. This new chain-selection feature is now active within the master branch of lnd. An upcoming major release of lnd will include this new feature (and many more!) packaged within our normal signed releases.

In order to faciltate the testing of lnd of Litecoin by both develoeprs and users, we’ve created another channel faucet dedicated to Litecion’s latest testnet. The Litecoin Testnet Channel Faucet can be found here: ltc.faucet.lightning.community. The source code of the faucet has also been updated to be able to toggle either Bitcoin or Litecoin.

We encourage users of lnd to try out the experience on Litecoin. The faster block times ease testing and development a bit as scenarios such as opening, closing or force closing a channel are carried out much more quickly on Litecoin’s testnet compared to Bitcoin’s testnet.

Coming Soon: A Multi-Chain lnd

The latest version of lnd resident in the master branch has been restricted to only support a single chain at a time. In an upcoming release of lnd, we’ll enable lnd to be fully multi-chain aware. By multi-chain ware, we mean that lnd will be able to “straddle” multiple chains and fully manage channels on all of its active chains. This is a highly anticipated feature as Lightning Network daemons that can manage channels on multiple chains are a prerequisite for the implementation of: decentralized off-chain cryptocurrency exchanges, native off-chain cross-chain payments, and cross-chain atomic swaps.

The changes to lnd to add support for selectable single-chain execution modes was crafted in a such a way that adding full multi-chain support is an additional minor diff. For the time being, though, we’re focusing​ our development efforts on finalizing, hardening, and achieving stability of Lightning on a single chain before venturing out into the exciting world of cross-blockchain Lightning!