No se puede implementar en Rinkeby a través de truffle; no se puede leer la propiedad 'bind'

Estoy usando trufa: "^4.1.14" y versión ganache-cli "^6.1.8". Cuando trato de migrar a la red ganache cli, funciona sin problemas. Pero cuando intento migrar a Rinkeby, siempre falla. El mensaje de error dice TypeError: Cannot read property 'bind' of undefined. La línea problemática está enterrada en algún lugar profundo del paquete web, y no puedo acceder a ese script para inspeccionarlo o consolarlo.

La parte relevante de truffle.js se ve así

rinkeby_infura: {
      provider: function() {        
        // using process.env.MNENOMIC would be safer, but this is test project
        const mnemonic = require('./.mnemonic');
        const apiKey = require('./.infura_api_key');
        return new HdWalletProvider(mnemonic, 'https://rinkeby.infura.io/' + apiKey);
      },
      network_id: 4,      
      gas: 4612388 // Gas limit used for deploys
    },

El seguimiento completo de la pila de la excepción se encuentra a continuación. Probablemente tenga algo que ver con la conexión a Rinkeby a través del proveedor, al menos por lo que he buscado en Google hasta ahora. Pero soy incapaz de hacer que funcione.

$ ./node_modules/.bin/truffle migrate --network rinkeby_infura

C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-provider\wrapper.js:26
    var originalSendAsync = provider.sendAsync.bind(provider);
^
TypeError: Cannot read property 'bind' of undefined
    at Object.wrap (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-provider\wrapper.js:26:1)
    at Object.wrap (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-provider\index.js:7:1)
    at Object.create (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-provider\index.js:21:1)
    at Config.get [as provider] (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-config\index.js:165:1)
    at Object.detect (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-core\lib\environment.js:46:1)
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-core\lib\commands\migrate.js:91:1
    at finished (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-workflow-compile\index.js:53:1)
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-compile\index.js:314:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-compile\profiler.js:158:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:3888:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:473:1
    at replenish (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:1006:1)
    at iterateeCallback (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:995:1)
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:969:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:3885:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-compile\profiler.js:154:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:1140:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:473:1
    at iteratorCallback (C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:1064:1)
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:969:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\~\async\dist\async.js:1137:1
    at C:\src\personal\ens-registrar\node_modules\truffle\build\webpack:\packages\truffle-compile\profiler.js:133:1
    at FSReqWrap.oncomplete (fs.js:155:5)
El mensaje de error indica provider.sendAsync.bindque está tratando bindde leer undefined, por lo que sendAsyncno está definido. Recuerdo que web3 0.20 -> 1.0 cambió de provider.sendAsync()a provider.send(), por lo que quizás haya algunas dependencias en su proyecto que estén usando la versión incorrecta de web3.

Respuestas (1)

En mi opinión, Truffle está teniendo problemas para abrir sus archivos de claves mnemotécnicas/API de Infura. ¿Funciona si usa directamente el mnemotécnico y la clave API en lugar de las variables?

También te recomiendo que uses dotenv y process.env (incluso con un proyecto de prueba), ¡sería más fácil manejar futuras actualizaciones!

Sé que usarlo en variables ENV sería más seguro, pero este es solo un proyecto de prueba y fue más fácil de configurar. Intenté incluir la clave API y el mnemotécnico directamente, pero no cambió nada.