I have an auction contract, where bidders bid with Ether then me (owner) select which offer is most suitable and thus this bidder is contract winner.

Once the winner is selected, I send him data as a reward. This data is sent off-chain.

Trying to think of a way to add privacy to my system, in terms of keeping bidders identity anonymous or the identity of the winner?

Is it possible that once contract is closed, when bidders withdraw their funds that amount is not kept public as well?

  • Blockchain is public ledger and there is lack of privacy. however will this help? if you store users address sha3 encrypted? and you can identify each users off-chain by sha3 hash again and compare both hashes? second thing. if users withdraw their ETH, then no way it is kept hidden. as tx sender and tx amount is public in ethereum by default Commented Jun 19, 2019 at 7:32
  • Thanks for your feedback, I'm just a bit confused. How will the user register for the bidding contract in this case, if we'll encrypt the addresses off-chain?
    – user51821
    Commented Jun 19, 2019 at 8:37
  • hmm you are right.. when bidder bid, then his address will be public as msg.sender is public. so.. in the contract if you want to store the data about bidders, you can sha3. But yea.. I can only think of this task is challenging to achieve.. unless you come up with grand idea.. hahahah Commented Jun 19, 2019 at 9:04
  • or if you can process get users address and fund off-chain.. and then make a call to function in a owner only function.. and provide bidders encrypted data.. and use it.. that way, this can be partially hidden. Commented Jun 19, 2019 at 9:07
  • There are work-arounds which seeks to add confidentiality and anonymity to public blockchains like ethereum, you can have a look at how elgamal encryption and proofs work (which are being implemented in a project called Zether). With that being said, like with everything in life, it's a rather complex task to go against the nature :)
    – 6egic
    Commented Jun 19, 2019 at 15:52

2 Answers 2


We've been working on enabling truly private auctions. You still need to add some type of tx privacy to conceal the bids permanently, but you can do private auctions (without commit reveal) using Enigma.

-- technical walkthrough (this is out of date, sadly) -- discussion of commit-reveal and replacing it with Enigma-style secret contracts.

But candidly, what you've described doesn't sound like a pure auction, as you are selecting based off of other information as well (i.e., your preference?) let me know if that's not the case. But if it is, you're describing some type of access-control to data.


First off your question is not very clear. But I think you mean how do we conceal the balances amount?

You need to make your _balances or balances private. Whatever data structure or mapping that keeps track of balances or who has what needs to be set to private.

It is possible to conceal a balance but everyone then would seemingly have zero tokens despite it actually being there. The key is to see if the person who has the tokens can see if they have them and other can't. The answer is we don't know how to do that on ethereum so good luck.

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.