Maelstrom — first on chain mixer DApp for Tezos (XTZ)

Tezosmixermaelstrom
5 min readFeb 13, 2021

--

Maelstrom — the first on-chain mixer for Tezos (XTZ)

Today we would like to introduce you to the Maelstrom protocol — the first on chain mixer DApp for Tezos (XTZ). The functionality of the protocol is divided into two user areas: the area for people who want to mix their Tezos anonymously and the area for people who provide liquidity for the protocol.

In addition to the description here, we provided videos to walk the lazy ones through the processes — please find them at the bottom of each section.

Head to https://maelstrom.fi to try it out.

Let’s dive into it.

With Maelstrom, the Tezos community finally gets access to an on-chain mixer, which decouples sender and receiver wallets of a Tezos-sending transaction.

1. If an user wishes to mix Tezos, he simply heads to the Maelstrom website and accesses the mixing section within the DApp. He will be prompted with an user-friendly UI, allowing him to specify the amount of Tezos he would like to mix and calculating the network fees for him. The network fees are shared in equal ratio between the liquidity providers (we will talk about them in the next section) and the owners (used for enhancing Maelstrom and developing further DApps).

2. After he confirmed the transaction, the user will receive a seed and root pair, which he needs to keep as a secret. Only with those two values he will later be able to withdraw his Tezos.

3. The user can then connect another wallet to the DApp (simply by clicking on the “switch wallets” button). Then he provides the seed, root and the amount he would like to withdraw of his mixed Tezos to the withdraw-UI and confirms the transaction.

4. If he provided a valid seed-root-pair, the protocol will transfer the requested amount of mixed Tezos to the wallet. If he did not withdraw the total balance, he needs to keep the new seed-root-pair, provided by the UI. The old pair will not be working anymore.
By this, each transaction is decoupled from the previous one and there is no logical link between wallets and/or transactions.

Video for the lazy people on the mixing process:

Video for the lazy people on the mixing process how-to-guide:

The Maelstrom protocol allows users to further dilute the transactions of the contract and increasing the privacy for every mixer by this. In return they are entitled to claim shares of the network fees, which the mixers are paying when using the protocol.

  1. If an user wishes to provide liquidity, he simply heads to the Maelstrom website and accesses the liquidity section within the DApp. He will be prompted with an user-friendly UI, allowing him to specify the amount of liquidity (in Tezos) he would like to add to the protocol.

1b. Depending on the provided liquidity, the user will be added to a liquidity bracket by the protocol. This will affect the amount of shares and the interval (days) in which he is allowed to claim fees. We will go into detail on this topic after in a few moments.

2. Claiming fees can be done via the DApp again. Once you provided liquidity, it will always display you if you can claim fees — and if not, when you can do so.
The claimed fees will be added to your provided liquidity.

3. We don’t want to trap anybody in. Therefore the user can withdraw any amount of his liquidity whenever he feels like it. In addition, the withdrawal of his liquidity can only happen to the wallet he provided it from. So nobody is able to get the users funds as longs as the user is the only one who knows the credentials of his wallet.

Video for the lazy people on the process of how to provide liquidity:

Video for the lazy people on the liquidity process how-to-guide:

Liquidity bracket example

All network fees provided by the mixers are accumulated within one big pot. The fees a liquidity provider claims are withdrawn from the pot, the user currently is assigned to. Here is the ratio of the pots:

Brackets an user can be assigned to according to the amount of liquidity he provided to the protocol.

Brackets:
Bracket 1: 1ꜩ — 50ꜩ
Bracket 2: 51ꜩ — 300ꜩ
Bracket 3: 301ꜩ and more

The amount of fees therefore depends on the bracket he is in. But there is a second variable, which is the ratio of the liquidity he provided to the total liquidity of his bracket. Let’s take a look at an abstract example:

We have an user who provided 100ꜩ. The protocol assigned him to bracket 2 and he is allowed to claim fees every two days.

Now two days went by and there are now 1000ꜩ as a total liquidity within the bracket 2. The user can then withdraw:

1 * total share of his bracket * ratio of the liquidity he provided for the bracket
1 * 0.33 * (100/1000) = 0.033 → 3.3% of all fees within the pot

Let’s pretend those 3.3% have been 10ꜩ.
After the user claimed those fees, they have been added to his liquidity, leaving him with 110ꜩ. He is still in bracket 3.

Claiming fees

That’s it for the short introduction. Stay save and keep your data where it belongs — to you.

--

--