> For the complete documentation index, see [llms.txt](https://docs.phase.cash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.phase.cash/proxies/admin-upgradeable-proxy.md).

# Admin Upgradeable Proxy

The Admin Upgradeable Proxy is based on having the target stored on a specific storage slot changeable by the proxy's owner.

{% code title="AdminUpgradeableProxy.sol" overflow="wrap" lineNumbers="true" %}

```solidity
contract AdminUpgradeableProxy is ProxyOwnable, Proxy {
  bytes32 internal constant _IMPLEMENTATION_SLOT =
    bytes32(uint256(keccak256("proxy.implementation")) - 1);

  event Upgraded(address indexed _implementation);

  constructor(
    address _owner,
    address _target,
    bytes memory _initialCall
  );

  function upgradeTo(
    address _newImplementation,
    bytes memory _oldImplementationData,
    bytes memory _newImplementationData
  ) external;

  function implementation()
    public
    view
    override
    returns (address _implementation);

  function proxyType() public pure override returns (uint256 _type);

  function _setImplementation(address _newImplementation) internal;
}
```

{% endcode %}
