Kein Benzin mehr, wenn Vertrag über web3 js ausgeführt wird

Ich habe Probleme beim Aufrufen des Vertrags über Web 3 js im Browser. Ich verwende Truffle Develop und habe erfolgreich migriert und Tests durchgeführt.

Ich erhalte die Informationen auch, wenn ich die contract.at () console.log;

eventHost.createEvent("testevent1",5,30);

Wenn ich das obige in der Konsole von Chrome ausführe

  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

Ich verstehe das

Mein Vertrag 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;


    }
}

Mein Skript läuft im Browser

 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);

Antworten (2)

„Kein Gas mehr“ ist ein Fehler, den Sie im Allgemeinen erhalten, wenn es ein Problem mit der Methodenausführung gibt, normalerweise, wenn ein Fehler ausgegeben wird.

Sie müssen zusätzliche Parameter übergeben, um das Konto anzugeben, das die Methode aufruft, und Sie müssen sicherstellen, dass das Konto entsperrt ist und über Ether verfügt, um das Gas abzudecken:

eventHost.createEvent("testevent1",5,30, { from: _account, gas: _gasLimit });

Außerdem sollten Sie ein Gaslimit angeben.

Überprüfen Sie, ob Sie ETH in dem Konto (Adresse) haben, von dem aus Sie die Vertragsfunktion für Gas aufrufen.