I am attempting to make a factory that deploys proxies pointing to an implementation contract. How am I supposed to deploy this correctly during migrations using truffle. Also, do I need to deploy a new ProxyAdmin contract with every deployment and the owner be the DAO that I want to be able to upgrade the contracts, or can I just have one ProxyAdmin contract that controls all of the proxies then transfer the ownership to a DAO that I want to have admin rights? What would be the correct way to test this? Because I am using a factory with deploy from ProxyFactory, I have to have the address of the implementation, so how do I deploy the implementation contract?(deployProxy or deployer.deploy and do I leave it uninitialized in that case) Thank you so much for any help!
Yes, you can just use one ProxyAdmin
contract to control all proxy contracts.
I think you can write as followings to deploy a proxy contract and initialize it.
await upgrades.deployProxy(Implementation_Contract, [Initialize_Parameters], {initializer: 'initialize'});
And maybe you can have a look at this tutorial: OpenZeppelin Upgrades: Step by Step Tutorial for Truffle - Smart Contracts / Guides and Tutorials - OpenZeppelin Community