Функции контракта Solidity не возвращаются правильно с Truffle, но работают с Remix

Я тестирую свои контракты с помощью Truffle, но мои функции не возвращают правильный uint, несмотря на то, что я делал это при тестировании в Remix. Это мой код Test.js:

var EventContract = artifacts.require("./EventContract.sol");
contract ('EventContract', function (accounts){
it("account1 purchases 4 tickets from ticketContract, which had 10 tickets to start with at a cost of 2", function(){
    var event;
    var account1 = accounts[0];

    return EventContract.deployed()
    .then(function(instance){
      event = instance;
        return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4});
    })
    .then (function (success){
      console.log("purchased from contract with success: " + success);
      assert.equal(true, success, "bought 2 tickets for 4 ether");
      return event.getContractTicketBalance.call();
    })
    .then (function(contractBalance){
      console.log(contractBalance.toNumber());
// Fails here
      assert.equal(8, contractBalance.toNumber(), "contract ticket balance is not 8");
      return event.getTicketBalance.call(account1);
    })
    .then (function(accountBalance){
      assert.equal(2, accountBalance.toNumber(), "account balance is not 2");
    })
    ;
  })
  ;

Это не удается, потому что баланс билета контракта равен 10 (начальная сумма), а не 8. При использовании тех же функций в Remix возвращаемые значения верны.

Ответы (1)

Удалите .call()из этой строки:return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4});

Когда вы говорите call(), вы явно говорите, что это запрос только для чтения, поэтому даже не пытайтесь обновить блокчейн. Следовательно, когда вы проверите, что произошло, вы обнаружите, что ничего не произошло.

Надеюсь, поможет.