External

When would you use External function vs Public function?

Public

Public functions are also part of the contract interface and can be called either internally or via message calls.

Internal

Internal functions can only be accessed from within the current contract or contracts deriving from it. They cannot be accessed externally.

Private

Private functions are like internal ones but they are not visible in derived contracts