Skip to main content


In Aztec there are multiple different types of visibility that can be applied to functions. Namely we have data visibility and function visibility. This page explains these types of visibility.

For a practical guide of using multiple types of data and function visibility,follow the token tutorial.

Data Visibility

Data visibility is used to describe whether the data (or state) used in a function is generally accessible (public) or on a need to know basis (private).

Function visibility

This is the kind of visibility you are more used to seeing in Solidity and more traditional programming languages. It is used to describe whether a function is callable from other contracts, or only from within the same contract.

By default, all functions are callable from other contracts, similarly to the Solidity public visibility. To make them only callable from the contract itself, you can mark them as internal. Contrary to solidity, we don't have the external nor private keywords. external since it is limited usage when we don't support inheritance, and private since we don't support inheritance and it would also be confusing with multiple types of private.

A good place to use internal is when you want a private function to be able to alter public state. As mentioned above, private functions cannot do this directly. They are able to call public functions and by making these internal we can ensure that this state manipulating function is only callable from our private function.


Note that non-internal functions could be used directly as an entry-point, which currently means that the msg_sender would be 0, so for now, using address 0 as a burn address is not recommended. You can learn more about this in the Accounts concept page.

To understand how visibility works under the hood, check out the Inner Workings page.