Today we’re excited to release Nitro Protocol — a protocol for building generalized, n-party state channel networks.

The Nitro Protocol paper gives a complete specification for how to construct ledger channels and virtual channels, which form the basis for state channel networks. In a change from previous protocols, Nitro decouples the operation of the state channels from the network that they are part of, allowing the state channels to update independently and making it easier to reason about their behavior.

The paper introduces a new graphical notation for constructing ledger and virtual channels.

What can I do with Nitro?

Nitro enables the creation of state channel networks. For example, you could build a state channel hub — like Connext’s hub but for generalized state channels instead of payment channels. This would allow the following interaction:

Alice and Bob each have a channel open with the hub, supported by an on-chain deposit.

They want to play a game of chess in a new state channel between the two of them.

They open a virtual channel completely off-chain, with the help of the hub.

Alice and Bob then play chess in this channel. The updates are sent directly between them and do not pass through the hub.

When Alice and Bob have finished the game, they share the outcome with the hub.

The hub rebalances their totals, allowing the game to be closed completely off-chain.

If any party stops cooperating at any point, the other parties can challenge them on-chain, following standard state-channel rules.

Can I use Nitro today?

Yes and no. But mostly no. The contracts for Nitro already exist but the supporting infrastructure isn’t there yet. You can write ForceMove apps today that will run on Nitro when the infrastructure is ready, though.

Our current development plan is as follows:

Phase 0: direct channels — COMPLETE ✅​

State channel wallet that supports general state channel applications.

Example apps running on the testnet.

Phase 1: ledger channels — IN PROGRESS

Example apps running with ledger channels.

State channel wallet upgraded to manage ledger channels.

Phase 2: virtual channels

State channel wallet upgraded to manage virtual channels.

Create hub to support virtual channels.

Phase 3: production ready

Contracts audited.

Hub(s) deployed on main net.

Developer documentation.

Beyond the work above, there’s loads of interesting work to do, including adding in ERC20/ERC721 support and building clients in languages other than TypeScript. This entire protocol and project is open source, and we’re actively seeking help from the community. If you’re interested in helping to build any of this, please get in touch!

What next?

Check out our example apps. Read the paper. Come chat. Check back here for future updates!