UPDATE: I think the real question is what to use as Init code? The contract has no constructor. Can someone help on this?
Basically i am using openzeppelin Clones.sol contract to determine the deployed contract address(using implementation and the contract address that launches the contract) https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Clones.sol
I want to do the same thing on the client-side using etherJS. Apparently getCreate2Address does the same thing in js as create2 does in solidity. HOWEVER i am unable to get it to work. I verified that the salt generated is CORRECT(same as in contract), but i get different address from the one in the smart contract.
For init code, i copied the input created during the generation of the implementation contract(the one we are copying). For fromAddress i use the contract that launches the proxy contract.
The generated contractAddress in etherjs DOES NOT match the one in solidity :( What could i possibly be doing wrong? I am getting desperate at this point and have no clue how to resolve the issue.
Apparently the "initCode" should be the bytecode + concatenated constructor arguments (My contract has no arguments, so i just use the bytecode as initCode. Is this correct?
Am i inputting wrong init code? Because i don't know where else the problem could be. The salt generated in etherjs matches the solidity one, but the contract generated does not. Big F.
let userWallet = "myWallet" //user wallet address let specificId = 0 let fromAddress = "contract that launches the proxy" //MAIN CONTRACT let salt = ethers.utils.solidityKeccak256(["bytes", "uint256", "address"], [ethers.utils.hexZeroPad(ethers.utils.hexlify(1), 1), specificId, userWallet]) let initCode = "initCodeHere" let initCodeHash = ethers.utils.keccak256(initCode); //initcode should be bytecode let contractAddress = ethers.utils.getCreate2Address(fromAddress, salt, initCodeHash); console.log("SALT WORKS" + salt) console.log(contractAddress)