Я получаю странную ошибку в Solidity. У меня есть следующая публичная функция:
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;
}
Когда я вызываю функцию с помощью contract.test.call(...)
, она возвращает 0, но когда я запускаю contract.test.sendTransaction(...)
, событие BidPlaced не регистрируется.
Когда я проверяю квитанцию о том, сколько газа используется, она показывает ожидаемое количество, поэтому я знаю, что ошибка не возникает.
Если я избавлюсь от book.homeBids.push(bid);
строки, событие будет правильно зарегистрировано. Что в этой строке может вызвать проблему?
Выяснил ответ, это было тривиально, но я все равно оставлю его здесь для других, столкнувшихся с той же проблемой.
Сумма газа по умолчанию для моих транзакций составляла 90000, а оценка газа для функциональности была 110000, поэтому у транзакции заканчивался газ. Я увеличил газ, переданный в транзакцию, и это сработало:
contract.test.sendTransaction(..., { from: 0x00.., value: 10000, gas: 120000 })
Тьяден Хесс
к26др