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 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).
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 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
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.