
"I wouldn't want to throw you into the deep end at your first anarchist co-op"
I hope you consulted the week's calendar: https://devconnect.org/scheduleNotes from Devconnect IstanbulNovember 2023 - Oliver JL Renwick - @mapachurroFor Technical Takeaways, scroll down. For color commentary, keep reading.Last year at Marienbad; next year at DevconWhen I was going through my notebook this morning, on my Istanbul to Heathrow flight, out fell a sticker I got at Devcon VI, in Bogotá, advertising ETH Istanbul. It’s a weird memory, because it seemed quite clear at the time: ...

Devcon VI: La Tierra del Recuerdo
15 Oct., 2022, en route BOG-EWR E.G. Galano, co-founder of Infura, got up on a stage at the Ágora Convention Center in Bogotá, Colombia, this past Thursday, and tried to remember. Or, in another sense, he tried to remind: remind us of how Infura started–with the original slides that Herman Junge put together in what seems like the palely-lit streets of memory, but is in fact a short six years ago–and how, all along, we’ve been building towards the decentralization of data connectivity and dis...

"I wouldn't want to throw you into the deep end at your first anarchist co-op"
I hope you consulted the week's calendar: https://devconnect.org/scheduleNotes from Devconnect IstanbulNovember 2023 - Oliver JL Renwick - @mapachurroFor Technical Takeaways, scroll down. For color commentary, keep reading.Last year at Marienbad; next year at DevconWhen I was going through my notebook this morning, on my Istanbul to Heathrow flight, out fell a sticker I got at Devcon VI, in Bogotá, advertising ETH Istanbul. It’s a weird memory, because it seemed quite clear at the time: ...

Devcon VI: La Tierra del Recuerdo
15 Oct., 2022, en route BOG-EWR E.G. Galano, co-founder of Infura, got up on a stage at the Ágora Convention Center in Bogotá, Colombia, this past Thursday, and tried to remember. Or, in another sense, he tried to remind: remind us of how Infura started–with the original slides that Herman Junge put together in what seems like the palely-lit streets of memory, but is in fact a short six years ago–and how, all along, we’ve been building towards the decentralization of data connectivity and dis...

Subscribe to Oliver JL Renwick

Subscribe to Oliver JL Renwick
Share Dialog
Share Dialog


<100 subscribers
<100 subscribers
One of the core promises of public blockchain technology is that truth is objective: if it’s on-chain, anyone can confirm its existence.
Naturally, that means that at a certain point, someone asked the question: what if it could be off chain, and we could still confirm its existence?
To be clear, that common reality or objective truth is still the goal, at least for now.
But in the face of rising transaction costs on Ethereum Mainnet, people began to get innovative in figuring out how to do enforceable things on chain, except not.
This incentive introduced one innovation after another, broadly referred to as “scaling solutions” by the Ethereum Foundation. One solution which is very loud in our community is that of rollups, which have the benefit of claiming all the security of Ethereum, with as much transaction throughput as they can manage.
But there were other ideas: ideas which didn’t just solve for cheapness or speed, but also for privacy and flexibility.
One of these was using a very basic tool: a signed transaction… that isn’t broadcast and recorded to the blockchain… yet.
This is what’s known as an “off-chain transaction”. The most immediate and widely-known example of this is probably that used by hardware wallets.
With a hardware wallet, your Secret Recovery Phrase, or whatever form your private key takes, is stored on a digital device of some kind. This device is kept isolated from the Internet, in order to reduce the likelihood of attack.
The duly authorized user, however, is capable of transferring an unsigned transaction to the wallet, signing it, and transferring it back to an Internet-connected machine, which can then broadcast that transaction to the network. Thus, the transaction is recorded, and objectively exists.
What happens, though, during that time that the transaction has been signed, but not yet broadcast? Does it exist? Is it a valid transaction? It’s signed, it’s primed, it’s “live”: it just hasn’t been broadcast yet. (See the “Notes” section for more on this.)
In this sense, an off-chain transaction is a situation where you’ve got a key that is signing transactions in an environment that isn’t directly connected to Mainnet. No gas fees! Sign all you want!
How do we take that cheap, flexible power, and make it into something that scales, and is eventually settled on chain? What if we made some sort of… channel through which off-chain activity could be recorded to Mainnet?
The core idea of channels developed into a full-on, hyper-engineered solution. The way channels are described often ends up quite abstract; I’ll try my best to Make It Make Sense:
A smart contract is deployed to the blockchain, like normal. This contract states, generally:
🎆 The identities (addresses) of the parties who can transact within the bounds of the contract
🎇 What sorts of actions they can take in the context of the contract
✨ How much of a deposit the parties are putting on Mainnet, both as a surety, and as resources available to them in the context of the contract
🌟 The assets to be transferred, and the maximum amounts to be transferred on Mainnet (if any) in the event of the closure of the channel
This contract is then run off of Mainnet, in an EVM environment of the participants’ choosing.
For example, running an Ethereum client on a server to which the participants can connect. Think of this as running your own private Ethereum-compatible network, where the only transactions are those made by the participants.
The participants perform as many actions as they would like, sending transactions all the while, through the contract, in order to interact with one another.
A lot of explainers out there use the example of each transaction representing “moves in a chess game”, or “friends sharing expenses”.
When the activity is finalized, the participants submit the final state–what the balances are of each of their accounts, for example–to the blockchain.
At this point, the smart contract in question updates the global state of the network, the deposit is split up among the participants according to their ending balances, and the channel is closed.
In a way, a channel is a bit like a rollup: taking any number of transactions which happen “off chain”--that is, not recorded to the blockchain in question–and then submitting the final result of all of those to the chain.
This has interesting implications for privacy, as you can imagine: “Let us do all the transacting we’d like between us; we’ll tell you what the final balance is, but you don’t need to know what happened in between the beginning and the end.”
The problem with channels? For a scaling solution, they don’t scale very well.
Depending on what you want to do with this channel, you may need to do a lot of manual configuration or programming. What is your off-chain environment, and how will you manage access to it? What’s your use case? You’ll need to make a different smart contract for each one. Oh, and—there are no bugs in your contracts, right?
Enter generalized state channels:
A state channel builds off of the above, and takes it a step further. State channels allow you to represent a significant amount of the state of a given blockchain, and transact with it… off-chain. In other words, in a blockchain environment that’s not really a blockchain.
This allows you to have a lot of the contracts, dapps, and other infrastructure already deployed on Mainnet, without having to rebuild it all from scratch. You could think of it like “working offline” in something like Google Docs, then uploading the final version of your work when you reconnect.
This is an area of ongoing research.
This is where our story starts to get really crypto.
So, you’ve got some environment where you can do blockchain stuff, but it’s not the blockchain. Is it real?
On that non-blockchain, is ETH a different color? Does everyone have eight Bored Apes, and they’re all worth a million dollars? It sounds like some sort of alternate reality.
And so, it came to pass that this non-state, this maybe-state, this Schröedinger’s Blockchain, came to be referred to as having a counterfactual state of existence.
Not content with leaving a banger of a brand name like that on the table, L4 Ventures founded a project called, you guessed it, Counterfactual, destined to be one of, if not the, definitive scaling solution for Ethereum.
…or not. Again, we’re dealing with indeterminacy here.
Currently, Counterfactual’s website exists, but DNS can’t find it.

I mean, on a certain level, Counterfactual underwent a state transition of its own, and became the more descriptively-named State Channels.
But if you’re trying to find their white paper, lauded and pointed to in every damn blog post ever made about the thing, you’re going to come away empty-handed.

But if you dig deep enough, there is a white paper, in some sort of gray area.
You may have started out looking for a shiny .pdf that you can open up, and read about exciting technical developments: but what you’ll end up finding is a repository from which you can build the .pdf locally by installing docker and running an image in it.
(Go ahead, try the instructions in the README; either CircleCI has changed since they were written, or you have to be a member of the repo, or I am too dumb for git)
It’s a .pdf, a completely Portable Document Format, but in a sort of virtual environment; a container or box, if you will, within which the document can be created, so long as you press the right button.
Does the white paper exist without us willing it to?
Fortunately, there was a post made on a more accessible medium, the Ethereum Research forums. It gets straight to the heart of the matter, answering the question “What does ‘counterfactual’ mean?”:

Here we have something close to the genesis of the way this term has been used since—to great effect by Dan Finlay in his work on object capabilities and delegations, and in a somehow simultaneously more technically challenging, verbally abusive, and vicariously inebriating way, by SpankChain.
I had to digest all this, let it assimilate into my mental models, and come back to reading about the ways it’s being applied currently, in the context of smart contract accounts, before it really started to make sense.
The way I parse it is this, and smarter people than I have said “yeah sure” when I run it by them:
If you see “counterfactual”, you can translate it in your mind as “off-chain”, without a significant loss of meaning. The Ethereum Research post above neatly details the nuances to which ‘counterfactual’ refers, which are not contained by ‘off-chain’. You can think of those as implementation details, if it helps. 🥴
Based on what we’ve seen above, it is asserting on-chain reality.
A counterfactual asset is one that, regardless of its actual state, we have to treat like a pissed-off cat armed with a canister full of nuclear gas, and just go ahead and say it exists.
~ * FIN * ~
Oh, and before you go:
If you’re going to write two blog posts for the entire duration of your company… I suppose these two aren’t bad ones for the history books:

Counterfactual: Generalized State Channels, Ethereum Research https://ethresear.ch/t/counterfactual-generalized-state-channels/2223
Counterfactual, website 💀 : http://counterfactual.com/
Delegatable, repository: https://github.com/delegatable/delegatable-eth
L4, Medium channel: https://medium.com/@l4v
Introducing Delegatable Ethereum, Dan Finlay: https://mirror.xyz/0x55e2780588aa5000F464f700D2676fD0a22Ee160/pTIrlopsSUvWAbnq1qJDNKU1pGNLP8VEn1H8DSVcvXM
A State Channels Adventure with Counterfactual Rick! (Part 1), SpankChain; content warning: not recommended for those early in sobriety https://medium.com/spankchain/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea
State Channels, website: https://statechannels.org/
Thank you to kumavis and McOso for factual checks, corrections, and first draft readthrough 💖
Thank you to lizzybeth.eth for tolerating me while I did this research, and for helping me explain it in words that connect to reality 💞
Off-chain transactions can get really gnarly if you try to execute another transaction from the same account that signed something off-chain before that off-chain transaction has been recorded on chain.
The off-chain transaction, properly formed and signed, occupies a nonce value in that account’s transaction history. You can’t jump straight from transaction 41 to transaction 43.
Regarding using Counterfactual as a brand name: In Case You Missed It, crypto as a whole likes to phrase things in ways that are edgy, enigmatic, and positions them in a way to be “against” something else.
For a more in-depth look at this, see my talk from Devcon VI, which I was told was actually quite funny (you can hear people laugh!)
One of the core promises of public blockchain technology is that truth is objective: if it’s on-chain, anyone can confirm its existence.
Naturally, that means that at a certain point, someone asked the question: what if it could be off chain, and we could still confirm its existence?
To be clear, that common reality or objective truth is still the goal, at least for now.
But in the face of rising transaction costs on Ethereum Mainnet, people began to get innovative in figuring out how to do enforceable things on chain, except not.
This incentive introduced one innovation after another, broadly referred to as “scaling solutions” by the Ethereum Foundation. One solution which is very loud in our community is that of rollups, which have the benefit of claiming all the security of Ethereum, with as much transaction throughput as they can manage.
But there were other ideas: ideas which didn’t just solve for cheapness or speed, but also for privacy and flexibility.
One of these was using a very basic tool: a signed transaction… that isn’t broadcast and recorded to the blockchain… yet.
This is what’s known as an “off-chain transaction”. The most immediate and widely-known example of this is probably that used by hardware wallets.
With a hardware wallet, your Secret Recovery Phrase, or whatever form your private key takes, is stored on a digital device of some kind. This device is kept isolated from the Internet, in order to reduce the likelihood of attack.
The duly authorized user, however, is capable of transferring an unsigned transaction to the wallet, signing it, and transferring it back to an Internet-connected machine, which can then broadcast that transaction to the network. Thus, the transaction is recorded, and objectively exists.
What happens, though, during that time that the transaction has been signed, but not yet broadcast? Does it exist? Is it a valid transaction? It’s signed, it’s primed, it’s “live”: it just hasn’t been broadcast yet. (See the “Notes” section for more on this.)
In this sense, an off-chain transaction is a situation where you’ve got a key that is signing transactions in an environment that isn’t directly connected to Mainnet. No gas fees! Sign all you want!
How do we take that cheap, flexible power, and make it into something that scales, and is eventually settled on chain? What if we made some sort of… channel through which off-chain activity could be recorded to Mainnet?
The core idea of channels developed into a full-on, hyper-engineered solution. The way channels are described often ends up quite abstract; I’ll try my best to Make It Make Sense:
A smart contract is deployed to the blockchain, like normal. This contract states, generally:
🎆 The identities (addresses) of the parties who can transact within the bounds of the contract
🎇 What sorts of actions they can take in the context of the contract
✨ How much of a deposit the parties are putting on Mainnet, both as a surety, and as resources available to them in the context of the contract
🌟 The assets to be transferred, and the maximum amounts to be transferred on Mainnet (if any) in the event of the closure of the channel
This contract is then run off of Mainnet, in an EVM environment of the participants’ choosing.
For example, running an Ethereum client on a server to which the participants can connect. Think of this as running your own private Ethereum-compatible network, where the only transactions are those made by the participants.
The participants perform as many actions as they would like, sending transactions all the while, through the contract, in order to interact with one another.
A lot of explainers out there use the example of each transaction representing “moves in a chess game”, or “friends sharing expenses”.
When the activity is finalized, the participants submit the final state–what the balances are of each of their accounts, for example–to the blockchain.
At this point, the smart contract in question updates the global state of the network, the deposit is split up among the participants according to their ending balances, and the channel is closed.
In a way, a channel is a bit like a rollup: taking any number of transactions which happen “off chain”--that is, not recorded to the blockchain in question–and then submitting the final result of all of those to the chain.
This has interesting implications for privacy, as you can imagine: “Let us do all the transacting we’d like between us; we’ll tell you what the final balance is, but you don’t need to know what happened in between the beginning and the end.”
The problem with channels? For a scaling solution, they don’t scale very well.
Depending on what you want to do with this channel, you may need to do a lot of manual configuration or programming. What is your off-chain environment, and how will you manage access to it? What’s your use case? You’ll need to make a different smart contract for each one. Oh, and—there are no bugs in your contracts, right?
Enter generalized state channels:
A state channel builds off of the above, and takes it a step further. State channels allow you to represent a significant amount of the state of a given blockchain, and transact with it… off-chain. In other words, in a blockchain environment that’s not really a blockchain.
This allows you to have a lot of the contracts, dapps, and other infrastructure already deployed on Mainnet, without having to rebuild it all from scratch. You could think of it like “working offline” in something like Google Docs, then uploading the final version of your work when you reconnect.
This is an area of ongoing research.
This is where our story starts to get really crypto.
So, you’ve got some environment where you can do blockchain stuff, but it’s not the blockchain. Is it real?
On that non-blockchain, is ETH a different color? Does everyone have eight Bored Apes, and they’re all worth a million dollars? It sounds like some sort of alternate reality.
And so, it came to pass that this non-state, this maybe-state, this Schröedinger’s Blockchain, came to be referred to as having a counterfactual state of existence.
Not content with leaving a banger of a brand name like that on the table, L4 Ventures founded a project called, you guessed it, Counterfactual, destined to be one of, if not the, definitive scaling solution for Ethereum.
…or not. Again, we’re dealing with indeterminacy here.
Currently, Counterfactual’s website exists, but DNS can’t find it.

I mean, on a certain level, Counterfactual underwent a state transition of its own, and became the more descriptively-named State Channels.
But if you’re trying to find their white paper, lauded and pointed to in every damn blog post ever made about the thing, you’re going to come away empty-handed.

But if you dig deep enough, there is a white paper, in some sort of gray area.
You may have started out looking for a shiny .pdf that you can open up, and read about exciting technical developments: but what you’ll end up finding is a repository from which you can build the .pdf locally by installing docker and running an image in it.
(Go ahead, try the instructions in the README; either CircleCI has changed since they were written, or you have to be a member of the repo, or I am too dumb for git)
It’s a .pdf, a completely Portable Document Format, but in a sort of virtual environment; a container or box, if you will, within which the document can be created, so long as you press the right button.
Does the white paper exist without us willing it to?
Fortunately, there was a post made on a more accessible medium, the Ethereum Research forums. It gets straight to the heart of the matter, answering the question “What does ‘counterfactual’ mean?”:

Here we have something close to the genesis of the way this term has been used since—to great effect by Dan Finlay in his work on object capabilities and delegations, and in a somehow simultaneously more technically challenging, verbally abusive, and vicariously inebriating way, by SpankChain.
I had to digest all this, let it assimilate into my mental models, and come back to reading about the ways it’s being applied currently, in the context of smart contract accounts, before it really started to make sense.
The way I parse it is this, and smarter people than I have said “yeah sure” when I run it by them:
If you see “counterfactual”, you can translate it in your mind as “off-chain”, without a significant loss of meaning. The Ethereum Research post above neatly details the nuances to which ‘counterfactual’ refers, which are not contained by ‘off-chain’. You can think of those as implementation details, if it helps. 🥴
Based on what we’ve seen above, it is asserting on-chain reality.
A counterfactual asset is one that, regardless of its actual state, we have to treat like a pissed-off cat armed with a canister full of nuclear gas, and just go ahead and say it exists.
~ * FIN * ~
Oh, and before you go:
If you’re going to write two blog posts for the entire duration of your company… I suppose these two aren’t bad ones for the history books:

Counterfactual: Generalized State Channels, Ethereum Research https://ethresear.ch/t/counterfactual-generalized-state-channels/2223
Counterfactual, website 💀 : http://counterfactual.com/
Delegatable, repository: https://github.com/delegatable/delegatable-eth
L4, Medium channel: https://medium.com/@l4v
Introducing Delegatable Ethereum, Dan Finlay: https://mirror.xyz/0x55e2780588aa5000F464f700D2676fD0a22Ee160/pTIrlopsSUvWAbnq1qJDNKU1pGNLP8VEn1H8DSVcvXM
A State Channels Adventure with Counterfactual Rick! (Part 1), SpankChain; content warning: not recommended for those early in sobriety https://medium.com/spankchain/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea
State Channels, website: https://statechannels.org/
Thank you to kumavis and McOso for factual checks, corrections, and first draft readthrough 💖
Thank you to lizzybeth.eth for tolerating me while I did this research, and for helping me explain it in words that connect to reality 💞
Off-chain transactions can get really gnarly if you try to execute another transaction from the same account that signed something off-chain before that off-chain transaction has been recorded on chain.
The off-chain transaction, properly formed and signed, occupies a nonce value in that account’s transaction history. You can’t jump straight from transaction 41 to transaction 43.
Regarding using Counterfactual as a brand name: In Case You Missed It, crypto as a whole likes to phrase things in ways that are edgy, enigmatic, and positions them in a way to be “against” something else.
For a more in-depth look at this, see my talk from Devcon VI, which I was told was actually quite funny (you can hear people laugh!)
No activity yet