Das Pushen einer Struktur in ein Array verhindert die Protokollierung

Ich erhalte einen seltsamen Fehler in Solidity. Ich habe folgende öffentliche Funktion:

struct Bid {
    address bidder;
    uint amount; /* in wei */
    bool home; /* true=home, false=away */
    int64 line;
}

event BidPlaced(bytes32 indexed game_id, BookType book, address bidder, uint amount, bool home, int64 line);

function test(bytes32 game_id, bool home, int64 line) payable returns (int) {
    Game game = getGameById(game_id);
    Book book = game.books[uint(BookType.Spread)];
    Bid memory bid = Bid(msg.sender, msg.value, home, line);

    // problem is right here
    book.homeBids.push(bid);

    BidPlaced(game_id, BookType.Spread, msg.sender, msg.value, home, line);
    return 0;
}

Wenn ich die Funktion mit aufrufe contract.test.call(...), gibt sie 0 zurück, aber wenn ich sie ausführe contract.test.sendTransaction(...), wird das BidPlaced-Ereignis nicht protokolliert.

Wenn ich auf der Quittung nachprüfe, wie viel Benzin verbraucht wird, zeigt sie die erwartete Menge an, sodass ich weiß, dass kein Fehler ausgegeben wird.

Wenn ich die Zeile loswerde book.homeBids.push(bid);, protokolliert das Ereignis richtig. Was an dieser Leitung könnte ein Problem verursachen?

Antworten (1)

Ich habe die Antwort herausgefunden, es war trivial, aber ich lasse es trotzdem für andere, die auf das gleiche Problem stoßen.

Der Standardgasbetrag für meine Transaktionen war 90000 und die Gasschätzung für die Funktionalität war 110000, also ging der Transaktion das Gas aus. Ich habe das Gas erhöht, das an die Transaktion weitergegeben wurde, und es hat funktioniert:

contract.test.sendTransaction(..., { from: 0x00.., value: 10000, gas: 120000 })
Sie sollten Ihre Antwort richtig markieren
@TjadenHess Ich muss noch 24 Stunden warten, ich werde es tun, sobald ich kann