# How does the proxy created by ProxyFactory work?

**URL:** <https://forum.openzeppelin.com/t/how-does-the-proxy-created-by-proxyfactory-work/2812>\
**Category:** SDK\
**Created:** [May 6, 2020, 11:53pm UTC](https://forum.openzeppelin.com/t/how-does-the-proxy-created-by-proxyfactory-work/2812 "2020-05-06T23:53:31Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kseniya](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/kseniya/32/334_2.png) [@kseniya](https://forum.openzeppelin.com/u/kseniya)\
**Post date:** [May 6, 2020, 11:53pm UTC](https://forum.openzeppelin.com/t/how-does-the-proxy-created-by-proxyfactory-work/2812/1 "2020-05-06T23:53:31Z")

</div>

Hi all. Not sure if this deserves it’s own issue but it’s on the topic of minimal proxies ([Issues initializing EIP-1167 minimal proxies deployed with factory contract](https://forum.openzeppelin.com/t/issues-initializing-eip-1167-minimal-proxies-deployed-with-factory-contract/2039)). I’m understanding how the `deployMinimal` function works in the `ProxyFactory` contract to deploy proxies, but I don’t understand how the proxy that is created works since the examples I’ve seen do not have the `implementation` contract (the one you are making clones of) inheriting the `Proxy` contract which has the delegatecall functionality.

Looking at the example listed above, the `Forwarder.sol` contract, is not inheriting the OpenZeppelin `Proxy` contract. If the `Forwarder` contract had additional functions that the proxy owner could call, how do those calls get forwarded to the deployed `implementation` contract?

---

<div class="post-metadata">

**Author:** ![abcoathup](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/abcoathup/32/415_2.png) [@abcoathup](https://forum.openzeppelin.com/u/abcoathup)\
**Post date:** [May 7, 2020, 8:16am UTC](https://forum.openzeppelin.com/t/how-does-the-proxy-created-by-proxyfactory-work/2812/2 "2020-05-07T08:16:42Z")

</div>

Hi @kseniya,

The _minimal proxy_ is a simple contract that just _delegates_ all calls to a logic contract. A _delegate call_ is similar to a regular call, except that all code is executed in the context of the caller, not of the callee. Meaning that the state is with the _minimal proxy_ and there can be multiple _minimal proxies_ all pointing to the one logic contract.

The logic contract doesn’t need any proxy functionality. The only thing it may need is an `initialize` function, and so can inherit from `Initializable` to use the `initializer` modifier to ensure that `initialize` is only called once.

I suggest reading (if you haven’t already): [Deep dive into the Minimal Proxy contract](https://forum.openzeppelin.com/t/deep-dive-into-the-minimal-proxy-contract/1928)

Feel free to ask all the questions that you need.
