【问题标题】:Truffle doesn't recognize contract change and wont deploy itTruffle 无法识别合约变更,也不会部署它
【发布时间】:2021-05-22 16:36:14
【问题描述】:

我的情况有点奇怪..我能够将我的合同部署到本地 Ganache 实例:

松露迁移——网络开发

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

网络是最新的

现在我不确定为什么会这样?合约不一样,虽然我只改了几行代码和参数,返回值都一样,难道是这个原因吗?

另外,我认为它适用于:

松露部署 --reset

但是我明白了:

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 很奇怪......因为我的 truffle-config 指向端口 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)
     }
    }
  },
};

我之前确实在 7545 上运行过 Ganuche 作为实验,但它已经有一段时间没有在该端口上运行了,并且

松露迁移——网络开发

能够连接并执行初始迁移。只是现在它不会选择任何新的更改。有什么想法吗?

【问题讨论】:

    标签: blockchain solidity smartcontracts truffle contract


    【解决方案1】:

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

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

    所以,如果你已经迁移了一个合约,你应该执行:

    truffle migrate --reset
    

    【讨论】:

      【解决方案2】:

      1- 迁移更新的合同:

      首先,您不应该期望看到具有相同地址的更新版本的合约。更新合同意味着创建新合同。见here。因此,您应该将更新后的合同视为新合同,并通过增加最后一个脚本编号来添加新的迁移脚本。例如,。如果最后一个是2_my_contract,那么新的应该是3_my_updated_contract。正如@georgos 指出的那样,如果有新的迁移脚本,松露只会进行新的迁移。最后迁移的脚本号实际上保存在区块链中,第一个迁移合约带有松露Migrations.sol => 1_initial_migration.js

      2- 网络:

      如果您不提供已定义网络的名称,truffle 将使用默认网络。而且,默认网络的名称是development。因此,如果您想覆盖默认行为,请将网络名称从 develop 更改为 development。或者,只需在命令truffle migrate --network my_network

      中传递网络名称

      【讨论】:

        猜你喜欢
        • 2017-11-26
        • 2019-07-13
        • 1970-01-01
        • 2021-10-09
        • 2018-09-10
        • 2018-07-16
        • 2018-10-12
        • 2020-11-14
        • 2018-07-07
        相关资源
        最近更新 更多