Problem with Factory of TransparentUpgradeableProxy: execution reverted: Address: low-level delegate call failed

I have the following code for a Factory that creates instances of a contract that is Upgradeable . I understand that, in order to achieve this, one of the options I have is to use TransparentUpgradeableProxy (actually, when I first deployed using Hardhat -and it worked- this is what it was done under the hood):

:1234: Code to reproduce


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import "../multiwrap/SmartWallet.sol";
import "../proxy/SmartWalletProxy.sol";

contract SmartWalletFactory {
    mapping(uint256 => address) private smartWallets;
    SmartWalletProxy immutable proxy;

    constructor(address _initialImpl) {
        proxy = new SmartWalletProxy(_initialImpl);

    function createSmartWallet(
        uint256 _smartWalletId,
        address _defaultAdmin,
        string memory _name,
        string memory _symbol,
        string memory _contractURI,
        address[] memory _trustedForwarders,
        address _royaltyRecipient,
        uint256 _royaltyBps
      ) public {
        TransparentUpgradeableProxy smartWallet = new TransparentUpgradeableProxy(address(proxy), address(0), abi.encodeWithSelector(SmartWallet(payable(address(0))).initialize.selector, _defaultAdmin, _name, _symbol, _contractURI, _trustedForwarders, _royaltyRecipient, _royaltyBps));
        smartWallets[_smartWalletId] = address(smartWallet);


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol";
import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";

contract SmartWalletProxy is Ownable {
    TransparentUpgradeableProxy immutable proxy;
    address public smartWalletImplementation;

    constructor(address _initialImpl) {
        proxy = new TransparentUpgradeableProxy(_initialImpl, address(0), "0x");
        smartWalletImplementation = _initialImpl;

    function upgrade(address _newImpl) public onlyOwner {
        smartWalletImplementation = _newImpl;


So I first deploy SmartWallet as my implementation contract and then I want to deploy the SmartWalletFactory using the address of SmartWallet as input.

The problem I am having is that I am getting the following error (using Remix):

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Internal JSON-RPC error.
"code": 3,
"message": "execution reverted: Address: low-level delegate call failed",
"data": "0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000027416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000000000000000000000000000000"

:computer: Environment


Does anybody know what this error could be? Thanks!