Adventures in going crosschain with LayerZero’s Stargate DEX and Axelar’s Satellite bridge
Preamble: I have been studying crosschain systems and came across ZetaChain during my research. ZetaChain, a new L1 blockchain built for omninchain interoperability, commissioned me to do a review of popular crosschain solutions to better understand the state of play of crosschain UX.
The original goal of this article was to walk through crosschain swaps with some options available today, while illustrating the tradeoffs of each design.
“Ok, let’s do some simple EVM-EVM and EVM-IBC swaps of popular tokens like ETH and USDC. Let’s compare ease of use and cost to swap, and let readers come to their own conclusion on which designs work best for them.”
However, it soon became clear that there are many impossible paths (networks not available, tokens not available) and some hair-pulling ones (drama with gas tokens). Since a neat, high level summary of crosschain swaps on different platforms is not possible, this article will instead recount my discovery process, blow-by-blow.
I have chosen to review LayerZero’s Stargate DEX and Axelar’s Satellite bridge as they are two of the most prominent crosschain solutions. They are each pioneers in their own right, and are actively working on their product. The problems faced in trying to use their platforms are largely a reflection of the state of crosschain today (which is the early stages of development), rather than a specific comment on their designs. Zetachain hopes to add to the solution set and fundamentally improve UX for users seeking to take part in a multichain world.
Note that I am not reviewing lock-and-mint bridges like Nomad or Wormhole. Many remain skeptical of lock-and-mint bridges as they represent dangerous honeypots — as the multi-billion dollar bridge hacks prove.
First, a quick overview of the two crosschain swap platforms.
LayerZero’s Stargate DEX
Stargate is built on LayerZero and it allows users to swap assets across chains. For example, a user could swap USDC on Ethereum for USDT on Polygon.
Axelar’s Satellite bridge
Satellite follows a lock-and-mint model, allowing users to transfer funds between chains in the form of axl-tokens (e.g. axlUSDC). It is differentiated from most lock-and-mint bridges because the protocol can be generalized to support bridging between any chain, whereas most bridges are purpose-made to bridge between specific chains. As a Cosmos-based chain, for transfers to/from IBC chains, Axelar simply uses the IBC module.
For a more technical comparison of crosschain solutions, please refer to this article by ZetaChain. The rest of this article will focus on comparing user experience.
LayerZero Stargate: into the ether…
I am very excited to try out LayerZero because they have been very well-received in crypto media.
- Stargate only supports selected EVM chains for now, though they have said they plan to add non-EVM chains like Solana and Aptos
- Chains supported are: Ethereum, BNB Chain, Avalanche, Polygon, Fantom, and the Ethereum rollups Arbitrum and Optimism
- The tokens available across all chains are limited to ETH, USDC, USDT, and STG (the Stargate token)
Goal 1: Swap ETH (on Ethereum) for USDC (on Polygon)
I quickly see that ETH trades are limited to transferring ETH between Ethereum and the Optimism and Arbitrum rollups. ETH cannot be transferred to the other chains. In addition, ETH cannot be swapped for USDC or USDT on any chain. I have to revise the goal to suit.
Revised Goal 1: Swap USDC (on Ethereum) for USDT (on Polygon)
This was a relatively smooth transaction, except that I had to first go to Uniswap to exchange ETH for USDC. Gas cost was ~$6 in ETH for this transaction. It took only about 4 minutes to receive my USDT on Polygon.
Now that we have USDT on Polygon, let’s try to obtain some USDC on Avalanche.
Goal 2: Swap USDT (on Polygon) for USDC (on Avalanche)
I was expecting a simple transaction like before, but Stargate informed me that I need MATIC on Polygon in order to move my USDT at all.
Where to get MATIC? Like any defi enthusiast, I go to Uniswap and buy some MATIC. But… apparently it is the wrong kind of MATIC. I purchased MATIC on Ethereum, which doesn’t help me because I need MATIC on Polygon before I can execute a transaction on Polygon. I could try to bridge this MATIC from Ethereum to Polygon, but I refuse to, because the whole point is to avoid the good ole’ lock-and-mint.
Where to get MATIC, on Polygon? I go to the Polygon site to try to buy MATIC using the Polygon USDT that I got in Goal 1. Alas, I need MATIC (on Polygon) for such a transaction too. I laugh.
After scratching my head hard (and refusing to get Polygon MATIC from a centralized exchange), I suddenly became aware of an option on the Polygon site: “Swap for gas token,” hidden well below the bridge and swap options.
This is where Polygon allows me to exchange my Polygon USDT for some Polygon MATIC, without first requiring me to have MATIC in my wallet (I laugh again). At last, finally, I got myself some MATIC on Polygon. Sweet relief.
(Actually, I am simplifying. There was an additional problem when swapping for MATIC on the Polygon bridge site. The Sign button on the transaction in Metamask was grayed out for about 15 minutes. I had to retry the transaction repeatedly until it worked. This might have been user error — i.e. me being an idiot — network error, or both.)
Finally, after this long and confusing detour, armed with MATIC (on Polygon) for gas, I go back to Stargate and actually swap some USDT on Polygon for USDC on Avalanche. It’s a transaction that takes more 20 minutes to finalize (!).
Now let’s try something else.
Goal 3: Move USDT from an EVM chain to a Cosmos chain
This is not possible on LayerZero Stargate. Only selected EVM chains are supported now, although they have indicated that they will be adding non-EVM chains in the future.
Goal 4: Exchange tokens from non-smart contract chains
Can I exchange BTC for DOGE?
This is not possible with LayerZero because a smart contract endpoint needs to be deployed on each chain that it supports, and BTC and DOGE are both not smart contract-capable.
Ok, this was interesting, but also mentally exhausting. Next, let’s see if Axelar does better.
Axelar Satellite: into the (other) ether…
Axelar was a celebrated addition to the Cosmos family of sovereign blockchains, and I’m also excited to try it out.
- Satellite supports a number of EVM and Cosmos chains
- Major chains supported are: Avalanche, Binance, Ethereum, Fantom, Juno, Moonbeam, Polygon, Regen, and Secret (… and Terra!)
- The tokens available across all chains are USDC, DAI, USDT, FRAX, and a few others, making it slightly more diverse than Stargate
Let’s start with the same first goal as the Stargate experiment.
Goal 1: Swap ETH (on Ethereum) for USDC (on Polygon)
The first thing I realize is that ETH (on Ethereum) is not supported at all, while WETH is only supported on the Cosmos chains (WETH is not supported on the EVM chains). I’m not sure why this would be the case.
Let’s modify our goal.
Revised Goal 1: Swap USDC (on Ethereum) for USDT (on Polygon)
Then, I noticed on the Satellite interface that they do not allow crosschain swaps, i.e. you cannot exchange USDC for USDT. For example, you can only transfer USDC on one chain to USDC on another chain.
Looks like we have to modify our goal again.
RE-revised Goal 1: Swap USDC (on Ethereum) for USDC (on Polygon)
Finally, I manage to find the winning combination (read: the only possible combination). I exchange USDC on Ethereum for USDC on Polygon, using Satellite. Axelar waits for 2 epochs on Ethereum before processing the transaction, which takes about 15 minutes.
The transaction cost a hefty $11 in USDC paid to the Relayers on Axelar’s network (not including a few extra dollars in gas paid to Ethereum validators). This doesn’t sound like it’s made for active trading (unless you’re a professional trader).
But… What is this I see in my wallet?
“axlUSDC” — what is that? Where is my USDC? I follow the breadcrumbs and find out that the “USDC on Polygon” I thought I had exchanged my USDC on Ethereum for on Satellite was actually “axlUSDC on Polygon.” This was a specific instance of USDC locked-and-minted by Axelar, which had a tiny market cap of only $2.8mn. I’m not sure where I can use this axlUSDC.
Ok, nevermind, let me see if I can move axlUSDC between chains.
Goal 2: Move axlUSDC from Polygon to Avalanche
I run into the same issue I had with Polygon on Stargate: I need MATIC on Polygon to process any transfers from Polygon. (I wish Satellite handled this for me; since they are built for crosschain transfers, shouldn’t it be trivial to help me get some MATIC in the right network?)
However, since I had already (and painfully) solved this MATIC gas problem in the previous Stargate experiment, I can execute the transfer on Satellite. I pay a $2 fee in axlUSDC to Axelar Relayers.
Again, the axlUSDC on Avalanche is a specific instance of USDC locked-and-minted by Axelar, which has a tiny market cap of $3.4mn.
Ok, enough playing. Let’s try and get out of our funny-not-funny little “axlUSDC” wonderland.
Goal 3: Dump the axlUSDC and get real USDC (both on Avalanche)
I guess I’m stuck with axlUSDC. Let’s turn our attention to the Cosmos chains.
Goal 4: Send USDC from Ethereum to Osmosis, a Cosmos chain
This transaction was actually very easy to do. It took 15 minutes, the usual 2 epochs that Axelar waits to process a transaction from Ethereum. I sent 15 USDC, of which 10.5 USDC was taken by the Axelar Relayers (uh, thanks!). I end up with 4.5 USDC on Osmosis.
I used Osmosis’ exchange to exchange some USDC for the OSMO token (which is used as gas on the Osmosis network), so that I can send the USDC back to Ethereum. But with just 3.5 USDC left, I can’t afford the Axelar Relayer fee of another 10.5 USDC. I could transfer more USDC over from Ethereum, but that’s another 15+ minute affair. I give up!
Goal 5: Exchange tokens from non-smart contract chains
Non-smart contract chains are not currently available on Satellite, although their design would allow for future support.
Like with Stargate, no BTC or DOGE for me either, at least not yet.
The process of writing this article turned out to be full of more twists and turns than I imagined. While I’ll admit there are others more savvy than I with using crosschain solutions, I’m sure I’m not unique in facing these hairy problems. In fact, I would have given up midway to avoid more brain damage, if I didn’t promise to write this piece!
To recap, here are some problems I faced:
- Supported tokens networks were fairly limited
- Tokens received were not canonical; they were specific instances of wrapped tokens, limiting their usability across defi applications
- Needed gas to use tokens on networks I just received tokens on, and gas was not easy to find
- Unable to swap one token for another (could only transfer tokens of the same kind)
- Took as long as 15–20 minutes to get my tokens
- Significant transaction fees
- It’s all quite confusing!
As we enter a multichain world, we have to make it easier for users to do what they want to do, on the chains they want to do it, in the tokens they want to transact in.
Another factor that should be important to users choosing their crosschain solution is the underlying security model. This will be explored in a future post.
ZetaChain aims to make it easy for anyone to do just that, and to help developers create delightful UX for their users. Head over to zetachain.com to find out more, and try out their testnet crosschain app!