Solidity-Vertragsfunktionen kehren mit Truffle nicht korrekt zurück, arbeiten aber an Remix

Ich teste meine Verträge mit Truffle, aber meine Funktionen geben nicht die richtige uint zurück, obwohl ich dies beim Testen in Remix tue. Dies ist mein Test.js-Code:

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

Es schlägt fehl, weil der Saldo des Vertragstickets 10 (Anfangsbetrag) und nicht 8 beträgt. Wenn Sie dieselben Funktionen auf Remix verwenden, sind die zurückgegebenen Werte korrekt.

Antworten (1)

Drop .call()aus dieser Zeile:return event.buyTicketsFromContract.call(account1, 2, {from: account1, value: 4});

Wenn Sie sagen call(), sagen Sie ausdrücklich, dass dies eine schreibgeschützte Anfrage ist, also versuchen Sie nicht einmal, die Blockchain zu aktualisieren. Wenn Sie also überprüfen, was passiert ist, stellen Sie fest, dass nichts passiert ist.

Ich hoffe es hilft.