当我执行“松露部署”命令时,我突然开始收到“部署时“迁移”遇到无效操作码”错误。
我的迁移文件没有更改,所以我不确定为什么突然收到此错误。每个发布相同错误的人都只是建议下载最新版本的 ganache/truffle,但我已将我的 truffle 和 ganache 更新到最新版本,但仍然收到错误。
网络名称:“发展” 网络 ID:5777 区块气体限制:6721975 (0x6691b7)
*** 从 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);
};
尝试更改您的 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
将 solc 从 0.8.20 降级到 0.8.13 解决了我的问题。
我通过下载元币松露盒获得该版本,验证迁移是否有效,然后从项目的 truffle-config.js 获取 solc 版本。
值得做同样的事情,而不是使用此时为我解决这个问题的特定 solc 版本,因为 Truffle 最终可能会更新元币框以跟上他们的其他工具,并且这个数字将会被泄露日期。
下载元币松露盒就这么简单:
truffle unbox metacoin [PATH/TO/DIRECTORY]
更改
truffle-config.js
文件中的 solc 版本,如下所示。
compilers: {
solc: {
version: "0.8.13"
}
}
确保您使用的是最新版本的ganache。尝试使用
npm install -g ganche
全局安装 ganache,这应该可以工作
我面临同样的问题,很多方法尝试解决这个问题,但没有任何反应。 但是当将编译器版本 0.8.21 更改为 0.8.17 时问题就解决了。 更改 truffle-config.js 文件中的编译器版本。