What approaches are practicable to enhance anonymity in smart contracts?

P.S.1: Some proposals have been proposed such as Hawk or ZoE project ;however, I am looking for other approaches.

P.S.2 : Address clustering: A common approach to analyze the anonymity is to extract information of the transactions in the blockchain, meaning that from which addresses the coins comes and to which addresses it goes. Address clustering is one of the approaches to de-anonymize users. Different techniques are employed for such clustering [1, 2, 3, 4]. So, relying only on pseudonymity seems cannot be enough to preserve anonymity of users.

P.S.3: Mixing: Another approach to anonymize transactions is Mixing. One of mixing approaches is CoinJoin [5] in which several users create together a transaction with multiple input and output addresses. One of the problems of this method is transaction validation such that a valid transaction must be signed by all participated users and so anonymous participants can prevent transaction validation when they does not sign mixing transaction in which they take part. So, Mixing approach is vulnerable.


  1. Reid, Fergal, and Martin Harrigan. "An analysis of anonymity in the bitcoin system." Security and privacy in social networks. Springer, New York, NY, 2013. 197-223.
  2. Androulaki, Elli, et al. "Evaluating user privacy in bitcoin." International Conference on Financial Cryptography and Data Security. Springer, Berlin, Heidelberg, 2013.
  3. Ron, Dorit, and Adi Shamir. "Quantitative analysis of the full bitcoin transaction graph." International Conference on Financial Cryptography and Data Security. Springer, Berlin, Heidelberg, 2013.
  4. Meiklejohn, Sarah, et al. "A fistful of bitcoins: characterizing payments among men with no names." Proceedings of the 2013 conference on Internet measurement conference. ACM, 2013.
  5. Maxwell, Greg. "CoinJoin: Bitcoin privacy for the real world." Post on Bitcoin forum. 2013.
  • 1
    I think it would help if you elaborate a bit further. What sort of anonymity are you looking for? To some extent Ethereum is already anonymous - you only see public addresses. Nov 20, 2018 at 12:11
  • Yes Thank you, but i mean an approach to prevent de-anonymization such as address clustering etc such that it would not be possible (or be difficult) to de-anonymize a user who is behind an address. I extend my question. Thanks
    – Questioner
    Nov 20, 2018 at 12:55
  • 2
    After your edit: as Ethereum does not support UTXO (so we have one input, one output) so we can implement mixing by pooling Ethers in a smart contract and sending out from the contract. There are Ethereum mixing services around, both with contracts and without (out-of-blockchain). Nov 20, 2018 at 13:23
  • Thanks, Could you please mention a sophisticated example of smart contract implementing mixing by pooling Ethers ? Thank you
    – Questioner
    Nov 20, 2018 at 13:37

1 Answer 1


As mentioned in the comments, Ethereum does not support UTXO like Bitcoin does. So Ethereum has always one input and one output.

Just to make sure what I mean here with Ethereum mixing (sometimes called coin tumbling) : a service which obscures an Ether transaction's sender/receiver. A direct Ether transaction always includes information about who sent it and who received it. A mixing service in Ethereum aims to obscure this information.

Mixing in Ethereum can be performed in two ways (and there are services which utilize either of the options):

1) Write a smart contract which accepts Ether transactions and stores the received Ethers inside the contract. After enough such Ether transactions have been received (or after a time interval, or something else), it sends out corresponding Ether transactions to the intended receivers. This way it's impossible to know (in theory) which input corresponds to which output from the contract.

Here's one example of a contract mixer: https://www.ethnews.com/decentralized-ether-mixer-smart-contract

2) A backend solution. Users send Ethers to a wallet A and an outside blockchain system uses another wallet B to transfer the desired amount of Ethers to the receivers. I'm unsure how the two wallets' balances are then balanced - probably they just send all the Ether from wallet A to wallet B at regular intervals.

I cannot provide an example of this approach as it doesn't involve any Solidity code. You just have to create two public addresses (wallets) and then a backend system which has the following functionality:

2a) Monitor incoming transaction to wallet A

2b) Send out transactions from wallet B

2c) Balance the wallet balances at certain intervals by transferring all Ethers from wallet A to wallet B. This transaction may even use an external mixing service from the first option to further obfuscate the connection between wallet A and B.

  • Thank you, just two questions: (1) Is there an solidity example contract which implements first approach ? (2) The example that you mentioned (i.e. contract mixer) is an example of second approach? Thanks
    – Questioner
    Nov 20, 2018 at 13:59
  • 1
    Edited my answer accordingly. Nov 20, 2018 at 14:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.