wighawag / hardhat-deploy

hardhat deployment plugin
MIT License
1.2k stars 296 forks source link

can't seem to get openzeppelin upgradeable contracts working.. #301

Open zfogg opened 2 years ago

zfogg commented 2 years ago

Describe the bug My chosen init and onUpgrade execute functions just error when deploying and upgrading my contracts, instead of executing properly. There is some message about gas estimation.. ?_?

To Reproduce Steps to reproduce the behavior:

  1. make a contract that uses openzeppelin's upgradeable contracts
  2. try to deploy them with hardhat-deploy and have their initialize function run
  3. Check my sample config: image
  4. See the error below:
Error: ERROR processing /Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/deploy/00_[REDACTED].js:
Error: cannot estimate gas; transaction may fail or may require manual gas limit (error={"name":"ProviderError","code":3,"_isProviderError":true,"data":"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564000000000000000000000000000000000000"}, method="estimateGas", transaction={"from":"0x3E57Db6CaA442F63bD5dCd2F5C510864E3497aD9","to":"0x78D2e649b6560069E759b7c449F748b5dA7df1C6","data":"0x9623609d000000000000000000000000a3cd81f6819cb5f069f6a251484bd861df8d144a0000000000000000000000005f113a6987bad190811b07394937860868f56e39000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4463fd1af00000000000000000000000000000000000000000000000000000000000000600000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c778417e063141139fce010982780140aa0cd5ab000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f737175617265737570706c792e6d7970696e6174612e636c6f75642f697066732f516d5136354458515074624c486341687569434a6a7571647973784d6e42516a506864516d7872726341543754332f000000000000000000000000000000000000000000000000000000000000000000000000","accessList":null}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.5.1)
    at Logger.makeError (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/logger/src.ts/index.ts:225:28)
    at Logger.throwError (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/logger/src.ts/index.ts:237:20)
    at checkError (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:80:16)
    at Web3Provider.<anonymous> (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:562:20)
    at step (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
    at Object.throw (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
    at rejected (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at DeploymentsManager.executeDeployScripts (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1222:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at DeploymentsManager.runDeploy (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1052:5)
    at SimpleTaskDefinition.action (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:422:5)
    at Environment._runTaskDefinition (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:217:14)
    at Environment.run (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:129:14)
    at SimpleTaskDefinition.action (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:568:32)
    at Environment._runTaskDefinition (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:217:14)
    at Environment.run (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:129:14)
    at SimpleTaskDefinition.action (/Users/zfogg/src/github.com/joopal/scaffold-corners/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:653:5)

Expected behavior Basically the initialize function that openzeppelin uses in place of a constructor should be run on deploy and upgrade. instead, this error occurs.

versions

Additional context I am trying to deploy on Rinkeby! It's basically an ERC1155. I'm not sure why it gives this weird gas error when it should be running the initialize function i describe with the arguments i pass. i am able to run that function just fine myself after deploying this, manually...

wighawag commented 2 years ago

Usually openzeppelin initialize function cannot be executed twice, so I guess you have to remove the onUpgrade param

zfogg commented 2 years ago

but it errors even on deploy..

wighawag commented 2 years ago

the error you posted is an error happening in the solidity code I would need to see that to help further, but if it fails also at deploy, check your require or other thing that could fails in your initialization function

ivnminin commented 2 years ago

When is the right time to use these methods?

execute?:
        | {
            methodName: string;
            args: any[];
          }
        | {
            init: {
              methodName: string;
              args: any[];
            };
            onUpgrade?: {
              methodName: string;
              args: any[];
            };
          };

maybe some examples? ps: when i used this method I can not update contract (Error: cannot estimate gas; transaction may fail or may require manual gas limit).

execute?:
        | {
            methodName: "initialize";
            args: any[];
          }

Thank you.