Every function in Vyper needs an explicit decorator: `@external` for functions callable from outside the contract, `@internal` for helpers only callable via `self.`. There is no default visibility, unlike Solidity.
@external
def stake(amount: uint256):
self._credit(msg.sender, amount)
@internal
def _credit(user: address, amount: uint256):
self.balances[user] += amountA common convention mirrors Solidity: prefix internal helpers with an underscore so the intent is obvious at a glance.