Nach der Bereitstellung des Vertrags wird der Fehler angezeigt: „VM-Ausnahme während der Verarbeitung der Transaktion: zurücksetzen“

Ich habe einen einfachen Vertrag

pragma solidity ^0.4.4;

contract Main {

function getValue() constant returns (bool){
  return true;
 }
}

Ich muss nur eine Webschnittstelle erstellen, die diesen Wert für mich abrufen kann.

Ich habe das Webpack in einem leeren Repo von entpackt >truffle unbox webpack, die vorherigen Verträge gelöscht, die Dateien index.html und app.js geändert, die Datei 2_deploy_contracts.js entsprechend geändert, aber der Fehler , den ich auf der Konsole des Browsers bekomme, ist:

Nicht erfasster (versprochener) Fehler: VM-Ausnahme während der Verarbeitung der Transaktion: Zurücksetzen

Hier ist meine index.html- und app.js -Datei.

 <html>

   <head>
     <title>Truffle 3 Frontend Demo</title>
   </head>
   <body>
   </body>


   <script src="./app.js"></script>
   <script src="../node_modules/web3/dist/web3.js" type="text/javascript">       </script>
   <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" type="text/javascript"</script>
</html>

und meine app.js-Datei ist

import { default as Web3 } from 'web3'
import { default as contract } from 'truffle-contract'
import Main_artifact from '../../build/contracts/Main.json'

const TESTRPC_HOST = 'localhost'
const TESTRPC_PORT = '8545'

function component () {
  var element = document.createElement('div')
  console.error("hi");
  let provider = new Web3.providers.HttpProvider(`http://${TESTRPC_HOST}:${TESTRPC_PORT}`)
  let main = contract(Main_artifact)
  main.setProvider(provider)

  main.deployed().then(function(instance) {
      console.log(instance);

    var s = instance.getValue(); //instance.getValue.call() doesnt work either
    return s;
}).then(function(result){
    element.innerHTML = `value: ${result}`
    console.log(result)
});


  return element
}

document.body.appendChild(component());

Antworten (1)

Ich glaube, das Problem ist das constantSchlüsselwort für Ihre Funktion.

Gemäß dieser Ausgabe im Solidity-Repository:

Das Schlüsselwort constantist für Funktionen ungültig

Versuchen Sie, das zu entfernen und den Vertrag erneut bereitzustellen.

Tut mir leid, dass ich so spät zurückkomme, ich habe es entfernt und immer noch einen Fehler bekommen, ich habe meinen Trüffel von 4.0.1 auf 4.0.4 aktualisiert und überraschenderweise hat es funktioniert. Ich weiß nicht, ob Trüffel es getan hat oder das Schlüsselwort entfernt hat, aber es hat funktioniert. Danke fürs Helfen.