# Timelock for upgradeable contracts

**URL:** <https://forum.openzeppelin.com/t/timelock-for-upgradeable-contracts/42148>\
**Category:** Smart Contracts\
**Tags:** proxies\
**Created:** [November 13, 2024, 7:44am UTC](https://forum.openzeppelin.com/t/timelock-for-upgradeable-contracts/42148 "2024-11-13T07:44:47Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Zartaj](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/zartaj/32/19230_2.png) [@Zartaj](https://forum.openzeppelin.com/u/Zartaj)\
**Post date:** [November 13, 2024, 7:44am UTC](https://forum.openzeppelin.com/t/timelock-for-upgradeable-contracts/42148/1 "2024-11-13T07:44:47Z")

</div>

Use case - Adding time delay for upgrading a proxy.

Example - [mETH protocol](https://docs.mantle.xyz/meth/concepts/risk-management/upgradability-and-timelock).

- mETH protocol uses timelock as the [ProxyAdmin](https://github.com/mantle-lsp/contracts/blob/5c1e61117676b6bd25ef130e07ce773d501ca5a3/script/helpers/Proxy.sol#L90), means they don't deploy the seperate ProxyAdmin Contract.

 ![image](https://us1.discourse-cdn.com/flex022/uploads/zeppelin/original/3X/6/7/67222b7eb8c0c0403c587398875330bb74538516.png)

**Question** :  
But OZ V5.0 onwards, the transparent upgradeable proxy automatically deploys the proxy admin from within the constructor.  
In this case, what should be the workaround? Assigning the timelockController as the admin for [ProxyAdmin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/448efeea6640bbbc09373f03fbc9c88e280147ba/contracts/proxy/transparent/ProxyAdmin.sol#L27) itself? Does it seem like a good way? Or are there any other route I should look into?

EDIT: Additional Query - If we already have an on-chain governance, which utilizes `timelockController`, then does it make sense to include separate timelock admin for the proxy, knowing that the upgrades will go through governance? Which means, we can set the delay form governance timelock itself.
