Clone smart contract upgradeable

Hello forum members, I have questions related to smart contract upgreadeble:


  1. I have contract proxy A (pA) and current implement (iA)
  2. If I have contract called Factory and it has the function createNewContract, inside that function I use clone from ClonesUpgradeable libs, so I want to clone the contract A, clone function return me address then I used Interface of iA to call initialize(param, ...)


  1. In that case the correct address I pass to clone is ClonesUpgradeable.clone(pA) or
    ClonesUpgradeable.clone(iA), I tried it, when I used pA, its does not work, but its work fine with iA.
  2. So let say I have a base smart contract (A), I want to clone contract B C D from that contract, will it be different contract and storage?