Closed TomAFrench closed 3 years ago
Thanks @TomAFrench agree it is better this way.
I think it make sense to have it for getContractFactory.
I was also thinking to add a deploy function that behave like hardhat-deploy deploy function but return an instantiated ethers contract and we could also use generic type parameter there
Cool, just chucked in a new PR for the factories.
re deploy function: I'm not entirely sure what behaviour you're wanting to bring over. I've been seeing a fair number of projects implementing helper functions similar to https://github.com/balancer-labs/balancer-core-v2/blob/master/lib/helpers/deploy.ts
Do you mean this or more along the lines of stuff like deterministic deployments, etc?
Basically have the equivalent of deployments.deploy
(which will save the deployment on disk) but that returns an instantiated ethers contract. This way in your deploy script you can do:
const MyContract = await ethers.deployContract<MyContract>("MyContract", {from: deployer, args: [...]});
const tx = await MyContract.test();
await tx.wait();
I find that quite often when I try to load a contract with the correct typechain type I have to do a cast which looks something like
This seems quite ugly to me and would prefer this function being a generic where we can pass in any subtype of
ethers.Contract
and get that subtype out. This would change the above to something likeThis is much more readable in my opinion compared to having to await then cast. Of course if no type is provided then we get out an
ethers.Contract
type so it's backwards compatible for those who don't use this feature.We could do something similar to the
getContractFactory
function but I wanted to gauge your opinion first.