“迁移”在部署时遇到无效的操作码

问题描述 投票:0回答:5

当我执行“松露部署”命令时,我突然开始收到“部署时“迁移”遇到无效操作码”错误。

我的迁移文件没有更改,所以我不确定为什么突然收到此错误。每个发布相同错误的人都只是建议下载最新版本的 ganache/truffle,但我已将我的 truffle 和 ganache 更新到最新版本,但仍然收到错误。

这是完整的错误: ⠋ 从 solc-bin 中获取 solc 版本列表。尝试#1 开始迁移...

网络名称:“发展” 网络 ID:5777 区块气体限制:6721975 (0x6691b7)

1_initial_migration.js

⠙ 从 solc-bin 中获取 solc 版本列表。尝试#1 部署“迁移”

*** 从 solc-bin 部署***失败。尝试#1

“迁移”在部署时遇到无效的操作码。尝试:

  • 验证您的构造函数参数是否满足所有断言条件。
  • 验证构造函数代码不会越界访问数组。
  • 将原因字符串添加到断言语句中。

退出:通过在 Etherscan 上检查上面的交易哈希来手动查看成功的交易。

错误:***部署失败***

“迁移”在部署时遇到无效的操作码。尝试:

  • 验证您的构造函数参数是否满足所有断言条件。
  • 验证构造函数代码不会越界访问数组。
  • 将原因字符串添加到断言语句中。
at /usr/local/lib/node_modules/truffle/build/webpack:/packages/deployer/src/deployment.js:330:1

Truffle v5.9.2(核心:5.9.2) 节点 v18.7.0

迁移.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

contract Migrations {
    address public owner;
    uint256 public lastCompletedMigration;

    constructor() {
        owner = msg.sender;
    }

    modifier restricted() {
        require(msg.sender == owner, "Restricted to contract owner");
        _;
    }

    function setCompleted(uint256 completed) public restricted {
        lastCompletedMigration = completed;
    }

    function upgrade(address new_address) public restricted {
        Migrations upgraded = Migrations(new_address);
        upgraded.setCompleted(lastCompletedMigration);
    }
}

1_initial_migration.js

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

module.exports = function(deployer) {
    deployer.deploy(Migrations);
};
javascript ethereum solidity truffle ganache
5个回答
4
投票

尝试更改您的 pragma 和 solc 版本

迁移.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

truffle-config.js

compilers: {
    solc: {
      version: "0.5.1"
}

有时,solc 适用于我的 0.8.20 或 0.7.3


1
投票

将 solc 从 0.8.20 降级到 0.8.13 解决了我的问题。

我通过下载元币松露盒获得该版本,验证迁移是否有效,然后从项目的 truffle-config.js 获取 solc 版本。

值得做同样的事情,而不是使用此时为我解决这个问题的特定 solc 版本,因为 Truffle 最终可能会更新元币框以跟上他们的其他工具,并且这个数字将会被泄露日期。

下载元币松露盒就这么简单:

truffle unbox metacoin [PATH/TO/DIRECTORY]


0
投票

更改

truffle-config.js
文件中的 solc 版本,如下所示。

compilers: {
    solc: {
      version: "0.8.13"
    }
  }

0
投票

确保您使用的是最新版本的ganache。尝试使用

npm install -g ganche
全局安装 ganache,这应该可以工作


0
投票

我面临同样的问题,很多方法尝试解决这个问题,但没有任何反应。 但是当将编译器版本 0.8.21 更改为 0.8.17 时问题就解决了。 更改 truffle-config.js 文件中的编译器版本。

© www.soinside.com 2019 - 2024. All rights reserved.