UUPS Pattern
The Universal Upgradeable Proxy Standard, or UUPS, is a pattern where the upgrade logic is stored within the implementation contract rather than the proxy contract. This makes the proxy itself extremely lightweight and cheaper to deploy, as it only needs to handle the delegation of calls.
To upgrade the contract, the admin calls a function in the implementation, which then updates the proxy's pointer to a new implementation. This approach is generally considered more gas-efficient than the transparent proxy pattern because it removes the need for the proxy to check the msg.sender for every single call.
However, it requires the implementation to include the upgrade logic, meaning if a developer forgets to include the upgrade function in a new version, the contract could become permanently un-upgradeable.