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, insecure and unaudited. It is only for testing purposes.
msg_senderis currently leaked when making private -> public calls.- The
msg_senderis always set. If you call a public function from the private world, themsg_senderis 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 transaction (when sending the transaction 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 clear plans to implement privacy sets so that side effects are much less leaky, and these will be in place for mainnet.
- A transaction can only emit a limited number of side-effects (notes, nullifiers, logs, L2->L1 messages). See circuit limitations.
- We have not settled on the final constants, since we are still in a testing phase. You could find that certain compositions of nested private function calls (for example, call stacks that are dynamic in size, based on runtime data) could accumulate so many side-effects as to exceed transaction limits. Such transactions would then be unprovable. Please open an issue if you encounter this, as it will help us decide on adequate sizes for our constants.
- There are many features that we still want to implement. Check out 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 testnets. Some privacy features are still in development, including ensuring a secure "zk" property. Since the Aztec stack is still being developed, 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 is being iterated on every day. It will not be audited for quite some time.
Under-constrained
Some of our more complex circuits are still in development, so they are still under-constrained.
What are the consequences?
Sound proofs are really only needed as a protection against malicious behavior, which we are 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 are not 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 do not wish to run full nodes, so they rely on third-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 is a problem: privacy. If a privacy-seeking user makes a query to a third-party full node, that user might leak data about who they are, 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 third-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. This sounds problematic, but the local network is a sandbox, and no meaningful value or credentials should be stored there - only test values and test credentials.
An authorization layer will be added in due course.
No bytecode validation
For safety reasons, bytecode should not be executed unless the PXE (Private eXecution Environment) or wallet has validated that the user's intentions (the function signature and contract address) match the bytecode.