Tengo problemas para invocar el contrato a través de web 3 js en el navegador. Estoy usando el desarrollo de trufas y migré y ejecuté pruebas con éxito.
También obtengo la información cuando consola.log the contract.at();
eventHost.createEvent("testevent1",5,30);
cuando ejecuto lo anterior en la consola de Chrome
web3.min.js:2 Uncaught Error: VM Exception while processing transaction: out of gas
at Object.InvalidResponse (web3.min.js:1)
at s.send (web3.min.js:2)
at r.e [as sendTransaction] (web3.min.js:2)
at c.sendTransaction (web3.min.js:2)
at c.execute (web3.min.js:2)
at <anonymous>:1:11
entiendo esto
mi contrato Event.sol
contract Event {
uint32 currentMaxNumOfEvents=0;
struct eventDetail{
uint32 eventId;
address eventHost;
string eventName;
uint32 noOfDaysToRegsiter;
uint32 maxMembers;
address[] memberAddress;
}
mapping(uint32 => eventDetail) public events;
function joinEvent(uint32 selectedEventId)public returns (uint32){
for (uint i = 0; i<events[selectedEventId].memberAddress.length; i++) {
assert(events[selectedEventId].memberAddress[i]==msg.sender);
}
require(selectedEventId>=0&&selectedEventId<=currentMaxNumOfEvents);
require(events[selectedEventId].memberAddress.length < events[selectedEventId].maxMembers);
events[selectedEventId].memberAddress.push(msg.sender);
return selectedEventId;
}
function createEvent(string eventName,uint32 noOfdays,uint32 maxMembers) public returns (uint32){
events[currentMaxNumOfEvents].eventId= currentMaxNumOfEvents;
events[currentMaxNumOfEvents].eventHost =msg.sender;
events[currentMaxNumOfEvents].eventName = eventName;
events[currentMaxNumOfEvents].noOfDaysToRegsiter = noOfdays;
events[currentMaxNumOfEvents].maxMembers = maxMembers;
currentMaxNumOfEvents += 1;
return events[currentMaxNumOfEvents].eventId;
}
}
mi script ejecutándose en el navegador
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:9545"));
}
web3.eth.defaultAccount = web3.eth.accounts[0];
var contract = web3.eth.contract([{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"events","outputs":[{"name":"eventId","type":"uint32"},{"name":"eventHost","type":"address"},{"name":"eventName","type":"string"},{"name":"noOfDaysToRegsiter","type":"uint32"},{"name":"maxMembers","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"selectedEventId","type":"uint32"}],"name":"joinEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"eventName","type":"string"},{"name":"noOfdays","type":"uint32"},{"name":"maxMembers","type":"uint32"}],"name":"createEvent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
var eventHost = contract.at('0x345ca3e014aaf5dca488057592ee47305d9b3e10');
console.log(eventHost);
"Fuera de gasolina" es un error que generalmente obtendrá cuando hay un problema con la ejecución del método, generalmente cuando se produce un error.
Debe pasar parámetros adicionales para especificar la cuenta que está llamando al método, y debe asegurarse de que la cuenta esté desbloqueada y tenga Ether para cubrir el gas:
eventHost.createEvent("testevent1",5,30, { from: _account, gas: _gasLimit });
También debe especificar un límite de gas.
Verifique si tiene ETH en la cuenta (dirección) desde donde está llamando a la función de contrato de gas.