Невозможно выполнить развертывание в Ринкеби через трюфель — невозможно прочитать свойство «bind»

Я использую трюфель: «^ 4.1.14» и версию ganache-cli «^ 6.1.8». Когда я пытаюсь перейти на сеть ganache cli, все работает без проблем. Но когда я пытаюсь перейти на Rinkeby, это всегда терпит неудачу. В сообщении об ошибке говорится TypeError: Cannot read property 'bind' of undefined. Проблемная строка скрыта где-то глубоко в веб-пакете, и я не могу получить доступ к этому сценарию, чтобы проверить его или выполнить console.log.

Соответствующая часть truffle.js выглядит так

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
    },

Полная трассировка стека исключения приведена ниже. Вероятно, это как-то связано с подключением к Rinkeby через провайдера, по крайней мере, из того, что я до сих пор гуглил. Но я не могу заставить его работать.

$ ./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)
В сообщении об ошибке говорится, provider.sendAsync.bindчто вы пытаетесь прочитать bind, undefinedпоэтому оно sendAsyncне определено. Я помню, что web3 0.20 -> 1.0 изменился с provider.sendAsync()на provider.send()поэтому, возможно, в вашем проекте есть некоторые зависимости, которые используют неправильную версию web3.

Ответы (1)

По моему мнению, у Truffle возникают проблемы с открытием ваших мнемонических файлов / ключевых файлов Infura API. Работает ли это, если вы используете непосредственно мнемонику и ключ API вместо переменных?

Также я рекомендую вам использовать dotenv и process.env (даже с тестовым проектом), так будет проще обрабатывать будущие обновления!

Я знаю, что использовать его в переменных ENV было бы безопаснее, но это всего лишь тестовый проект, и настроить его было проще. Я пытался напрямую включить ключ API и мнемонику, но это ничего не изменило