Instant Cross-L2 Transfers are Now on Testnet!
Goodbye Indra, Hello Vector
TL;DR
Entering and exiting L2 chains instantly is ready to be integrated into dApps!
We demo’d this usecase back in August, and were blown away by the response from the community. Since then, we’ve built out a fully working implementation of a cross-chain routing network using state channels that works with L2s, Eth2 shards, and even other L1 chains. We call it Vector ↗.
You can find open source code for Vector here and WIP integration docs here.
We’re auditing the system and working on integrations with L2 dApps — we expect Vector to be on mainnet by the end of the year!
Today, we’re excited to announce that Vector, the next iteration of Connext which focuses hard on fixing on/offboarding from L2 chains, is now on testnet!
🌐 Problems in a Multi-Chain World
Regardless of your philosophy on the future of this ecosystem, whether that is a rollup-centric Ethereum, a sharded Eth2, or perhaps even many discrete layer one chains, it’s clear that we’re headed towards a multi-chain world.
This brings up an interesting new challenge for UX — specifically, how do you allow users to send value and interact with contracts across chains seamlessly? The problem is even more dire for Ethereum L2 chains, many of which typically require an exit window of at least a few hours to move funds back to L1.
L2<>L2 interactions are even more complex. A user with funds on Arbitrum that wishes to interact with a DeFi protocol on Optimism, for instance, would first need to wait for an exit and pay gas fees to remove funds from Arbitrum to Ethereum, then subsequently pay gas fees and lock funds to bridge to Optimism, before finally calling the DeFi contract.
📍 A Shared Routing Layer
State channels are radically different from chain-based L2 solutions like rollups, plasma, or sidechains. Rather than having a single shared state that everyone agrees on and validates (i.e. a blockchain), channel networks are a collection of two-party agreements between different peers.
This means that transfers in state channel networks propagate through one or many intermediary routers that provide liquidity. Structurally, this looks kind of like how data packets are sent through routers on the internet, except that in our case, you’re specifically communicating value instead of just abstract data.
The parallels to the internet, specifically TCP/IP, don’t just stop there. The protocols of the internet are a shared communication standard that route data between discrete sub-networks — many of which may be running their own protocols internally. Similarly, transfers in channel networks may be routed over channels that are running on entirely different chains!
In other words, by making Connext nodes chain-agnostic and by allowing them to open channels on many chains concurrently, we create:
A simple, shared communication protocol (like TCP/IP) that routes value instantly between any discrete L2 or L1 chains!
🌗 Lessons from Spacefold
Back in August, we decided to explore this new vision for Connext as part of our submission to the Reddit Scalability Bake-Off. We built Spacefold, a demo to showcase instantly transferring assets between Rinkeby, Kovan, xDai, Matic, Optimism, SKALE, and Arbitrum testnets using Connext state channels.
Our goal with the demo was to understand more about the user flows that would need to be enabled, and evaluate how useful a routing layer would be for L2. We were blown away by the response from the community.
Spacefold was our first step — a hacky, unscalable UI built on top of our old Indra nodes that we used to validate our hypothesis. Since then, we’ve been heads down on an updated version of Connext which can bring reliable cross-chain interoperability to any dApp or protocol with minimal integration work.
After a few months of hard work and close iteration cycles with customers, we’re excited to share that what we’ve built is now ready for testnet integrations!
↗️ Meet Vector
The new protocol, which we’re calling Vector, supports the following features out of the box:
- 💸 Conditional transfers with arbitrary generality routed over one (eventually many) intermediary routing nodes.
- 🔁 Instant cross-chain and cross-asset transfers/communication. Works with any evm-compatible chain.
- 🔌 Plug in support for non-EVM turing-complete chains (including zkRollups!).
- 💳 Simplified deposits/withdraw, just send funds directly to the channel address from anywhere and use your channel as a wallet!
- ⛽ Native e2e gas abstraction for end-users.
It’s also extremely simple — the entirety of the core offchain protocol fits into less than 2500 lines of code. This means that, as compared to indra, it’s much easier and more stable to build on top of.
You can check out the implementation in the main Vector repo. We also have work-in-progress developer documentation that can help you spin things up yourself.
📝 What’s next?
Solving this problem is critical to getting fully functional and user-friendly dApps on L2 so we’re iterating as fast as we can to get Vector to mainnet. There’s a few key tasks that we’re focusing on next:
- We’re already working on testnet integrations of Vector into some of your favorite L2 chains! Expect more announcements about this very soon.
- We’re scheduling a contract audit and expect this to be completed in mid-late December. That means Vector will be on mainnet by the end of the year!
- We’re looking for a few early router operators who can provide liquidity to/from L2s and earn yield. Hit us up ASAP if that sounds interesting to you!
Have any other questions?
If you have any questions, get in touch with us by:
And lastly, please share this with your friends in the ecosystem if you find it interesting.
Thanks for your support,
Team Connext