Decentralized Ether Mixer Smart Contract

An Ether mixer contract allows multiple parties to deposit and withdraw funds using many different anonymous addresses.

Due to the promise of transparency, most cryptocurrency transactions are publicly broadcasted on the blockchain. Because many people want to keep when they receive money (or who it comes from) private, the Ethereum mixing service has come up with a solution. Most mixing services, however, rely on a centralized third party. Using a third party platform requires a lot of trust.

The Decentralized Ether Mixer Smart Contract does not rely on a centralized third party and takes the needed trust out of the equation. The Ether Mixer allows users to handle multiple anonymous addresses for withdrawals. Every anonymous address used during the mixing process has to contain a small amount of Ether in order for it to work. Ether can be obtained through mining, by using a faucet, or through purchase with fiat currency. The new Ether Mixer contract also reprimands dishonest users by taking away their initial deposit. Even if it’s as little as one Ether, they will lose their funds trying to “trick the system.”

This Ethereum mixing service is just in a PoC (proof of concept) phase rather than a working project and is mainly presented to raise academic discussion on the subject.

Contract Overview:

The contract has 6 main API functions: 1. create_new_deal. This function can be called by anyone. It defines parameters for a new mixing deals. The parameters are: minimal number of participants, registration deposit size and duration of each phase (i.e., how many minutes a day last). If the minimal number of participants is not achieved in the first day, then all participants can withdraw their deposit after that day. The function returns an identifier for the new deal. 2. make_initial_deposit. API for the public deposit. msg.value is the value of the deposit. 3. make_anonymous_registration. API for claim registration. The callee specifies the value of the claim. msg.value should be set to the registration deposit value. 4. make_anonymous_withdraw. API for withdrawing the claim. This function can be called only if the anonymous claims are valid. 5. reveal_registration. API for the revealing phase. 6. public_withdraw. Should be used after the reviling phase is over or if there are not enough participants.

In addition there are two constant status functions: 1. get_deal_state. Returns the state of the deal (0 if the deal was never created). 2. get_deal_status. Returns the parameters of a deal.

The contract was deployed and partially tested in Ethereum's testnet. An honest deal with three parties who deposit 0.01, 0.02 and 0.04 Ether can be viewed here (note that the contract balance is 0). A dishonest deal can be viewed here (note that the contract balance is positive).

The Ether Mixer smart contract was created by Yaron Velner, a postdoctoral researcher at the Hebrew University of Jerusalem. His current research interests are formal methods in game theory with applications to smart contracts. To learn more about the Ether Mixer, head over to its GitHub page