# "execution reverted: Address: low-level delegate call failed" Failed to Deploy Upgradeable contract - TransparentUpgradeableProxy

**URL:** <https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408>\
**Category:** Review Wanted\
**Tags:** proxies, bep20\
**Created:** [February 27, 2022, 11:12am UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408 "2022-02-27T11:12:30Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![djsinghinfo](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/djsinghinfo/32/13550_2.png) [@djsinghinfo](https://forum.openzeppelin.com/u/djsinghinfo)\
**Post date:** [February 27, 2022, 11:12am UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/1 "2022-02-27T11:12:30Z")

</div>

hi  
I am trying to deploy a smart contract, the error is showing

"execution reverted: ERC1967: new implementation is not a contract"

this is my smart contract code

```auto
contract TransparentUpgradeableProxy is ERC1967Proxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _changeAdmin(admin_);
    }

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external ifAdmin {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address) {
        return _getAdmin();
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

```

Full smart contract code :  
[https://ipfs.io/ipfs/QmWEaRjnZobQ2hyWg23qyu3NyADK2L2VJQTjf6b36jBP8m](https://ipfs.io/ipfs/QmWEaRjnZobQ2hyWg23qyu3NyADK2L2VJQTjf6b36jBP8m)

 ![Screenshot 2022-02-27 at 4.47.09 PM](https://us1.discourse-cdn.com/flex022/uploads/zeppelin/original/2X/b/be11996f36cbecb11979704bcbcf97c54f5a26fd.png)

---

<div class="post-metadata">

**Author:** ![Skyge](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/skyge/32/343_2.png) [@Skyge](https://forum.openzeppelin.com/u/Skyge)\
**Post date:** [February 27, 2022, 3:33pm UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/2 "2022-02-27T15:33:26Z")

</div>

Hi, welcome to the community1 👋

So what is your parameters when you deploy this contract?

```auto
address _logic, address admin_, bytes memory _data

```

---

<div class="post-metadata">

**Author:** ![djsinghinfo](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/djsinghinfo/32/13550_2.png) [@djsinghinfo](https://forum.openzeppelin.com/u/djsinghinfo)\
**Post date:** [February 27, 2022, 5:21pm UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/3 "2022-02-27T17:21:11Z")

</div>

address = 0xb496024f3840DA73b2DC9335835c5583C60709e3  
address = 0xf167768626456A800af25587C647F7A826989b80  
bytes memory = 0x00

---

<div class="post-metadata">

**Author:** ![Skyge](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/skyge/32/343_2.png) [@Skyge](https://forum.openzeppelin.com/u/Skyge)\
**Post date:** [February 28, 2022, 2:01am UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/4 "2022-02-28T02:01:31Z")

</div>

It seems like these parameters are ok, I deployed a contract on the BNB(BSC) TestNet, here is the [Contract Address 0x3445891f8ab9c5a56a51cea31b2d9a0b849ae652 | BscScan](https://testnet.bscscan.com/address/0x3445891f8ab9c5a56a51cea31b2d9a0b849ae652#code)

---

<div class="post-metadata">

**Author:** ![djsinghinfo](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/djsinghinfo/32/13550_2.png) [@djsinghinfo](https://forum.openzeppelin.com/u/djsinghinfo)\
**Post date:** [February 28, 2022, 5:06am UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/5 "2022-02-28T05:06:45Z")

</div>

parameter address not deployed on mainnet, I think that is why it's not working

---

<div class="post-metadata">

**Author:** ![Skyge](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/skyge/32/343_2.png) [@Skyge](https://forum.openzeppelin.com/u/Skyge)\
**Post date:** [March 2, 2022, 12:48pm UTC](https://forum.openzeppelin.com/t/execution-reverted-address-low-level-delegate-call-failed-failed-to-deploy-upgradeable-contract-transparentupgradeableproxy/25408/6 "2022-03-02T12:48:05Z")

</div>

> [@djsinghinfo](#):
>
> 0xb496024f3840DA73b2DC9335835c5583C60709e3

Yeah, when you want to deploy contracts on the mainnet, you should use the actual contracts just on the mainnet.
