<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Gets</title>
        <link>https://paragraph.com/@gets</link>
        <description>undefined</description>
        <lastBuildDate>Wed, 15 Apr 2026 02:16:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Gets</title>
            <url>https://storage.googleapis.com/papyrus_images/a91c519a84295dcc6ea7a861ae0dab4ba2e7d1d5db6d0d10df80b796376d059e.jpg</url>
            <link>https://paragraph.com/@gets</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[That’s that me Espresso]]></title>
            <link>https://paragraph.com/@gets/that-s-that-me-espresso</link>
            <guid>xM7QKFqUoTuUwHvAHjLX</guid>
            <pubDate>Mon, 14 Apr 2025 15:07:49 GMT</pubDate>
            <description><![CDATA[Thanks to Ellie Davidson and Luca Donno for review! I’ve seen a lot of chatter recently concerning two distinct topics that in reality couldn’t be more related.Why is bridging between L2s so slow in some cases? And why does it take so long to deposit from L2s to centralized exchanges (CEXs)? And;What exactly is Espresso? Is it a beverage? A hit song by Sabrina Carpenter? The solution to slow bridge and deposit times? (Spoiler: it’s all of those!)To understand the answer to these questions we ...]]></description>
            <content:encoded><![CDATA[<p><em>Thanks to </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/ellierdavidson"><em>Ellie Davidson</em></a><em> and </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/donnoh_eth"><em>Luca Donno</em></a><em> for review!</em></p><p>I’ve seen a lot of chatter recently concerning two distinct topics that in reality couldn’t be more related.</p><ol><li><p>Why is bridging between L2s so slow in some cases? And why does it take so long to deposit from L2s to centralized exchanges (CEXs)? And;</p></li><li><p>What exactly is Espresso? Is it a beverage? A hit song by Sabrina Carpenter? The solution to slow bridge and deposit times? (Spoiler: it’s all of those!)</p></li></ol><p>To understand the answer to these questions we need to go back to a time before pump.fun shitters and trench warriors, before CryptoKitties and DAO hacks.</p><p>We need to go back to the beginning of cryptocurrency, and really even before that. It concerns the double-spend problem.</p><h2 id="h-the-cypherpunks" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Cypherpunks</h2><p>A good place to start this exploration is where arguably the modern cryptocurrency movement began: the cypherpunk mailing list. Back in the early 90s, a group of three legendary computer scientists started this group under the belief that we would soon need to defend some of our most important rights online: sovereignty, privacy, and freedom.</p><p>The names of the three are: John Gilmore (one of the founders of the Electronic Frontier Foundation, or EFF), Eric Hughes (author of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.activism.net/cypherpunk/manifesto.html"><em>A Cypherpunk’s Manifesto</em></a>) and Timothy C. May (author of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://groups.csail.mit.edu/mac/classes/6.805/articles/crypto/cypherpunks/may-crypto-manifesto.html"><em>The Crypto Anarchist Manifesto</em></a>)</p><p>They took seriously the possibility that much of human interaction would move into the digital world, and foresaw the potential threats to personal freedom this new reality would create. To avoid serfdom, they knew people would need to remain in control of their own destiny, both offline and online.</p><p>Given the state of the internet in the early 90s, this must have taken incredible foresight. Need I remind you that in 1998 the Nobel Laureate in economics, Paul Krugman, wrote: “By 2005 or so, it will become clear that the Internet’s impact on the economy has been no greater than the fax machine’s.”</p><p>Perhaps it was our cypherpunk friends who deserved the Nobel Prize all along!</p><p>One of the cypherpunks’ key insights was that we needed a digital alternative to cash. Private ownership and free enterprise (under the constraints of sensible legislation and social security) had proven to be among the largest forces for progress the world had ever seen.</p><p>Yet the cypherpunks realized that we stood to lose much of what had been gained in this area if all activity on the internet were to be controlled by authoritarian governments and monopolists.</p><p>If they could determine which individuals could trade online, and with which counterparties, and up to what amounts they could spend, then in effect the internet would be owned by those powerful entities, leaving little old us in the position of digital serfs.</p><p>Thus it was paramount to build a system for transferring value online that wasn’t reliant on third parties. This new system had to empower individuals to take actions they deemed appropriate, without requiring permission from big brother.</p><p>Hal Finney, receiver of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.guinnessworldrecords.com/world-records/696243-first-bitcoin-transaction">the first Bitcoin transaction ever</a> (and possibly the mastermind behind Bitcoin), was another legendary member of the cypherpunk mailing list. He had a keen interest in digital cash and published at length about potential problems with creating a functional version of it.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aa52fb23e9fbf32a53ba5a5ae8c9eaf57b31a215a413d5d0a1d0e5a19eb4e33a.png" alt="They should have given Hal Finney the Nobel Prize" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">They should have given Hal Finney the Nobel Prize</figcaption></figure><p>Possibly the largest issue he identified was the double-spend problem. In the words of Finney: “The big issue in digital cash is double-spending. Someone could send the same piece of cash to more than one seller.”</p><p>In other words, double-spending allows a person to infinitely inflate the money supply by spending the same money as many times as they’d like.</p><p>In the centralized setting it is rather trivial to solve this problem. We simply rely on a trusted authority to keep a ledger that tracks what money has been spent, as well as which parties were involved in a specific transaction.</p><p>But Hal Finney and the other cypherpunks were dreaming of escaping the grasps of authorities and helping individuals take charge of their own destiny. This meant that a truly functional version of digital cash needed to have certain properties, most importantly:</p><ol><li><p>Decentralization, to avoid single points of failure and protect against attempts to shut the project down.</p></li><li><p>Privacy, so that people can choose what to spend their money on without fear of repercussions.</p></li><li><p>Censorship resistance, to ensure that people’s background and social class would bear no influence on their ability to access the system.</p></li><li><p>Prevent double-spending, so that people could trust the money they received was legitimate.</p></li></ol><p>Many attempts were made to implement these features over the years. And much innovation took place alongside those attempts.</p><p>In 1989, David Chaum founded <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chaum.com/ecash/">DigiCash</a>, which allowed people to withdraw ‘cash’ from their bank accounts directly to their PCs hard drive. It could then be spent anonymously, much like withdrawing cash from an ATM and using it in the physical world! A centralized mint authority would ensure that money couldn’t be double spent by keeping track of all transactions.</p><p>In 1994, they successfully completed the first electronic cash payment over computer networks, decades before modern stablecoins became a thing. However, just a few years later, in 1998, DigiCash would go bankrupt.</p><p>This proved why decentralization was such an important property to strive for in a future version of digital money. If a company going bankrupt could cause the system to fail, then that system could never survive in the face of powerful adversaries.</p><h2 id="h-the-introduction-of-bitcoin" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The introduction of Bitcoin</h2><p>Following Digicash, a number of important innovations would culminate in the pseudonymous Satoshi Nakamoto posting their <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bitcoin.org/bitcoin.pdf">Bitcoin Whitepaper</a> to the Cryptography mailing list (this was slightly different from the cypherpunk mailing list, though it did have some overlap between participants).</p><p>With the introduction of Bitcoin, there was for the first time a decentralized system for payments that was secure against double-spending. A system that was accessible to all and was free from overreaching authorities. The cypherpunks&apos; dream had at last been realized… *cough* If we ignore the lack of privacy at least *cough*.</p><p>Bitcoin solves the double-spending problem in a novel way. First it introduces its own currency, simply named Bitcoin:</p><ol><li><p>Each coin is represented as a chain of digital signatures.</p></li><li><p>A coin can be transferred by signing the hash of the previous transaction and the public key of the recipient, and adding these to the end of the coin.</p></li></ol><p>While this allows recipients to verify that whomever sent them their coins actually owned them, it doesn’t prevent double-spending on its own. For that, the recipient additionally needs to verify whether this was the first time the coins were spent.</p><p>In other words, anyone receiving a Bitcoin transaction needs to be aware of the entire history of Bitcoin transactions in order to check if a coin was spent prior to them receiving it. And because Bitcoin is decentralized, we need a way to agree on what the correct history of transactions is without relying on a trusted authority.</p><p>The solution that Satoshi proposed was a <em>distributed timestamp server</em>, or what is now better known as a Proof-of-Work blockchain. Anyone can participate in this network by sending transactions or running a node. It works as follows:</p><ol><li><p>Users broadcast their transactions publicly to all nodes.</p></li><li><p>These transactions are bundled into a block by the block proposer.</p><ol><li><p>Blocks contain the block size, a list of transactions and a transaction counter, and a block header.</p><ol><li><p>The block header consists of the blockchain software version, the previous block&apos;s hash, the Merkle Root, a timestamp, the difficulty target, and the nonce.</p></li></ol></li><li><p>Anyone can become the block proposer by incrementing a nonce until they find a hash that starts with sufficiently many 0s as determined by the difficulty target. This activity is called Proof-of-Work, or PoW.</p><ol><li><p>The amount of 0s required is adjusted frequently, so that the time to find the correct hash remains close to 10 minutes, regardless of the overall hashrate.</p></li></ol></li></ol></li><li><p>The block proposer will broadcast their block to all other nodes once they’ve found the correct nonce.</p></li><li><p>The other nodes will only accept the block if all the transactions are valid and not double-spent.</p></li><li><p>Nodes will express their acceptance of this block by using its hash as the previous block hash in the next block they propose.</p></li></ol><p>In this manner, we ensure that everyone can agree on the history of the Bitcoin blockchain, as each block refers to the previous block. Because we agree on the history, we can also verify that no transaction included in the chain has been spent before.</p><p>There is however one remaining issue. Imagine wanting to accept a Bitcoin transaction, tx1, in order to sell a pizza. We verify that tx1 has been included in block N. We now know for a fact that tx1 can’t have been double spent. It&apos;s however still not safe to immediately accept this transaction.</p><p>Recall that the Bitcoin chain is built by subsequent blocks all referring to the previous block. And a block can only be added through PoW. Nothing here guarantees that block N will remain part of the future Bitcoin blockchain.</p><p>For example, an attacker can create block N’ in parallel to block N and not include tx1 in block N’. If the subsequent blocks are then built on top of block N’ instead of block N, i.e block N’+1, block N’+2, etc, the Bitcoin blockchain will end up in a state that excludes block N, and thereby tx1 as well. This act of removing a block from the chain and inserting another is known as a reorganization, or reorg.</p><p>This means that if we accepted tx1 immediately upon seeing it in block N, the attacker would have effectively double spent tx1 against us, and we’d have sold them a pizza for free! Just imagine the alternate universe where the headline reads “<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.bitcoin.it/wiki/Laszlo_Hanyecz">Laszlo Hanyecz</a> scammed me out of 10.000 Bitcoin by reorging the Bitcoin blockchain!”</p><p>So at what point should we then consider it safe to accept a transaction? According to math™, and assuming the attacker controls less than 51% of the network’s hashrate, we know that every time a block is built on top of the chain that includes block N, it becomes exponentially harder to reorg the chain to exclude block N.</p><p>Just waiting a few blocks therefore makes it probabilistically very difficult for an attacker to cause a double-spend via a reorg. Another way of thinking about this is in terms of <em>finality guarantees</em>: the guarantee that a transaction wont revert.</p><p>In Bitcoin, the finality guarantee is that if an attacker controls less than 51% of the network’s hashrate, then the odds of successfully reverting a transaction drop exponentially each block.</p><p>In other words, Bitcoin’s finality guarantee grows stronger with each passing block, assuming no one controls 51% of the hashrate. Though because there always remains a tiny chance a block could reorg, we say that Bitcoin only has ‘probabilistic finality’.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/808d86b1efbdeef23687d2df6efdef4ad66e299d0c767937ebe7e60706d81547.png" alt="The probability formula for an attacker to successfully fork the Bitcoin chain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">The probability formula for an attacker to successfully fork the Bitcoin chain</figcaption></figure><p>For example, if the attacker controls 10% of the network’s hashrate, then at block N+1 they’d have a ~20% chance to replace it with block N’ and N’+1. But if we waited to accept the transaction till block N+6 the attackers odds drop all the way to 0.02%.</p><p>So to answer the question of how long we should wait to accept a Bitcoin transfer, that depends on two factors. First, how valuable was the transfer? And second, how much risk are you willing to take? Depending on the answer we can determine how many blocks to wait.</p><p>At this point you may be asking “Gets, this is all pretty interesting, but you promised to explain why bridging and CEX deposits can be so slow! Not to mention, you’re supposed to explain what Espresso is!”. This is a fair point, so let’s begin with CEXs and bridges. And I promise I’ll cover Espresso after that!</p><p>CEXs are by default very risk averse (or at least, they should be!). If they fall victim to a double-spend attack owing to a transaction reverting then they stand to lose customer funds. In the past, multiple exchanges have fallen victim to double-spending. Most famous were the repeated attacks against <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ccn.com/fools-gold-bitcoin-fork-faces-cryptocurrency-exchange-delisting-after-51-attack/">Bitcoin Gold</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.coinbase.com/en-fr/blog/coinbases-perspective-on-the-recent-ethereum-classic-etc-double-spend">Ethereum Classic</a>, which led to millions of dollars worth of double-spending.</p><p>For this reason, CEXs often take a conservative approach to accepting deposits. For a Bitcoin deposit most CEXs tend to wait ~6 blocks to honor a deposit. With blocks being published once every ~10 minutes, it can take close to an hour to deposit Bitcoin to a CEX. Though a more sensible approach may be to wait fewer blocks for smaller deposits.</p><h2 id="h-the-ghosts-in-ethereum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The ghosts in Ethereum</h2><p>Most people reading this have likely deposited to a CEX from Ethereum or one of its rollup chains. This can generally take up to ~13-15 minutes. The Ethereum block time however is only 12 seconds. And the block times of rollups can be as low as 0.2 seconds! (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/megaeth_labs/status/1903099481874153880">And soon even faster, s/o to MegaEth</a>)</p><p>So then why do exchanges wait such a long time to accept these deposits? To understand this we’ll need to understand the finality guarantees of Ethereum and, by extension, rollups. These differ quite a bit from Bitcoin’s.</p><p>First of all, Ethereum, and many rollup chains, do not track coins as a series of transaction outputs. Instead, individual accounts directly own balances of assets. A transaction simply subtracts the balance from the sender account, and adds the balance to the receiving account. Each account also includes a nonce that increments with every transaction, this ensures that the same transaction can’t be sent twice.</p><p>Reaching consensus also works differently in Ethereum. Rather than relying on Proof of Work, nodes can participate in the network by staking 32 ETH tokens. This process is referred to as ‘Proof-of-Stake’, or PoS, and we refer to the staked nodes as validators.</p><p>The validators run a consensus protocol called <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/gasper/">Gasper</a>, which is really a combination of two other protocols: LMD GHOST and Casper FFG. Taken together, these allow Ethereum validators to progress the chain and finalize blocks.</p><p>It’s worth noting that in Ethereum finality is not probabilistic. Instead Ethereum guarantees that as long as ⅔ of the validators are honest, a finalized block can never reorg. One exception is if the community decides to manually fork the chain, in what is known as a hard fork. Additionally, an attacker would have to burn ⅓ of the total stake to finalize a conflicting block. In this event, a hard fork may be used as a last resort to decide which finalized block is correct.</p><p>What follows is an overview of how blocks get added to the blockchain and finalized in Ethereum:</p><ol><li><p>‘Slots’ happen every 12 seconds.</p></li><li><p>‘Epochs’ happen every 32 slots. (~6.4 minutes)</p></li><li><p>Every epoch, the validator set is split into committees.</p></li><li><p>At least one committee is assigned to each slot within an epoch.</p></li><li><p>From the committee assigned to a slot, a single validator is assigned to propose a block of transactions to the network.</p><ol><li><p>An honest validator will propose their block to build on top of the chain with the most accumulated attestations.</p></li></ol></li><li><p>The other validators in that committee will broadcast an attestation to the network. An attestation can be seen as a vote consisting of:</p><ol><li><p>A vote for the current head of the chain. The head is the latest block that has been observed by the validator. Ideally this is the block that was just proposed in their slot.</p><ol><li><p>If there are multiple forks observed, the validator will vote for the head of the chain that has the most votes attached to it, as weighted by stake.</p></li><li><p>This allows us to assume that whichever fork we observe with the most votes by stake attached to it is the correct one.</p></li></ol></li><li><p>A vote for the most recent checkpoint that has been justified. (A checkpoint is justified if it has previously received votes from over ⅔ of the stake)</p></li><li><p>A vote for the next checkpoint to be justified. This is typically the first block in the current epoch as observed by the validator. If the first block of the epoch is missing, then the most recent prior block is chosen.</p></li><li><p>If validators submit multiple conflicting votes, they can be slashed.</p></li></ol></li><li><p>Once 32 slots have completed (one epoch), we can justify the next checkpoint if it has received attestations from over ⅔ of the stake.</p></li><li><p>Once the new checkpoint has been justified, we can finalize the justified checkpoint it was built on top of.</p></li><li><p>Finalizing a block thus requires ⅔ of stake to come to an agreement, making it impossible for an attacker to revert a finalized block without:</p><ol><li><p>Owning or manipulating two-thirds of the total staked ETH.</p></li><li><p>Destroying at least one-third of the total staked ETH (because they will be slashed for having voted on two conflicting finalized checkpoints).</p></li></ol></li></ol><p>It therefore takes at least 64 blocks, or ~12.8 minutes, to achieve Ethereum’s strongest finality guarantee. Namely, an attacker needs to burn ⅓ of the total staked Ethereum to finalize a conflicting block. This means it currently costs around $18B to attempt to double-spend a finalized transaction on Ethereum!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4ae7b88b0eb6adafadc7658692b5a5615908cbc40c68f247d3c3aa2c92a378bf.png" alt="WWIII security is not a meme" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">WWIII security is not a meme</figcaption></figure><p>But Ethereum also provides a weaker finality guarantee. As we just learnt, every slot, a subset of validators gets to vote on what they believe to be the latest head of the Ethereum chain. If they see multiple conflicting forks, then they will vote on the block that is part of the chain with the most votes attached to it.</p><p>In this manner, observing a block that is part of a chain with a lot of votes attached to it all but guarantees that future blocks will also be built on top of it. This means that in a similar fashion to Bitcoin, it becomes harder to revert a transaction the deeper its block is buried in the chain.</p><p>So a CEX once again has options for when to accept a deposit. They can wait for a block to be finalized, knowing that an attacker needs to burn billions of dollars to double-spend against them. Or they can choose to wait for the deposit transaction to be buried sufficiently deep in the Ethereum blockchain based on their own risk framework. In practice however, many CEXs wait for the block to be finalized, as they prefer the certainty it provides.</p><h2 id="h-do-rollups-practice-safe-cex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Do rollups practice safe CEX?</h2><p>As mentioned previously, Ethereum rollups in part share the finality guarantees of Ethereum. To understand this, let&apos;s briefly explore what an Ethereum rollup is. For our purposes, we will consider the following definition:</p><ol><li><p>A rollup is a standalone blockchain.</p></li><li><p>Transactions for this blockchain are sent to a centralized server called a sequencer.</p></li><li><p>The sequencer determines an ordering for these transactions and turns them into blocks.</p></li><li><p>The sequencer publishes the blocks for consumption and promises not to change their ordering after publication.</p></li><li><p>The sequencer will forward their blocks in batches to Ethereum.</p></li><li><p>Ethereum will include the rollup’s batches in an Ethereum block.</p></li><li><p>Ethereum will eventually finalize the block that included the rollup’s transaction batch.</p></li><li><p>The canonical rollup blockchain is determined by the batches that were finalized on Ethereum.</p></li></ol><p>In summary, the sequencer can make short-term promises about what the rollup chain looks like, but what is finalized on Ethereum will overrule the sequencer’s promise in the event of any discrepancies. The fact that the sequencer can give these short-term promises means rollup transactions have one additional finality guarantee as opposed to standard Ethereum transactions.</p><p>This new finality guarantee is often referred to as a ‘pre-confirmation’, or preconf. By this we simply mean that the sequencer promises that a transaction will end up in the eventual rollup chain, prior to the transaction being included in a batch that is finalized on Ethereum. We can observe that this preconf is entirely based on the reputation of the sequencer. There is no direct cryptographic or economic guarantee that the preconf will hold.</p><p>Relying on the sequencer for a preconf introduces a single point of failure. All it takes is for a single party to be compromised in order to break the finality guarantee. This could happen in many ways, whether by a rogue employee, or by a hacker with strong sympathies for their great leader.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1b8a7cc17f3163a5870eaad80516df7c2d0c9a9af793bba8c10d9e79aad00542.png" alt="What if our most valued sequencers are already compromised?!" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">What if our most valued sequencers are already compromised?!</figcaption></figure><p>This is exacerbated by the fact that many rollups today rely on the same party to run their sequencer, e.g. a Rollup as a Service provider (RaaS). If a single RaaS were to be compromised, the attacker could break the preconfs of all the rollups operated by that RaaS.</p><p>If a CEX were to accept a deposit from a rollup based on the sequencer’s preconf, they would take on two risks:</p><ol><li><p>The sequencer’s operator could lie and post a different batch to Ethereum that doesn’t include the deposit transaction.</p></li><li><p>A malicious actor could compromise the sequencer and post a different batch to Ethereum that doesn’t include the deposit transaction.</p></li></ol><p>To avoid the risk of being double-spent against by such attacks, CEXs typically wait for deposits from a rollup to be included in a batch that has been finalized on Ethereum. This is why it often takes a similar amount of time to deposit from a rollup to a CEX as it takes to deposit from Ethereum itself (~13-15 minutes).</p><p>The logic for why it can take a long time to bridge between Ethereum and its rollups is largely the same. To build this intuition, let&apos;s consider an attack on a very simple burn-and-mint bridge that allows us to move USDC between Arbitrum One and Base:</p><ol><li><p>Alice sends 100 USDC to a burn smart contract on Arbitrum One in block N.</p></li><li><p>The smart contract burns the 100 USDC tokens.</p></li><li><p>Alice presents the transaction that burnt her USDC to a mint smart contract on Base in block M.</p><ul><li><p>We assume that the smart contract on Base can verify this transaction was executed on the Arbitrum One blockchain in block N.</p></li></ul></li><li><p>The mint smart contract on Base mints 100 USDC tokens and sends these to Alice in block M+1.</p></li><li><p>Alice causes Arbitrum One to reorg, ending up in block N’. In this new fork she witholds her original burn transaction.</p></li><li><p>Result: Alice now has 100 USDC on Base while retaining her original 100 USDC on Arbitrum, thereby inflating the USDC supply, and supposedly pissing off Circle and other holders of USDC in the process.</p></li></ol><p>To prevent this from happening, bridges therefore may wait to honor a transaction until they are more confident a reorg can be avoided. Though certain bridge designs in use today do tend to trust centralized sequencers, they take on substantial risk. This was recently highlighted when <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theblock.co/post/293962/layer-3-degen-chain-hasnt-produced-a-block-in-11-hours">Degen Chain experienced a reorg</a>, causing issues for the Relay bridge.</p><p>The so-called ‘canonical bridges’ between rollups and Ethereum take their security to the most extreme level. Not only do they wait for Ethereum finality to avoid reorgs, they also ensure that no trusted party is required to verify that a transaction that withdraws assets from the rollup executed correctly.</p><p>This does mean that bridging with the canonical chain takes as long as it takes to perform the trust-minimized verification. For rollups that rely on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/l2beat/fraud-proof-wars-b0cb4d0f452a">fraud proofs</a> this can take up to 7 days. Using <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/2fa-zk-rollups-using-sgx/14462">zk-proofs and TEEs</a> instead can greatly speed things up, but may increase costs.</p><h2 id="h-adding-a-shot-of-espresso" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Adding a shot of Espresso</h2><p>Now that we know the basics of how rollups prevent reorgs that could lead to double-spending and how this may affect the time it may take to deposit to a CEX or bridge between rollups, it is finally time to explain what Espresso does. I promised we’d get to this!</p><p>At its core, Espresso is also a blockchain. Similar to Ethereum, nodes can participate in Espresso via PoS. Likewise, the staked nodes are referred to as validators. The validators run a consensus protocol called HotShot. <em>(Espresso’s validators are currently whitelisted, with permissionless PoS in testnet and planned for release later in 2025)</em></p><p>And like Gasper in Ethereum, HotShot allows validators to vote in order to finalize Espresso blocks. The way this works in HotShot is as follows:</p><ol><li><p>HotShot proceeds in a series of ‘views’.</p><ol><li><p>Views don’t have a fixed time frame. Instead, they can proceed as fast as the network allows.</p></li></ol></li><li><p>Each view, one validator is randomly chosen to be the leader and propose a block during that view. The leaders for each view are chosen ahead of time.</p></li><li><p>The leader either:</p><ol><li><p>Forms a quorum certificate, or QC, from the highest view they’ve observed, ideally this is from the previous view.</p><ol><li><p>A QC can be formed when ⅔ of the stake-weighted validators vote that a valid block was proposed in a given view.</p></li></ol></li><li><p>If they can&apos;t form a QC from the highest observed view, they will form a timeout certificate, or TC, for that view instead. Additionally, they will include a QC for the highest view in which they could successfully form a QC.</p><ol><li><p>A TC can be formed when ⅔ of the stake-weighted validators vote that no valid block was proposed within a specific timeframe for a given view.</p></li></ol></li></ol></li><li><p>The leader bundles transactions into a block and broadcasts it to the network. For efficiency, the block is erasure coded into shares, and validators receive shares proportional to their stake, as opposed to the full block. The shares are divided in such a manner that ⅔ of the stake-weighted validators can always reconstruct the block. Additionally, as part of their proposal, the leader will:</p><ol><li><p>attach the QC for the highest view they’ve observed. Or;</p></li><li><p>Attach the TC for the highest view they’ve observed, and additionally attach the QC from the highest view they’ve been able to obtain one from.</p></li></ol></li><li><p>If a block is proposed during a view with a valid QC then it is certified. In this manner, the proposed block always extends the highest certified block as observed by the leader.</p></li><li><p>The validators will vote to accept the proposal if in their view the proposed block also builds on top of the highest certified block they have observed. To accomplish this, each validator keeps track of all votes for all blocks they have observed.</p><ol><li><p>Votes to form the QC are sent directly to the leader of the next view.</p><ol><li><p>Validators can be slashed for submitting conflicting votes on the same view.</p></li></ol></li><li><p>If the validator does not receive a valid proposal within a specified time following the last view, they will instead send a vote to form a TC to the next leader.</p></li></ol></li><li><p>Once the leader collects ⅔ of the votes they can immediately form a new QC or TC and propose a new block.</p></li><li><p>In this manner we create a chain of certified blocks, where each block must refer to the previous certified block.</p></li><li><p>Once a chain of 2 certified blocks is formed, we can finalize the first certified block of the 2-chain as soon as we receive a subsequent QC.</p><ol><li><p>For example: Proposal(view = 10, QC(view = 7), TC(view = 9) ) &lt;- Proposal(view = 11, QC(view = 10) ) &lt;- Proposal(view = 12, QC(view = 11) ). Following this, we know that at least ⅔ of stake agrees the block proposed in view 10 is correct and becomes finalized.</p></li></ol></li></ol><p>In practical terms, this process enables Espresso to finalize blocks in just a few seconds. Additionally, because finalized blocks include a QC that proves that ⅔ of stake voted on it, we can slash up to ⅓ of the stake in the event that a second, conflicting block is finalized, as they’ll have voted on both blocks. This means Espresso gives the same type of strong finality guarantee that Ethereum gives at much lower latency.</p><p>Now that we know how Espresso finalizes blocks, we can slightly tweak our earlier rollup definition to create a new type of rollup that works as follows (<em>additions in</em> <em>italics</em>):</p><ol><li><p>A rollup is a standalone blockchain.</p></li><li><p>Transactions for this blockchain are sent to a centralized server called a sequencer.</p></li><li><p>The sequencer determines an ordering for these transactions and turns them into blocks.</p></li><li><p>The sequencer publishes the blocks for consumption and promises not to change their ordering after publication.</p></li><li><p><em>The sequencer forwards their blocks to Espresso.</em></p></li><li><p><em>Espresso will include these blocks in a block.</em></p></li><li><p><em>Espresso will quickly finalize the block that included the rollup’s block.</em></p></li><li><p><em>The blocks finalized by Espresso will be batched and forwarded to Ethereum.</em></p></li><li><p>Ethereum includes these batches in a block.</p></li><li><p>Ethereum eventually finalizes the block that includes the rollup’s transaction batch.</p></li><li><p>The canonical rollup blockchain is determined by the batches that were finalized on <em>Espresso and</em> Ethereum.</p></li></ol><p>Thanks to integrating Espresso, the rollup can now offer a new type of finality guarantee for its transactions. All we need to do is alter the rollup’s settlement contract to only accept blocks that have been finalized by Espresso. This ensures that if a rollup block was finalized by Espresso, it will end up in the canonical rollup blockchain, unless an attacker controls ⅓ of Espresso’s stake and is willing to burn it.</p><p>This is practically the same guarantee that Ethereum provides, albeit with fewer validators and less economic security. Though there is no reason this has to remain the case, assuming that Espresso becomes a successful protocol, combined with the ability to restake ETH tokens to Espresso.</p><p>The important difference is that Espresso finalizes blocks in just a few seconds, as opposed to the ~12.8 minutes it takes Ethereum.</p><p>And this finally ties everything together. Traditionally, depositing to CEXs from rollups, and bridging between rollups, was slow, due to the fact CEXs are conservative entities that want strong finality guarantees. Thanks to Espresso, rollups can now achieve these strong finality guarantees at very low latency!</p><p>This means CEXs can safely process deposits from rollups integrated with Espresso within seconds. Likewise, bridges can safely process crosschain transactions from Espresso-integrated rollups within seconds, as well.</p><h2 id="h-the-answer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The answer!</h2><p>So, to answer the original questions that prompted this post:</p><ol><li><p>Why is bridging between L2s so slow in some cases? And why does it take so long to deposit to centralized exchanges (CEXs) from L2s? <strong>Because they want to avoid double-spending!</strong></p></li><li><p>What exactly is Espresso? <strong>A blockchain that provides rollups with strong protection against double-spending at very low latency!</strong></p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/32a1e0362215580bfa1047cd66aff93606a93519d3b5c3ae836f87ced27dae19.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-appendix" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Appendix</h2><h3 id="h-novel-bridge-designs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Novel bridge designs</h3><p>It&apos;s worth noting that novel bridge designs have been implemented that try to isolate the risk of double-spending to affect only certain participants of their protocol. This enables these bridges to settle crosschain transfers quicker, so long as they can find participants willing to take on the added risk. For these bridges, it is arguable whether Espresso would provide much benefit in terms of latency. However, it is undeniable that they stand to gain much from the additional security benefits provided by Espresso.</p><p>I will include a brief overview of two of the most popular designs, which will make it apparent that Espresso greatly increases their security, while retaining their ability to provide end users with low latency crosschain transactions.</p><p>The first category revolves around ‘solvers’. These are entities that fill orders on the end user’s behalf. A popular example is Across. I will next describe the bridging flow in Across, where Alice wants to move 1 ETH from Arbitrum to Base, with the help of solver Bob:</p><ol><li><p>Alice signs an intent to bridge 1 ETH from Arbitrum to Base.</p></li><li><p>Alice’s 1 ETH is deposited into an Across escrow contract on Arbitrum.</p></li><li><p>Bob waits till they are confident Alice’s 1 ETH deposit won&apos;t reorg.</p></li><li><p>Bob claims Alice’s intent to bridge.</p></li><li><p>Bob sends Alice 1 Eth from his personal funds on Base.</p></li><li><p>Bob submits proof they have paid Alice to the Across protocol</p></li><li><p>After a challenge period, Across will repay Bob 1 Eth.</p></li></ol><p>In this design, Bob is competing with many other solvers, and whichever solver claims Alice’s intent to bridge first gets to complete the order and earn a fee. This means that typically the winning solver will act based on the pre-confirmation given by a rollup’s centralized sequencer, as opposed to waiting for Ethereum. If a transaction is large enough however, there may not be any solvers willing to take on that risk, and Alice may end up waiting ~15 minutes for Ethereum finality.</p><p>Espresso may be especially useful to speed up these larger transactions, but also makes it far safer for solvers to fill smaller transactions with low latency. Additionally, as new rollups continuously pop up, Espresso removes the need for solvers to worry about the trustworthiness of any new sequencer, which may reduce the friction faced when trying to onboard solvers to new rollups.</p><p>The second category of bridges are based around liquidity pools. In this design, users can deposit tokens into a pool that others can access for crosschain transactions.</p><p>Some trusted party is then relied upon to sign messages that attest to something like the following: ‘We have confirmed that Alice has deposited 1 ETH on Arbitrum, she can now withdraw 1 ETH from the liquidity pool on Base’. Once this message has been received on Base, Alice will be able to withdraw 1 ETH.</p><p>In the example mentioned above, the party that signs the crosschain message is responsible for verifying that the deposit on Arbitrum was successful and won’t revert. This means that if these types of bridges want to provide low latency for bridging between rollups, they have to rely on preconfs from the sequencer.</p><p>Now the risk becomes less isolated, as a double-spend can impact all the liquidity providers in the pool, as opposed to just a single solver. Not to mention, the trusted party can also steal all the funds from the liquidity pool by forging messages. But because liquidity is pooled, these systems may have an easier time with supporting larger swaps than solver based bridges.</p><p>Stargate, which is the most used bridge in this category, improves on this design even further with ‘Hydra’. Here they allow tokens locked in the liquidity pools to be minted 1:1 as ‘Bridged Assets’ that can be burned and minted on chains that support Hydra. This greatly increases their capital efficiency and effectively allows chains to share liquidity using the Bridged Assets.</p><p>The downside here is that risk is no longer isolated any type of hack will have far reaching effects, as it can impact both LPs and typical end users holding the Bridged Assets on other chains that support them.</p><p>This is somewhat akin to the consequences faced following the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">Multichain bridge hack</a>. This resulted in over $100m in losses for LPs, and bridged assets losing most of their value, causing great harm to anyone holding them.</p><p>Incidents like these once again highlight why security is so important. Integrating Espresso into applications like Stargate can mitigate many of these risks, both by avoiding reliance on centralized sequencers for preconfs to support fast bridging, and by replacing the trusted parties in charge of signing messages with TEEs and/or ZKPs.</p><h3 id="h-espresso-as-a-shared-sequencer-and-da-layer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Espresso as a shared sequencer &amp; DA layer</h3><p>People who have been following Espresso for a while may have some questions after reading this post. Espresso has spent a lot of effort on trying to get rollup chains to use the same decentralized sequencer. Yet this is a somewhat distinct problem from that of providing rollups with protection against double-spending. So can we still use Espresso as a shared/decentralized sequencer and DA layer?</p><p>The answer is a resounding yes! The main difference between using Espresso as a sequencer and purely using it for double-spend protection is that rollup users send their transactions directly to Espresso, as opposed to sending them to a centralized sequencer first.</p><p>The benefits of Espresso become even more pronounced when used as a shared sequencer. It grants rollups stronger censorship resistance, removes central points of failure, and makes it much easier to achieve the holy grail of interoperability: synchronous composability. Distinct rollups that share the same block builder in combination with Espresso can act as if they are a single blockchain.</p><p>Realistically however, most rollups prefer to maintain their own centralized sequencer for many reasons I won’t get into here (I think you’ll agree this post is long enough as is). I do however believe that we will reach a point where this is no longer the case, and at that time a natural evolution for rollups that are already integrated with Espresso for confirmations may be to use Espresso as a sequencer as well.</p><p>Espresso’s design still makes it as easy as ever to use for sequencing, while maintaining revenue, and regardless of the rollups internal design and application specific needs.</p><p>As for DA, Espresso is once again flexible. Any integration with Espresso automatically makes use of EspressoDA, but rollups are free to use additional DA layers if they so desire. For example, we assume that most Ethereum rollups will continue to use Ethereum for DA in addition to EspressoDA. What we do ensure however is that Espresso can offer extremely high throughput DA to whomever needs it.</p><p>And for anyone who wishes to accuse us of pivoting, I dare you to find one other project who has managed to produce blog posts that are way too long with such consistency over the years! (Jon Charbonneau doesn’t count)</p>]]></content:encoded>
            <author>gets@newsletter.paragraph.com (Gets)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b54d30949ea6dec908a6bc7e0cb42493a5811a7c70fa73be6349b3c49b228ce0.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>