# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.phase.cash/proxies/admin-upgradeable-proxy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
