【问题标题】:Unable to connect Ganache with Truffle/Npm Dev server无法将 Ganache 与 Truffle/Npm 开发服务器连接
【发布时间】:2018-03-20 09:09:47
【问题描述】:

我可以使用 Truffle 和 Ganache-cli。已经部署了合约并且可以使用 truffle 控制台玩它

truffle(development)> 
Voting.deployed().then(function(contractInstance) 
{contractInstance.voteForCandidate('Rama').then(function(v) 
{console.log(v)})})
undefined
truffle(development)> { tx: 
'0xe4f8d00f7732c09df9e832bba0be9f37c3e2f594d3fbb8aba93fcb7faa0f441d',
  receipt: 
   { transactionHash: 
'0xe4f8d00f7732c09df9e832bba0be9f37c3e2f594d3fbb8aba93fcb7faa0f441d',
     transactionIndex: 0,
     blockHash: 
'0x639482c03dba071973c162668903ab98fb6ba4dbd8878e15ec7539b83f0e888f',
     blockNumber: 10,
     gasUsed: 28387,
     cumulativeGasUsed: 28387,
     contractAddress: null,
     logs: [],
     status: '0x01',
     logsBloom: ... }

现在,当我使用“npm run dev”启动服务器时。服务器启动正常,但没有连接到区块链

我收到了错误

Uncaught (in promise) Error: Contract has not been deployed to detected network (network/artifact mismatch)

这是我的 truffle.js

// Allows us to use ES6 in our migrations and tests.
require('babel-register')

module.exports = {
 networks: {
    development: {
      host: '127.0.0.1',
      port: 8545,
      network_id: '*', // Match any network id
      gas: 1470000

    }
  }
}

你能指导我如何连接吗?

【问题讨论】:

  • 你应该尝试在以太坊 stackexchange 网站上询问这个问题。
  • 我也在 gitter 上问过。到目前为止没有运气。感谢您的评论。
  • 如果您正在获取 truffle 开发控制台(因为我看到了 truffle(development)>)...这是否意味着您正在使用 truffle 开发 rpc(通过使用 truffle develop)?那是端口 9545。

标签: npm blockchain ethereum truffle consensys-truffle


【解决方案1】:

解决问题。

问题出在 currentProvider,我提供了 ganache 区块链提供商的 url,它起作用了。

if (typeof web3 !== 'undefined') {
console.warn("Using web3 detected from external source like Metamask")
// Use Mist/MetaMask's provider
// window.web3 = new Web3(web3.currentProvider);
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));

  } else {
console.warn("No web3 detected. Falling back to http://localhost:8545. You should remove this fallback when you deploy live, as it's inherently insecure. Consider switching to Metamask for development. More info here: http://truffleframework.com/tutorials/truffle-and-metamask");
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
  }

【讨论】:

  • 这不是最好的解决方案。您可以保留 Metamask currentProvider,只需更改 Metamask 中的 RPC 连接设置以连接您的 localhost RPC。
  • 当然,我同意,如果可能的话,您能指导我如何更改 RPC 连接吗?我试图搜索,但没有运气,或者我看错了方向。
【解决方案2】:

在您的truffle.js 中,将8545 更改为7545

或者,在Ganache(GUI)中,点击右上角的齿轮,将端口号从7545改为8545,然后重启。使用 ganache-cli 在启动时使用 -p 8545 选项将 8545 设置为要监听的端口。

无论哪种方式,不匹配似乎都是问题所在;这些数字应该匹配。这是一个常见问题。

也可以随时查看ethereum.stackexchange.com。如果您希望将您的问题移到那里,您可以标记它并留言让管理员执行此操作。

【讨论】:

  • 谢谢,我试过了,没用。顺便说一句,这是我的 ganache-cli 输出。它正在端口 8545 Ganache CLI v6.1.0 (ganache-core: 2.1.0) 监听...助记符:帐篷头盔椅子问题樱桃环箔提名奖杯中心诗猫基地高清路径:m/44'/60'/0 '/0/{account_index} 监听 localhost:8545
  • 产生错误的具体代码是什么(使用npm run dev)?它连接到什么端口等?另外,您是否使用truffle migrate 部署了合约?
  • 是的,我做了 truffle 迁移,我可以访问联系人并可以使用 truffle 控制台调用函数。你可以看到我的 ganache-cli 正在 localhost:8545 上运行我正在运行 npm run dev 并且服务器启动并在 localhost:8080 上侦听
  • 不知道如何将 localhost:8080 与合约连接,请看一下我的 truffle.js 也非常感谢您的回复。
  • 我要求您发布在您运行 npm run dev 后执行并产生错误的特定 JavaScript 代码。在那里的某个地方,您可能正在创建一个 web3 实例并将其配置为连接到错误的网络/端口。
猜你喜欢
  • 2019-05-24
  • 1970-01-01
  • 2017-10-11
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
相关资源
最近更新 更多