当前位置: 首页 > 知识库问答 >
问题:

松露不识别合同变更,也不会部署它

长孙鸿波
2023-03-14

我的处境有点奇怪。。我能够通过以下方式将合同部署到本地Ganache实例

块菌迁移——网络开发

但是,现在,当我对契约进行任何更改并运行相同的命令时,我的契约将被编译,但最后我得到了

网络更新

现在我不知道为什么会这样?合同不一样,尽管我只更改了几行代码和参数,返回值也一样,这可能是原因吗?

此外,我认为它将与以下方面一起工作:

松露部署-重置

但我得到的是:

Compiling your contracts...
===========================
Everything is up to date, there is nothing to compile.

Something went wrong while attempting to connect to the network. Check your network configuration.

Could not connect to your Ethereum client with the following parameters:
    - host       > 127.0.0.1
    - port       > 7545
    - network_id > 5777

现在很奇怪,当我运行带有--reset选项的命令时,试图使用端口7545。。。当我的块菌配置指向端口8545时:

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  contracts_build_directory: path.join(__dirname, "client/src/contracts"),
  networks: {
    develop: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*",
    }
  },

  // Configure your compilers
  compilers: {
    solc: {
      version: "0.8.4",    // Fetch exact version from solc-bin (default: truffle's version)
     }
    }
  },
};

我之前确实让Ganuche在7545上运行作为实验,但是它已经有一段时间没有在那个端口上运行了,而且

块菌迁移——网络开发

能够连接并执行初始迁移。只是现在它不会挑选任何新的变化。知道是怎么回事吗?

共有2个答案

蒋嘉实
2023-03-14

1-迁移更新的合同:

首先,您不应该期望看到具有相同地址的更新版本的合同。更新合同意味着创建新合同。看这里。因此,您应该将更新后的合同视为新合同,并通过增加最后一个脚本编号来添加新的迁移纸条。例如,。如果最后一个是2我的\u合同,则新的合同应该是3我的\u更新的\u合同。正如@georgos所指出的,只有有了新的迁移脚本,truffle才会进行新的迁移。最后一个迁移的脚本编号实际上由第一个迁移合同保存在区块链中,该合同随块菌迁移而来。溶胶=

2-网络:

如果您不提供已定义网络的名称,Truffle将使用默认名称。并且,默认网络的名称是Development。因此,如果要重写默认行为,请将网络名称从Development更改为Development。或者,只需将网络名称传递到命令truffle迁移-网络my_network

左丘耀
2023-03-14

不,truffle将只迁移未执行的迁移,如文档所述:Running migrations-Command

如果以前成功运行了迁移,那么truffle migrate将从上次运行的迁移开始执行,只运行新创建的迁移。如果不存在新的迁移,则块菌迁移根本不会执行任何操作。您可以使用--reset选项从头开始运行所有迁移。

因此,如果您已经迁移了合同,您应该执行:

truffle migrate --reset
 类似资料:
  • 我试图部署一个JavaRest服务器tomcat,使用Maven tomcat插件,但Tomcat不能正常工作。 部署时(通过-e tomcat7:deploy或-e tomcat7:redeploy),Tomcat会回复: 我已经检查过tomcat正在运行。我在上一个堆栈溢出上找到的修复都不起作用。 这是我对tomcat插件的pom配置: 这是我的maven设置: 这就是网络。xml: 我的配置

  • 我有一个大学项目,我必须编写一个Java应用程序。因为我们学习了使用Netbeans作为IDE的java,所以我决定使用这个IDE编写应用程序。 我在以前的电脑上从未遇到过这个错误。现在,当我在编写函数或任何其他块后打开“{}”时,按“return”后的行没有缩进,按“tab”也没有任何作用。 也许有人知道问题出在哪里? 谢谢:D

  • 我目前在一个我为很多人定义规则的环境中工作。我们目前使用Hudson和artiFactory,我想评估切换到Jenkins和Nexus是否值得迁移成本(但这不是问题)。 为了评估它,我在本地设置了Maven、Jenkins和Nexus,我试图找到一个设置来使用以前的设置,以便我可以比较解决方案。这里的问题是: > 注意:安装和用户配置不能用于添加共享项目信息,例如,设置或公司范围。 我们当前的根P

  • 所以我和这个人有几乎完全一样的问题: Maven 安装 OSX 错误 不支持的主要.minor 版本 51.0 我认为问题出在我的符号链接中。我定义了$JAVA_HOME。bash_profile和java版本正确地报告了版本。然而,出于某种原因,mvn正在尝试使用旧版本的java。 这是我机器上所有东西的列表: 我想使用1.8。和mvn来识别它。 如果我运行这个: 然后如果我跑了: 我确实注意到

  • 我在私有区块链网络上部署智能合约时遇到了问题。我在三个虚拟机(矿工)上创建了我的区块链网络,在第四个虚拟机(控制器)上使用木偶:https://medium.com/@collin.cusce/using-puppeth-to-manually-create-an-ethereum-proof-of-authority-clique-network-on-aws-ae0d7c906cce 之后,我

  • 每个人的生活都离不开键盘,但我讨厌不必要的敲打。 如果你按照 使用版本控制 一节所描述的工作流程工作, 可以添加一些自动化任务使这个处理过程更加容易。 有许多工具可以帮助我们在远程机器上执行命令,包括 Capistrano(https://github.com/capistrano/capistrano)和 Fabric(https://github.com/fabric/fabric),但在本例