运行 truffle migrate 时出现“Web3ProviderEngine 不支持同步请求”

Bru*_*har 5 ethereum solidity truffle web3js

我想使用提供者配置我的 truffle-config.js。当我运行命令“truffle migrate --network ropsten”时,它会抛出以下错误:

错误:Web3ProviderEngine 不支持同步请求。

并告诉了错误详细信息

at Object.run (C:\Users\Bruce\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\truffle-migrate\index.js:92:1)

我对此一无所知。我查找文件 "C:\Users\Bruce\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\truffle-migrate\index.js:92:1"webpack ,但我找不到下面的路径这"build/"。是不是出了什么问题?我使用 global 安装 truffle,它在默认网络 ganache 下运行良好。

ropsten: {
      provider: () => new HDWalletProvider(
        privateKeys.split(','),
        `https://ropsten.infura.io/v3/${process.env.INFURA_API_KEY}`
      ),
      network_id: 3,       // Ropsten's id, mainnet is 1
      gas: 5500000,        // Ropsten has a lower block limit than mainnet
      gasPrice: 2500000000, //2.5 gwei
      confirmations: 2,    // # of confs to wait between deployments. (default: 0)
      timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
      skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
    },
Run Code Online (Sandbox Code Playgroud)

我的 HDWalletProvider 依赖版本:

 "dependencies": {
    "chai": "^4.2.0",
    "chai-as-promised": "^7.1.1",
    "dotenv": "^8.1.0",
    "eslint": "^6.4.0",
    "openzeppelin-solidity": "^2.3.0",
    "truffle-hdwallet-provider": "^1.0.17",
    "truffle-hdwallet-provider-privkey": "^0.3.0",
    "web3": "^1.2.1"
  },
Run Code Online (Sandbox Code Playgroud)

和迁移:

1_initial_migration.js

const Migrations = artifacts.require("Migrations");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
};
Run Code Online (Sandbox Code Playgroud)

2_deploy_contract.js

const Token = artifacts.require("TokenInstance");
const DeleToken = artifacts.require("DelegateToken")
module.exports = async function(deployer) {
  
  deployer.deploy(Token);
  deployer.deploy(DeleToken);

};
Run Code Online (Sandbox Code Playgroud)

它只是无法编译成功。不过我用默认网络用ganache就OK了!

Vit*_*nov 6

您仍在使用已弃用的旧存储库。

你应该使用 truffle monorepo 代替

npm install @truffle/hdwallet-provider
Run Code Online (Sandbox Code Playgroud)

并替换

const HDWalletProvider = require("@truffle/hdwallet-provider");
Run Code Online (Sandbox Code Playgroud)

你也不需要使用truffle-hdwallet-provider-privkey