Comment corriger l'erreur « La migration a rencontré un opcode non valide lors du déploiement » dans Solidity ?
P粉523625080
P粉523625080 2024-03-27 00:03:27
0
1
335

'migrate' a rencontré un opcode invalide lors du déploiement. Essayez :

  • Vérifiez que vos paramètres de constructeur satisfont à toutes les conditions d'assertion.
  • Vérifiez que votre code constructeur n'accède pas au tableau hors des limites.
  • Ajoutez la chaîne de raison à votre déclaration d'assertion. Comment résoudre cette erreur

Mon code migration.sol

// SPDX-License-Identifier: UNLICENSED

    //the version of solidity that is compatible

    pragma solidity ^0.8.0;
    contract Migrations {
      address public owner = msg.sender;
      uint public last_completed_migration;

      modifier restricted() {
        require(
          msg.sender == owner,
          "This function is restricted to the contract's owner"
        );
        _;
      }

      function setCompleted(uint completed) public restricted {
        last_completed_migration = completed;
      }
    }

Mon fichier config.js Truffle

    const path = require("path");

    module.exports = {
      // See <http://truffleframework.com/docs/advanced/configuration>
      // to customize your Truffle configuration!
      contracts_build_directory: path.join(__dirname, "/build"),
  
   
      networks: {
        development: {
        host: "127.0.0.1",
      port: 8545,
      network_id: "*" //Match any network id
     }
    },
    
    plugins: ["truffle-contract-size"],
    compilers: {
    solc: {
      version: "^0.8.0"
    }
    },
    solidity: {
    version: "0.8.3",
    settings: {
      optimizer: {
        enabled: true,
        runs: 1000,
      },
    },
  },
   };

P粉523625080
P粉523625080

répondre à tous(1)
P粉924915787

Cela peut être dû à des changements récents de solc 版本 0.8.20 开始引入了新的操作码 PUSH0.

Pour une liste complète, voir "Quand chaque opcode sera-t-il ajouté à l'EVM ?" p> Essentiellement, votre version du compilateur Solidity est "en avance" sur le réseau sur lequel vous essayez de déployer. En d'autres termes,

génère un bytecode qui contient l'opcode, mais le réseau ne l'a pas encore. solc

Vous avez 3 solutions potentielles :

    Attendez que votre réseau cible prenne en charge le nouvel opcode ou utilisez un autre réseau.
    • Puisque votre configuration truffle indique que vous vous connectez à
    • , cela signifie que vous pouvez passer à la dernière version du réseau que vous utilisez localement (par exemple Ganache), peut-être que cela résoudra le problème 127.0.0.1:8545
    • Rétrograder vers une version antérieure de
    • . solc
    • Changez la version
    • dans vos fichiers Solidity : pragma Solidity 0.8.19;solc 版本:pragma Solidity 0.8.19;
  • Changez la version
  • dans le fichier de configuration de truffe : version : "0.8.19" solc 版本: version: "0.8.19"
      Si la cause première de l'erreur est effectivement l'opcode PUSH0, cela résoudra votre problème, car
    • la version 0.8.19 ne le produit pas. PUSH0 操作码,这将解决您的问题,因为 solc
  • Continuez à utiliser la dernière version
  • , mais spécifiez une version EVM cible qui n'est pas la dernière solc
      Mettez à jour la section
    • dans le fichier de configuration de Truffle pour ajouter la nouvelle propriété : settings : { evmVersion : 'london' }solc 部分以添加新属性:settings: { evmVersion: 'london' }
    • Remarque, cibles 0.8.20
    • evmVersion: 'shanghai',这意味着它可以输出PUSH0 par défaut
    • Cependant, si vous le remplacez pour cibler evmVersion : 'london', qui est la deuxième dernière version cible d'EVM (en juin 2023), alors vous dites en fait
    • ÉvitersortiePUSH0. evmVersion: 'london',这是第二个最新的目标 EVM 版本(截至 2023 年 6 月),那么您实际上是在告诉 solc 避免输出PUSH0
    • Si la cause première de l'erreur est effectivement l'opcode PUSH0, cela résoudra votre problème puisque
    • on vous a dit de ne pas afficher cela. PUSH0 操作码,这将解决您的问题,因为 solc

Référence :

  • https://github.com/ethereum/solidity/releases/tag /v0.8.20
  • https://docs.soliditylang.org/en/v0.8.20/using-the-compiler.html#setting-the-evm-version-to-target
  • https://trufflesuite.com/docs/truffle/reference/configuration/ #solc
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!