Counterfactual: Generalized State Channels

Jeff Coleman, Liam Horne, and Li Xuanji

Abstract. State channels are an important technique for reducing fees for blockchain users. Within their scope of applicability, they allow users to transact with each other without paying blockchain transaction fees and with instant finality, and are the only technique that securely realises the latter property. We describe generalized state channels, a construction that allows users to install new functionality in an existing channel without touching the blockchain, using counterfactual instantiation of contracts within a channel. We present an object-oriented approach built on top of ethereum that encapsulates functionality and state in counterfactually instantiated contracts, providing numerous privacy, efficiency and security benefits over a monolithic approach, and describe a new object-oriented metachannel approach to building state channel networks. We analyze the unique security assumptions of channels and describe third-party services that channel users can benefit from using.

📄 Read Paper Here (PDF)


For a more approachable introduction, read our post here. For a broad survey on Layer 2 solutions, read Josh Stark's article: Making Sense of Ethereum's Layer 2 Scaling Solutions.

What is general about "generalized state channels"?
Generalized state channels move all of the on-chain stateful components for blockchain applications off-chain. Rather than require each application developer to build an entire state channel architecture from scratch, a generalized state channel generalized framework is one where state is deposited once and then be used by any application or set of applications afterwards.

How are state channels different from Plasma?
State channels perform under environments of unanimous consent amongst parties involved whereas Plasma does not have this restriction. In Plasma, the validator set is assumed to be different than the participant set whereas in state channels they are the same set. Additionally, Plasma requires publishing the merkle root of the off-chain state periodicaly, whereas state channels assume no on-chain operations will ever be necessary. However, this is an evolving discussion.

I'm interested in this kind of research, how can I help?
If you're interesting in contributing please reach out to us directly at Additionally, this paper is a dynamic document; to contribute directly or propose fixes, visit the GitHub repository.

More answers will be added as questions come to us.