11 minute read

This story was inspired by How Rollups actually actually actually work, by Jon Charbonneau, which was inspired by How Rollups actually actually work, by Toghrul Maharramov, which was inspired by How Rollups actually work, by Kelvin Fichter.

drawing drawing drawing


drawing

Borinkski. This better be important.

drawing

Sir, we have a big problem.

drawing

Okay. Well get on with it.

drawing

Jelly Finance got hacked. There was a vulnerability in one of the contracts.

drawing

Fuck. Which contract? Not the liquid staking...

drawing

It's the liquid staking.

drawing

Shit. When?

drawing

Started about 10 minutes ago. They’re still draining accounts. The Jelly team is trying to patch the contract, but they can't get the transactions to post. The attacker's still draining funds and everyone is trying to pull out. The chain is all bogged down.

drawing

What’s the damage?

drawing

We’re still analyzing. Two billion at least. Losses are still climbing.

drawing drawing


drawing

Give me an upper bound. What’s the TVL in those contracts?

drawing

30 billion.

drawing

Fucking hell. I warned the Jelly team about this bullshit. They're too careless. They have no regard for security. Did we post those transactions to the L1 yet?

drawing

I don't know. Patrick, can you check on that?

drawing

Hasn’t posted yet. Next update is in 5 min--

drawing

Shut it down. Shut down the sequencer.

drawing

Shut it down? Are you... sure?

drawing

Shut it down.

drawing

Okay, it's just... X is gonna have a field day with this. They already give us a hard time about the centralized sequencer. When they find out we intentionally shut it down...

drawing

That's the least of our worries. If those transactions post, we can’t roll back anymore. We need to keep our options open. Shut it down.

drawing

Roll back? You can’t be serious. What about the transactions that aren't involved in the hack?

drawing

They haven’t posted to the L1. They’re not finalized.

drawing

Well, technically, yeah, but we’ve never rolled back anything. Our users trust the preconfirmations. They don’t wait for the L1.

drawing

Judith. We can debate the rollback later. Shut down the sequencer.

drawing

Patrick, can you handle that?

drawing

I'm trying. I don’t have access. There's a lot of security guardrails on this machine. I need Jill to approve the SSH request. She's on vacation.

drawing

Gah. Are you kidding me? Patrick, how long do we have?

drawing

3 minutes.

drawing

Page everyone. Get me the data center. We need someone on-site, now. Do not let those transactions post.

drawing

I'm paging the data center now.

drawing

Bulldoze the building. I don't care how you do it. Turn the sequencer off.

drawing

We've got about 1 minute, 20 seconds.

drawing drawing drawing


drawing

Where's the damn N.O.C. rep? What the fuck do we pay them for?

drawing

Hey this is Jack over at--

drawing

Jack, you're at the data center?

drawing

Yeah.

drawing

Jack, we need you to kill our sequencer, immediately. Pull the plug, and we need it done in the next 30 seconds.

drawing

Guys, you know I can't do that. I can't even prove this call is authentic. They got these AI voice clone th--.

drawing

Listen to me, Jack. There's been a major hack. Look it up. It's all over X. If you don't kill that server in the next 30 seconds, billions of dollars are going to go down the fucking shitter! You're the only person that can stop it.

drawing drawing


drawing

Now, Jack!

drawing drawing drawing
drawing drawing drawing


drawing

Patrick. Time check.

drawing

Hard to say. Less than a minute. Seconds, maybe.

drawing

Hurry up, Jack. Nuke everything.

drawing
drawing

Jack. Did you kill it?

drawing drawing


drawing

Yeah. I got it.

drawing

Patrick, can you confirm we're down?

drawing

One sec, let me refresh... Yeah, stats are flatlined. Can someone open up their wallet and try a test transaction?

drawing

Never mind that. Patrick, check the L1. Did we kill it before the update?

drawing

Hold on, I’m checking....

drawing drawing drawing


drawing

Oh fuck. It posted.

drawing

Are you fuckin' with me?

drawing

No. The transactions posted to the L1. I can send you the hash.

drawing

Fuck.

drawing

There's a user on X that calculated the losses. It’s almost 25 billion. As far as I can tell, the calculations seem right.

drawing

Holy shit.

drawing

It's blowing up. Everybody’s saying roll back. We need to prepare a statement.

drawing

Can we call Vitalik? What if they roll back the L1?

drawing

It’ll never happen. Judith... How much value is locked in the bridge contract on the L1?

drawing

Let me see... Looks like about 4 billion.

drawing

Jesus. Okay. Everyone grab some coffee. It’s going to be a long night. What we’re about to do is something we said could never happen. Everybody take a minute. I’m gonna step outside. I need a cigarette.

drawing drawing drawing
drawing drawing drawing


drawing

Okay. Here’s where things stand. 25 billion was lost in the hack. Unfortunately, those transactions have already posted to the L1, and that's going to make this rollback very complicated. The cascading impacts of this are something I'm still wrapping my head around.

drawing

I mean, we can't roll back anymore, right?

drawing

Yes we can.

drawing

What do you mean? The bridge contract on the L1 is immutable. It won’t let us revert to an older block. We can’t roll back once we post to the L1. You said it yourself.

drawing

I know what I said, but that was before I knew the full extent of the losses. We can roll back, it's just going to be extremely painful. The L1 bridge can't roll back with us, and so we're going to have to fork away from the L1.

drawing

Fork away? What do you mean?

drawing

What I mean is that the L1 bridge will have one view of the chain, which is not rolled back, and our sequencer is going to have a completely different view... a fork. On our fork, we will perform the rollback. This fork will be completely disconnected from the L1 bridge.

drawing

What? We can’t fork away from the bridge. We’re a rollup. It’s in our whitepaper. We’re an L2. Ethereum is the source of truth.

drawing

I know what’s in the whitepaper, Judith — I wrote it. But this isn’t up to us. We’re a decentralized blockchain. Things are decided by social consensus.

drawing

Sounds to me like you're deciding.

drawing

I'm not. We’re going to launch two sequencers. One sequencer will have the rollback, and one won’t. The community will determine which chain is canonical, but based on the losses we’re looking at, I'm certain the rollback fork is going to win.

drawing

How do you know?

drawing

Because it's happened before. In 2016, there was a hack on Ethereum and the chain rolled back. Our losses are bigger than that. 20% of all the value on chain was just hacked.

drawing

There were no L2s or bridges back then. We can’t fork away from the L1. We’re an L2 — An extension of Ethereum.

drawing

You wanna know what happens if we don’t give the users a rollback option? Someone in the community is going to launch an alternate sequencer, a sequencer that has the rollback, and that sequencer will become the canonical chain. There's nothing we can do to stop the rollback. The sooner we accept that, the better. If we fight this, we will lose our sequencer and all the transaction fees that go along with it, and we all better start looking for new work. Running the sequencer is a privilege, not a right, and I have no intention of losing that privilege.

drawing

I’m still confused. There’s a bunch of ETH locked in the bridge contract, right? If our fork isn’t connected to the bridge, how will people get their ETH out?

drawing

The users will have wrapped ETH on both forks. They can use the fork that is connected to the bridge to redeem their ETH on the L1.

drawing

So what about the wrapped ETH on our fork?

drawing

It’s worthless. It’s not connected to the bridge. It’s not backed up by anything.

drawing

If the tokens on our fork have no value, why are we doing this?

drawing

Not all the tokens on our fork are worthless. This only applies to the wrapped tokens — The L1 tokens locked in the bridge. Those bridged tokens live on Ethereum, and so they have no value if you can’t redeem them on the L1. All the other tokens — Our native token, our NFTs, our ERC20 tokens... Those tokens live on our chain. They will only have value on our fork.

drawing

But all the tokens will exist on both forks, right?

drawing

Right. All the tokens will exist on both forks, but the wrapped tokens will have no value on our fork, and our native tokens will have no value on the bridge fork.

drawing

I’m trying to wrap my head around this... You’re saying that all the tokens will exist in both forks, but each token will only have value on a single fork.

drawing

Right. The tokens can't have value on both forks. It's not like we can all just double our money by forking.

drawing

So the users' funds are all safe?

drawing

Yes.

drawing

Not exactly.

drawing

What do you mean, Patrick? What funds aren't safe?

drawing

Well, let’s say I own wrapped ETH. My wrapped ETH is safe, because I can pull it out on the bridge fork.

drawing

Right.

drawing

But I also have wrapped ETH on our fork, right?

drawing

Right. The wrapped ETH on our fork is worthless, but that's fine. You have your value on the bridge fork.

drawing

Yeah, but then on our fork, I can still use a DEX to swap the worthless wrapped ETH for a native token. Now I have the valuable ETH on the bridge fork, but I also have valuable native tokens on our fork. I doubled up.

drawing

Ah, Shit. Yeah. Patrick is right.

drawing

It’s not like everyone can just double their money though, right? Someone’s gotta hold the bag here.

drawing

Yeah, it’s the liquidity providers. People are going to remove all the valuable tokens from the liquidity pools. If you’re providing liquidity in one of these pools, you’re gonna get cooked by divergence loss.

drawing

Yes, but this only applies to pools where the trading pair is one native asset and one wrapped asset. If the assets in the pool are both native, or both wrapped, you should be fine. For pools that have one native asset and one wrapped asset, they're straddling the fork, so they're exposed on both forks. Each fork will have one useless asset in the pool, and one valuable one.

drawing

We can’t let that happen, right?

drawing

There’s nothing we can do about it. This is the risk you take when you provide liquidity.

drawing

You're saying they signed up for this?! We told them we were part of Ethereum. We said this kind of thing was impossible!

drawing

Listen. Like I said before, there's nothing we can do to stop this fork. There's 25 billion dollars in the hack, and there's only 4 billion L1 assets locked in the bridge. The majority of those wrapped assets are safe. Yes, some of those funds are in these liquidity pools, and there's nothing we can do about that. This fork is happening. If I were a liquidity provider, I would exit these pools as quickly as possible.

drawing

Even if they want to get out, it's gonna be hard to get the transactions through. There’s going to be a frenzy of activity when we turn on the sequencers. The congestion will be insane. The sharks are going to use lending protocols to borrow whatever assets they need to drain these pools. The pools will be empty in minutes. I have half a mind to do it myself. If someone's gonna slaughter them anyway, might as well be us.

drawing

Patrick... you better--

drawing

Just kidding, geez. Come to think of it, it’s not just the liquidity pools, either. Any contract that lets you exchange native tokens and wrapped tokens is exposed.

drawing

That's just the liquidity pools, right?

drawing

No. Like imagine you have an NFT listed for sale for 1 wrapped ETH. That NFT will live on our fork, but the wrapped ETH is worthless there, so anybody can buy your NFT for almost nothing.

drawing

Ah, yeah. That's right. Those are at risk as well. That's a much smaller market though, compared to the liquidity pools.

drawing

I have an idea. What if we give all these exposed people a chance to get out?

drawing

How?

drawing

Well, we know the sharks are going to try to drain the liquidity pools. What if we disallow any trading in these pools for a short period? We can give the liquidity providers a chance to exit the pools first. During the grace period, the sequencer will only accept requests to exit those liquidity pools.

drawing

It’s a good idea. Ethically, it's the right thing to do. Unfortunately, though, we can't.

drawing

Why?

drawing

Because what you’re talking about is censorship. Once we censor transactions, we will lose all trust from our users.

drawing

We need to act fast here. Patrick, I want you to work on launching the new sequencer. Work with Jelly to patch the fucking bug in their contract first. We'll also need to create a new L1 bridge for the new sequencer.

drawing

Judith, prepare comms. We should encourage the users to withdraw their ETH from the bridge fork, and then send those funds to the new bridge that's connected to our fork. Make sure the users understand that there was no exploit in our chain. The problem was an exploit in the Jelly Finance contract. Loop in the team at Circle and any other stablecoin issuers. Their tokens will exist on both forks, but only the tokens on our fork will be backed up by the issuer.

Updated: