Author: Marshall Vyletel Jr. Source: *1kx Translation: Shanolba, Golden Finance
The number of rollups on the Ethereum network has experienced an explosive rise. According to data from L2Beat, there are currently 91 L2 and L3 rollups live, with 82 more coming soon. As a result, there is a lot of fragmentation in terms of liquidity, user experience, and developer tools. The current interoperability solutions still need improvement as they rely on a combination of third-party bridges, wrapped assets, and intent frameworks, each with their own set of issues.
In this article, we investigate the prospects for trustless interoperability by defining and discussing six levels of interoperability solutions between decentralized Rollup ecosystems.
We start from the default case, which is to asynchronously withdraw from the source rollup to L1 and manually bridge to the target rollup, and finally end with the assumption architecture of cross-rollup composability in a single transaction. We will explore how interoperability at each level will affect user experience, developer experience, MEV potential, and the rollup itself (depending on specific infrastructure changes).
This article mainly discusses Ethereum and its L2, and only follows the trustless interoperability. In this case, “trustless interoperability” refers to the protocol’s channels, which do not require third parties to facilitate transfers beyond the necessary infrastructure that most rollups already require.
Fundamentally, interoperability without the need for trust requires some shared resources, which any two protocols wishing to interoperate must be able to access. In the case of Ethereum L1, all Smart Contracts exist in the same environment with shared Ethereum full state, so they will always have the highest level of interoperability. However, L2 only shares the settlement layer through separate bridge contracts, so interoperability is greatly limited.
The key shared infrastructure components that can drive us forward on the trustless interoperability ladder are shared sorters, super builders, and shared Settlement. The guarantees and new features opened up by these shared layers are relevant but essentially orthogonal.
First, we will define the six levels of trustless interoperability mentioned in the introduction:
To further understand each level, we will introduce the following key use cases to demonstrate the features of each level and its impact on users, developers, aggregators, and MEV searchers.
We will also answer the following questions to further understand the impact on key stakeholders in any aggregation ecosystem.
Not applicable
By definition, this refers to the current default mode of trustless interoperability. All rollups are defined this way because they are built as settlement layers on top of L1 and can only be accessed by bridge contracts that periodically publish state updates to secure the network.
In this case, the only spec-compliant way to execute any trustless cross-Rollup activity is to extract assets from the source Rollup via a spec-compliant bridge and manually deposit them into the target Rollup once available on L1.
For Optimistic Rollup, considering the safety window, the withdrawal latency is about 7 days. In ZK Rollup, the withdrawal latency is uncertain, but it may be between 15 minutes and a whole day, ZkSync is such a case.
In addition, it is also possible to use smart contracts for peer-to-peer atomic swaps, but this is a smaller use case and cannot be effectively scaled.
It is worth noting the current third-party solutions:
Both of our examples require third-party solutions to assist.
Send to yourself:
Cross-rolling limit order
Since this is the default, there is no need to discuss UX, DevEx, MEV, and aggregate changes.
Shared Sequencer *
The atomic inclusion only guarantees that the cross-aggregated bundle will be included in the next block.
This requires a shared sorter, but in theory, if the sorters on two given rollups do not reach maximum throughput, it can be manually implemented (just submit two transactions to each rollup separately). That’s why we added asterisks to the required infrastructure.
However, we do not assume that the shared sorter runs the full Node of each connected rollup, so we cannot guarantee the successful execution of a set of transactions. In this case, the shared sorter can only guarantee that the transaction format is correct and will be included in the next Block, but it may not be successfully executed.
Without enforcement guarantees, it is not possible to programmatically take advantage of atomicity in any meaningful way without risking one of the transactions being rolled back. Therefore, we are essentially in the same situation as L1 Async interoperability.
Consider launching a simple cross-collateralized exchange with only atomic inclusion guarantees:
We may have atomic inclusion guarantees, where two transactions are actually included in each subsequent block of a summary, but if the first transaction Rollbacks and the second transaction does not Rollback, the user will incorrectly allocate funds on-chain at the destination without locking or burning them on-chain at the source, and we will encounter a Double Spending problem.
Any interoperability solution, whether it’s a liquidity bridge, an intent framework, or an xERC-20 exchange, is susceptible to this risk and cannot mitigate it. Due to this risk, current solutions require the initiating transaction to have been successfully executed and included in the source on-chain Block before the relay can pass the message and execute the second transaction on the target on-chain.
Important reminder: Atomic swaps will not have a significant impact on interoperability potential.
Proof aggregation layer//Shared Bridge Contract
This is where things start to get more interesting. Thanks to the existence of the Shared Bridge contract, all Liquidity deposited from L1 into the rollup ecosystem can move freely between all connected rollups. Prior to this, we could not exchange assets between rollups without going through formal channels, external wrapping of assets, or using third-party solutions.
Why build a shared bridge contract? To understand why a shared bridge contract can allow us to transfer assets across Rollups in a trustless manner, first consider what would happen if you could have Eth in Rollup A, destroy it, and then mint it natively in Rollup B without the need for a shared bridge contract on Layer1.
We see that each rollup will be out of sync with the bridge contract on the Mainnet. The bridge contract for rollup B still has 50 Eth, so users cannot withdraw their 1 Eth to L1.
To address this issue, we have established an external asset packaging protocol to aggregate and issue external versions of Tokens that represent the native versions elsewhere in the network.
With the shared settlement layer, the situation is different. Since all the liquidity of each connected rollup is locked in the same bridge contract, people can freely move between rollups, as the total value in the bridge contract remains unchanged and can always be withdrawn.
It is indeed necessary to update at the L1 contract level to understand where Liquidity is and to allow users to withdraw from anywhere, but this is simple because all connected aggregations can read/write to the shared contract.
Using a shared settlement layer, for simple cases of sending to oneself, the process may look like the following.
Send to yourself:
We can extend this process to any ERC-20 with contracts in all aggregations in the shared Settlement ecosystem.
We can think of the Shared Bridge contract as a message passing layer within the protocol that aggregates all connections, so in theory, this process can actually be extended to any arbitrary message passing standard.
This brings us closer to composability, but due to the need for aggregation proof and message passing only after reflecting state changes on L1, the latency is higher (although significantly lower than the L1 asynchronous case). In addition, any complex cross-Rollup activity (such as using DEX on Rollup B to initiate cross-Rollup limit orders from assets on Rollup A) remains a cumbersome process for users, as they still have to send to themselves and manually exchange assets on the target Rollup. In this case, atomic cross-Rollup bundling cannot be created.
Another important benefit of sharing Settlement is that there is less friction for Liquidity providers or resolvers who execute orders in multiple environments. Because their Liquidity across all connected Rollups is reflected in a single bridging contract, they do not need to wait for a complete withdrawal window to manage cross Rollup Liquidity.
Important tip: Shared Settlement allows for non-externally wrapped asset transfers and arbitrary message passing in all aggregations of shared bridge contracts and proof aggregation layers, but there will still be an unavoidable latency (although much shorter than L1 Async) and it is not possible to create cross-aggregate atomic bundles.
Shared Sorter // Super Builder
Atomic execution allows us to ensure the successful execution of cross-volume bundling, but as we will see, the number of use cases for cross-volume bundling without dependent transactions is less than initially expected.
If any single transaction within a group of dependent transactions is revoked, all other transactions will become invalid and must also be revoked, just like the case of destroying and minting tokens across rollups. Whether minting tokens on the target rollup depends on whether they have been destroyed or locked on the source rollup, so we can say a set of destroy and mint transactions is a set of dependent transactions.
It is not possible to create this bundle without an intermediary (such as a super builder) capable of creating the target transaction.
Consider what conditions must be met to build a bundled package for cross-Rollup exchange without the participation of other parties outside of users. A bundled package must be created to lock/mint assets on the source Rollup and mint assets on the target Rollup, but we have encountered issues: 01928374656574839201
We can see that even though we can ensure the execution of cross-summary bundles, we have encountered difficulties in how to first construct them to transfer valuable assets.
However, there are still some atomic execution use cases that do not require dependence on cross-rollup bundles. One of them is cross-rollup Arbitrage:
Because there is no strict dependency between these transactions, anyone can create this atomic package and submit it to a shared sequencer that ensures atomic execution.
However, in order to first obtain atomic execution assurance, rollup must choose a shared sequencer and a super builder to run the complete Node of all connected rollups, so the step from atomic execution to Block-level composability is very small, and all shared sequencing solutions will achieve this. The only change needed is that the Block builder or other third parties must be able to create transactions on behalf of users to complete dependent cross-rollup bundles.
It is unlikely to build an infrastructure that only allows atomic execution without further achieving composability. Considering that the infrastructure already has atomic execution capabilities, the relative benefits of achieving full block-level composability far outweigh the difficulty of achieving this goal.
Important note: Although cross-rollup bundling guarantees atomic execution, it is unclear how these bundles will be constructed without a super builder for the bundling portion, so atomic execution itself is unlikely to affect interoperability. By default, the shared sequencer/super builder should build block-level composability.
Shared Sorter // Super Builder // Proof Aggregation Layer* // Shared Bridge Contract*
(* = optional)
In much of the discussion about shared sequencers and shared settlement layers, the term commonly used to describe this level of interoperability is “synchronous composability”.
We have slightly modified this term to make it more descriptive. Updating the term to ‘Block-level Composability’ means that cross-rollup transaction batches can be combined between two rollups, which will be included and successfully executed in the next Block. Synchronous composability may be confused with transaction-level composability, which we will discuss in the next section. Importantly, this requires an intermediary (shared ordering infrastructure) that can act as both an executor and creator dependent on transaction batches.
At this level, we are beginning to see the true composability between Rollups, rather than simply sending to oneself to participate in another Rollup’s dapp.
By adding a shared sequencer that can create transactions, we can now create cross-collateral packages, which developers can programmatically leverage.
There are two situations to consider:
In both cases, we can create cross-collateralized bundles for more complex activities, but in the second case, by sharing Settlement, we can use native assets, for example, this may have a better price impact on cross-collateralized DEX activities.
With block-level composability, we not only have the advantage of atomic execution, but also the additional ability to create dependent transaction packages. Let’s take a look at our two illustrative examples.
Transfer the same Token via xERC-20 (without shared Settlement):
With the shared settlement layer, the process is further simplified because there is no need to first wrap ERC-20 as xERC-20 for exchange.
Now let’s take a look at the Cross-Rollup Limit Order, which is to use the initial (different) ERC-20 in Rollup A to purchase ERC-20 on Rollup B, and send the generated ERC-20 back to Rollup A. In this case, we don’t assume that we have a shared settlement layer, although a similar process exists in the presence of a shared settlement layer. The only difference is that there is no need to externally wrap the assets.
The following are the transactions required in this case:
Here is its possible workflow:
Flow:
Because the super builder will create Block and sort transactions, it can simulate each transaction and omit the bundling when any transaction is revoked. For example, if it is found that the user cannot fully fulfill its limit order, the bundling will be omitted before executing the Block.
In the absence of a shared Settlement layer for shared ordering infrastructure, external wrapped versions of ETH and xERC-20 may need to be used, which could lead to deterioration of the DEX market conditions as the liquidity pools for wrapped assets thin out. In this scenario, users may have to tolerate looser restrictions, higher slippage tolerance, and may receive suboptimal prices. There is an exception when it comes to USDC. A shared sorter without a shared Settlement may collaborate with Circle to obtain exclusive access to the USDC contract across rollups, facilitating the transfer and exchange of native USDC across rollups.
With the shared settlement layer, this external packaging is no longer necessary, and because the liquidity pool of the native asset swap is deeper, it may provide better prices, but the process is basically the same.
Rollup requires optimistic trust in the shared sequencer/super-builder to create an effective cross-Rollup bundle. This is mainly because the cross-Rollup bundle contains dependent transactions, which cannot be verified by individual Rollups until the block is added to the on-chain of each Rollup and aggregated to the settlement layer on L1. An example is the initial destruction and minting of Eth from the source to the destination. It is crucial that Eth must be actually destroyed on the source on-chain and then minted on the target on-chain, otherwise Double Spending may occur.
However, to execute this entire bundle in one Block, all transactions must exist in the Block, even if the transactions represent a state that is invalid before the Block itself (e.g., if the user does not have any Eth before the Block, there is Eth on-chain in the target exchange). Therefore, we must trust that the sequencer does include valid dependencies across aggregated bundles. Proofs can be submitted afterwards to demonstrate the validity of each transaction.
However, when using wrapped assets, this is less important because they do not affect the native Liquidity stored on L1, but there must still be a fallback mechanism to mitigate the risk of malicious sorters or errors in the code, which allow transaction bundles to be executed together with the restored dependent transactions.
VM level change // Shared Settlement // Super Builder
Transaction-level composability refers to the same level of functionality shared by an EVM on-chain Smart Contract. In this case, a single transaction can simultaneously update the states of multiple rollups and ensure that any state changes before a failed call can be reverted. In practice, atomic transaction packages in a block-level composability environment can be completed in a single cross-rollup and cross-VM transaction. This requires VM-level changes to all connected rollups, in addition to shared settlement layers and superbuilders.
We describe at a high level a possible mechanism here. (To the best of our knowledge, this structure is attributed to the Espresso team). First, the super builder submits cross-rollup transactions to all rollups whose states are being traded or can build Blocks on all relevant rollups. The super builder paper trading and forming input-output pairs list, one for each relevant rollup, specifying the necessary and expected cross-rollup messages in the transaction. (Please note that the super builder can only do this if it has secure ordering rights for all relevant rollups for a period of time). Then, the super builder will send the simulated Block along with the expected input-output pairs list for each cross-rollup transaction to the proposers of each rollup. During execution, each rollup will execute its own state transition function normally, assuming that the inputs from the cross-rollup transaction list are correct. During the Settlement period, the input-output lists can be cross-compared and proven to be secure in the proof aggregation phase of the shared Settlement layer. Specifically, if any expected input from a cross-rollup transaction does not match the output specified by another rollup, the Settlement process will reject the entire cross-rollup transaction.
Although the new features unlocked by transaction-level composability are limited apart from Flash Loans, the experience for developers creating cross-Rollup applications can be greatly improved. Being able to create dapps that interact with all connected chains without having to consider cross-Rollup bundling will make innovation in multi-Rollup environments much easier. Additionally, new use cases and behaviors may emerge.
There are many unresolved design issues in terms of transaction-level composability. First, it is necessary to carefully consider how developers choose to join or exit their Smart Contract cross-Rollup calls. Allowing unrestricted composability means we return to a single Rollup. We believe the answer here is for developers to explicitly indicate where in their contracts cross-Rollup composability is needed, for example by marking certain entry points of the contract as callable cross-Rollup through Solidity modifiers (such as “composable”).
After understanding the technical details of each interoperability level defined here, we can summarize as follows:
Currently, there are many projects emerging aimed at creating these natively interoperable ecosystems. Here is a high-level overview of the field:
Ecological System Map
There are still some unresolved issues regarding the technical details in the frameworks listed in this article. For example, in the block-level composable ecosystem, building bundled packages for cross-aggregated limit orders may require more detailed design to handle partial fulfillment and Slippage tolerance of market orders. We provide a potential solution here, where bundled cross-aggregated limit orders can be restored if the orders are not fully completed, but the design space is open.
In addition, it is worth mentioning that this is related to the increasingly rising idea of sharing in the AppChain field. AppChain is a long-tail L2, either generic or permissioned, aimed at isolating specific related protocols on an L2. When we achieve block-level composability, we are likely to begin to see significant attractiveness of the AppChain environment due to the native composability between all connected networks.
Currently, it is still difficult to introduce Liquidity for these application chains, but once larger chains are connected as entry points to interoperable environments, we are likely to see walled garden ecosystems around shared infrastructure.
Another important unresolved issue is how the design space around the super builder will be addressed. This aspect is still in its early stages of development, and it is currently unclear how to create a complex builder network that can create cross-collateralized packages in the most effective way. The inclusion of these cross-collateralized packages in Block in the best possible way, as well as the impact on aggregated income, is a pending issue, and many teams are exploring different strategies.
Ultimately, there may be a combination of solutions involving bridging within and outside the protocol, working together to provide better interoperability processes for everyone. We believe that the progress defined in this article can serve as a guide for developers and builders who focus on providing a more seamless cross-rollup interoperability for end-users.