tengo un contrato simple
pragma solidity ^0.4.4;
contract Main {
function getValue() constant returns (bool){
return true;
}
}
Solo necesito crear una interfaz web que pueda obtener este valor para mí.
Desempaqué el paquete web en un repositorio vacío , eliminé >truffle unbox webpack
los contratos anteriores, cambié los archivos index.html y app.js , cambié 2_deploy_contracts.js en consecuencia, pero el error que recibo en la consola del navegador es:
Error no capturado (en promesa): Excepción de máquina virtual al procesar la transacción: revertir
Aquí está mi archivo index.html y app.js.
<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>
y mi archivo app.js es
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());
Creo que el problema es la constant
palabra clave en su función.
Según este problema en el repositorio de solidez:
la palabra clave
constant
no es válida en las funciones
Intente eliminar eso y volver a implementar el contrato.
Atharva Gomekar