# Using Proxy Pattern

This process builds on OpenZeppelin's upgradable contracts - replacing [`ProxyAdmin`](https://docs.openzeppelin.com/contracts/3.x/api/proxy#ProxyAdmin) with Ironblocks' [`FirewallProxyAdmin`](/firewall/smart-contracts/firewallproxyadmin.sol.md) and replacing [`TransparentUpgradableProxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy#TransparentUpgradeableProxy) with Ironblocks' [`FirewallTransparentUpgradableProxy`](/firewall/smart-contracts/firewalltransparentupgradableproxy.sol.md) *(both of which inherit from their OpenZeppelin counterpart)*.

## Step By Step

1. Deploy our [`FirewallProxyAdmin`](/firewall/smart-contracts/firewallproxyadmin.sol.md) contract.\
   \
   You'll interact with this contract to perform administrative tasks on your proxy *(most commonly upgrading your protocol's underlying implementation contract)*.<br>
2. Deploy our [`FirewallTransparentUpgradableProxy`](/firewall/smart-contracts/firewalltransparentupgradableproxy.sol.md) contract with the following parameters:<br>
   1. `_logic`\
      The address of your implementation contract<br>
   2. `admin_`\
      The address of the `FirewallProxyAdmin` contract *(the one we deployed in Step 1 above)*<br>
   3. `_data`\
      Optional initialization data<br>
   4. `_firewall`\
      The address of Ironblocks' Firewall contract *(see* [*Addresses*](/firewall/addresses.md)*)*<br>
   5. `_firewallAdminAddress`\
      The address of your firewall administrator *(this is the contract or person that will manage policies for your firewall)*.<br>
   6. That's it!\
      Your smart contracts are now ready to use Ironblocks' Firewall.

> This is the suggested implementation method for upgradable contracts

## Next Steps

* Head on to the [Configuration](/firewall/configuration.md) section to learn more about security policy management.<br>
* Review our [Smart Contracts](/firewall/smart-contracts.md)


---

# 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.ironblocks.com/firewall/quick-start/using-proxy-pattern.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.
