Search code examples
javascriptethereumtruffle

TypeError: Cannot read property '_alreadyWrapped' of undefined


I created a project that integrates the truffle and react frameworks,Then I configured rinkeby test network of Ethereum in truffle-config.js.But, when I migrate the contract to rinkeby network, something went wrong.

truffle compile    
truffle migrate  --network rinkeby

Then came some mistakes

TypeError: Cannot read property '_alreadyWrapped' of undefined
    at Object.wrap (C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\provider\wrapper.js:13:1)
    at Object.wrap (C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\provider\index.js:9:1)
    at Object.create (C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\provider\index.js:14:1)
    at TruffleConfig.get [as provider] (C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\config\dist\configDefa
ults.js:189:1)
    at Object.detect (C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\environment\environment.js:19:1)
    at C:\Users\Lsy\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\commands\migrate.js:192:1
Truffle v5.1.1 (core: 5.1.1)
Node v12.13.0

The Project directory is shown below:

enter image description here

truffle-config.js

 const path = require("path");
    const HDWalletProvider = require('@truffle/hdwallet-provider');
    const fs = require('fs')  

    let secrets;
    console.log(path.join(__dirname, "secrets.json"));

    if (fs.existsSync(path.join(__dirname, "secrets.json"))){
      secrets = JSON.parse(fs.readFileSync(path.join(__dirname, "secrets.json"),'utf8'));
    }else{
      console.log("secrets.json doesn't exist!")
    }

    module.exports = {
      contracts_build_directory: path.join(__dirname, "client/src/contracts"),
      networks: {
        ganache:{
          host:"127.0.0.1",
          port:7545,
          network_id:"*"
        },
        develop: {
          port: 8545
        },
        rinkeby:{
          provider:()=>{
            new HDWalletProvider(secrets.mnemonic,"https://rinkeby.infura.io/v3/"+secrets.infuraProjectId);
          },
          network_id: '4'
        }
      }
    };

This problem has been bothering me for a long time, who can help me! Really Thanks!


Solution

  • You forgot the return statement:

    rinkeby: {
      provider: () => {
        return new HDWalletProvider(secrets.mnemonic,"https://rinkeby.infura.io/v3/"+secrets.infuraProjectId);
      },
      network_id: 4
    }