I am interested what is the best way to hide contract function calls and contract state details from everyone except certain parties (if that is possible at all).

Encryption sounds like a possible solution so at least the state of the contract can be kept in a secure way, but from what I understand it would be very inefficient and it also doesn't solve the problem of the contract method calls being visible. Also how would you provide in a secure way the private key to a contract in order to decrypt the storage data?

Are there any other solutions?

1 Answer 1


There's no way to hide exactly how a contract executed from the world at large. It's possible to debug, step-by-step, any transaction, as the EVM is deterministic. It is also possible to read every byte of a contract's storage. In addition, a contract may never have access to a private key, or the private key can be read.

That said, there's a number of options, but they do tend to require a specific architecture. Here is an overview by Vitalik Buterin of options, some of which are currently theoretical.

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.