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());
Ich glaube, das Problem ist das constant
Schlüsselwort für Ihre Funktion.
Gemäß dieser Ausgabe im Solidity-Repository:
Das Schlüsselwort
constant
ist für Funktionen ungültig
Versuchen Sie, das zu entfernen und den Vertrag erneut bereitzustellen.
Atharva Gomekar