A thorny developing process is starting to bear its first fruits: Atomex - cross-chain Atomic Swap exchange - has been finally released in the mainnet. Our team has made up an exciting journey from the pure atomic swap protocol to the fully-fledged application, and now we can say “Yes, it works!”.
We want to thank all the early testers for their feedback, it is very important for us!
# The idea behind
Our goal is to create a product for crypto enthusiasts, for those who believe in ideas behind the blockchain technology and who is paranoid in a good sense.
If TCP/IP is a protocol used to transfer information on the Internet, the blockchain is the same for e-money and other classes of assets. However, there is still an interchain gap which leads to an inconvenient value separation.
The atomic swap protocol which we will examine a little further effectively closes that gap in a trustless way, relying on an essentially simple idea. Banks or another trusted third-parties are being replaced by a smart contract, and this is one of the few cases when it can be done with just the data available on-chain (without oracles or other off-chain data providers).
# Atomic swap exchange basics
Before we move on to the practical part, let’s dive a bit into the protocol details. Let’s say Alice wants to buy some ETH for XTZ and Bob has agreed to make a deal. There are two possible outcomes, either the transaction will take place or will be canceled.
# Initialization phase
- **Alice locks XTZ
**Alice generates a random bytes sequence — the
secret, calculates its
hashand sends her XTZ to a special smart contract together with the
lock_time_avalue, and Bob’s XTZ
These XTZ can only be redeemed by the owner of the
address_bif he knows the
secret, and it has to be done before the
lock_time_a, afterward, Alice can get these funds back.
- Bob locks ETH
When Alice’s transaction is confirmed Bob sends his ETH to a special smart contract together with the same
lock_time_b, and Alice’s ETH
These ETH can only be redeemed by the owner of the
address_aif she knows the
secret, and it has to be done before the
lock_time_b, afterward, Bob can get these funds back.
lock_time_b < lock_time_a
To prevent the case when Alice first makes a refund and then redeems Bob’s funds.
# Successful redeem
- Alice redeems ETH
Alice sends the
secretto the contract in Ethereum blockchain and receives Bob’s ETH in return.
secretis revealed now and Bob can spend the locked XTZ.
- **Bob redeems XTZ
**Bob sends the
secretto the contract in Tezos blockchain and receives Alice’s XTZ in return.
# Refund case
We will not consider the cases when something goes wrong during the initialization phase (they are rather trivial) but will examine the case when Alice doesn’t redeem Bob’s ETH for some reason, i.e.
secret is not revealed and
lock_time_b has passed.
Simplified scheme of an XTZ/ETH swap (refund case)
- Bob refunds ETH
hashto the smart contract in Ethereum blockchain and gets his ETH back.
He cannot spend Alice’s XTZ since
secretis not revealed.
- Alice refunds XTZ
Alice waits until
lock_time_a, then sends the
hashto the contract in Tezos blockchain and gets her XTZ back.
She cannot spend Bob’s ETH because
lock_time_bhas already passed.
# That’s enough theory
Time to see Atomex in action! We’ll start from a multi-crypto setup with some XTZ and ETH on our balance. With regard to the above scheme we are Bob, and our counterparty is Alice.
# Create new DEX conversion
Choose the “Conversion” tab and set the ETH amount we want to exchange for XTZ. Check the deal terms and then press “Convert”.
Step 0. The user creates a new conversion
A new сonversion appears in the table with the status “In Progress”.
Actually, that’s all we need to make an atomic swap through Atomex wallet. But let’s follow the internal process spawned by our actions.
# Under the hood: Alice locks XTZ
First, check out recent operations for the Atomex smart contract in the Tezos blockchain:
Step 1. Alice locks XTZ
This is a transaction sent by Alice, these locked funds are going to be ours in the end. Mind the
hash field passed via parameters.
# Under the hood: Bob (us) locks ETH
Once the XTZ transaction is confirmed, Bob sends an ETH transaction. We can see that it contains the same
Step 2. Bob locks ETH
# Under the hood: Alice redeems ETH
Another contract invocation from Alice’s side. She receives our ETH in exchange for
secret and Bob picks it up:
Step 3. Alice redeems ETH
# Under the hood: Bob (us) redeems XTZ
Finally, Bob unlocks XTZ using the collected
Step 4. Bob redeems XTZ
The status of our conversion changes to “Completed”, everything is ok.
# Side notes
All the internal actions you saw are performed by the Atomex wallet in the background process so it’s necessary to keep it online until the swap is done. In our example of an XTZ/ETH conversion, it takes only 8 minutes for the whole thing, however, it depends on the particular blockchain confirmation time.
We are currently working on making different order types available. As soon as the Atomex swaps market will be consistent enough it will be possible to place limit orders through the Atomex app.
# How to set up Atomex wallet
Check out our tutorial.
Any feedback is highly appreciated, if you have a feature request or a bug report please welcome to our Telegram chat. And don’t forget to follow us on Twitter!