Is it possible to fake a global/shared private state?

hi :slight_smile:
is it possible to have an Aztec contract that stores a secret value that will be made public only after a requirement is met?
requirement can be an ETH L1 block.header with timestamp > the year 2024.
Would it be safe to assume that only the owner(s) of the contract source code would be able to “cheat” to get the value out? or not even with that if the secret value is initialized on another contract?
Is this still “cheatable” in any other way? (i.e. by the “sequencer”)


Good question, and I’m not sure it’s possible. For sure you can design some system for whoever holds the secret value to be incentivised to reveal it once the condition is met (ie they get a reward). But I don’t think you have any native mechanism to do it, since there is no global private state - someone always holds the keys to it.

Maybe @LHerskind can think of a valid mechanism…?


As I understand it, you want to hide data until time X, where it is leaked automatically?

  • To leak the data, you need to know the data. As @spalladino mentions someone holds the key, and that someone is not a contract. Therefore you cannot make it happen by itself if in commitments, you could however look at timelocks similar to what Aragon have been looking at for the nounsdao project, The Time NounsDAO Got Private Voting | by Aztec Labs | The Aztec Labs Blog | Medium
  • If you know the data, nothing really stops you from leaking it, you could broadcast it if you want (but as mentioned only the owner would know).

As @spalladino suggests you can incentivise it to be leaked when the requirements are met, could be reward, or could be that any action on the contract by the owner require them to emit the data publicly as part of it as well, e.g., to get back some staked assets the owner need to spill the beans and tell the secret.