Limitations
The Aztec stack is a work in progress. Packages have been released early, to gather feedback on the capabilities of the protocol and user experiences.
What to expect?
- Regular Breaking Changes;
- Missing features;
- Bugs;
- An 'unpolished' UX;
- Missing information.
Why participate?
Front-run the future!
Help shape and define:
- Previously-impossible smart contracts and applications
- Network tooling;
- Network standards;
- Smart contract syntax;
- Educational content;
- Core protocol improvements;
Limitations developers need to know about
- It is a testing environment, it is insecure, and unaudited. It is only for testing purposes.
msg_senderis currently leaking when doing private -> public calls- The
msg_senderwill always be set, if you call a public function from the private world, themsg_senderwill be set to the private caller's address. - There are patterns that can mitigate this.
- The
- The initial
msg_senderis-1, which can be problematic for some contracts. - The number of side-effects attached to a tx (when sending the tx to the mempool) is leaky. At this stage of development, this is intentional, so that we can gauge appropriate choices for privacy sets. We have always had clear plans to implement privacy sets so that side effects are much less leaky, and these will be in place come mainnet.
- A transaction can only emit a limited number of side-effects (notes, nullifiers, logs, l2->l1 messages), see circuit limitations.
- We haven't settled on the final constants, since we're still in a testing phase. But users could find that certain compositions of nested private function calls (e.g. call stacks that are dynamic in size, based on runtime data) could accumulate so many side-effects as to exceed tx limits. Such txs would then be unprovable. We would love for you to open an issue if you encounter this, as it will help us decide on adequate sizes for our constants.
- There are lots of features that we still want to implement. Checkout github and the forum for details. If you would like a feature, please open an issue on github!
WARNING
Do not use real, meaningful secrets in Aztec's testnets. Some privacy features are still being worked on, including ensuring a secure "zk" property. Since the Aztec stack is still being worked on, there are no guarantees that real secrets will remain secret.
Limitations
There are plans to resolve all of the below.
It is not audited
None of the Aztec stack is audited. It's being iterated-on every day. It will not be audited for quite some time.
Under-constrained
Some of our more-complex circuits are still being worked on, so they will still be be underconstrained.
What are the consequences?
Sound proofs are really only needed as a protection against malicious behavior, which we're not testing for at this stage.
Keys and Addresses are subject to change
The way in which keypairs and addresses are derived is still being iterated on as we receive feedback.
What are the consequences?
This will impact the kinds of apps that you can build with the Local Network, as it is today:
Please open new discussions on discourse or open issues on github, if you have requirements that aren't-yet being met by the local network's current key derivation scheme.
No privacy-preserving queries to nodes
Ethereum has a notion of a 'full node' which keeps-up with the blockchain and stores the full chain state. Many users don't wish to run full nodes, so rely on 3rd-party 'full-node-as-a-service' infrastructure providers, who service blockchain queries from their users.
This pattern is likely to develop in Aztec as well, except there's a problem: privacy. If a privacy-seeking user makes a query to a 3rd-party 'full node', that user might leak data about who they are, or about their historical network activity, or about their future intentions. One solution to this problem is "always run a full node", but pragmatically, not everyone will. To protect less-advanced users' privacy, research is underway to explore how a privacy-seeking user may request and receive data from a 3rd-party node without revealing what that data is, nor who is making the request.
No private data authentication
Private data should not be returned to an app, unless the user authorizes such access to the app. An authorization layer is not-yet in place.
What are the consequences?
Any app can request and receive any private user data relating to any other private app. Obviously this sounds bad. But the local network is a sandbox, and no meaningful value or credentials should be stored there; only test values and test credentials.
An auth layer will be added in due course.
No bytecode validation
For safety reasons, bytecode should not be executed unless the PXE/Wallet has validated that the user's intentions (the function signature and contract address) match the bytecode.
What are the consequences?
Without such 'bytecode validation', if the incorrect bytecode is executed, and that bytecode is malicious, it could read private data from some other contract and emit that private data to the world. Obviously this would be bad in production. But the local network is a sandbox, and no meaningful value or credentials should be stored there; only test values and test credentials.
There are plans to add bytecode validation soon.
Insecure hashes
We are planning a full assessment of the protocol's hashes, including rigorous domain separation.
What are the consequences?
Collisions and other hash-related attacks might be possible in the local network. Obviously that would be bad in production. But it's unlikely to cause problems at this early stage of testing.
msg_sender is leaked when making a private -> public call
There are ongoing discussions [here](https://forum.aztec.network/t/what-is-msg-sender-when-calling-private-public-plus-a-big-foray-into-stealth-addresses/7527 (and some more recent discussions that need to be documented) around how to address this.