Can contracts have secrets? In other words, could I create a contract that holds some information only to release it when some conditions are met? As I understand it, this isn't possible because the entire state of the contract is always available to the network. Since even an encrypted piece of information must have its encryption key somewhere on-chain, there doesn't seem to be a way to achieve this. Is there something that I'm missing?