Test mit Remix bestanden, aber mit Truffle fehlgeschlagen

Ich habe zwei Verträge: ElephanteumStorage und ElephanteumCore. Der Speicher hält nur einige Daten. Core wird bereitgestellt, um die Daten im Speicher zu ändern.
Als Konstruktorargument erhält ElephanteumCore die Speicheradresse, damit Core die Funktionen des Speichers aufrufen kann. Außerdem habe ich Core als Eigentümer des Speichers festgelegt.
Ich habe eine Init-Funktion in Core geschrieben, die Daten im Speicher speichern muss, und ich habe diese Funktionalität in Remix IDE mit Rinkeby und JS VM getestet und alles war in Ordnung. Aber im Truffle-Test bekam ich eine Fehlermeldung zum Zurücksetzen.

contract ElephanteumCore is Ownable {

        ElephanteumStorage public eStorage;

        function ElephanteumCore(address _eStorage) public payable {
            eStorage = ElephanteumStorage(_eStorage);     
        }

        function init(bytes32 _name, bytes32 _symbol, uint _supply) public onlyOwner {
            eStorage.setTotalSupply(_supply);
            eStorage.setElephantsRemainingToAssign(_supply);
            eStorage.setName(_name);
            eStorage.setSymbol(_symbol);
        }
}




contract ElephanteumStorage is Ownable {

        bytes32 public name;
        bytes32 public symbol;

        uint public totalSupply;

        uint public elephantsRemainingToAssign;

        function setName(bytes32 _name) onlyOwner external {
            name = _name;
        }

        function setSymbol(bytes32 _symbol) onlyOwner external {
            symbol = _symbol;
        }

        function setTotalSupply(uint _totalSupply) onlyOwner external {
            totalSupply = _totalSupply;
        }

        function setElephantsRemainingToAssign(uint _elephantsRemainingToAssign) onlyOwner external {
            elephantsRemainingToAssign = _elephantsRemainingToAssign;
        } 
}

Und da ist mein Trüffeltest:

const elephanteumCore = artifacts.require('ElephanteumCore');
const elephanteumStorage = artifacts.require('ElephanteumStorage');


contract('ElephanteumCore', accounts => {
  let eCore, eStorage;

  before(async () => {
    eStorage = await elephanteumStorage.new();
    eCore = await elephanteumCore.new(eStorage.address);
    await eStorage.transferOwnership(eCore.address);
  })

  it('Should initialize the contract correcty', async () => {
    let name = "Elephanteum";
    let symbol = "EPH";
    let supply = 100;

    await eCore.init(name, symbol, supply);

    let rName =  await eStorage.name.call();
    let rSymbol = await eStorage.symbol.call();
    let rSupply = await eStorage.totalSupply.call();

    assert.equal(name, web3.toUtf8(rName), "name should have be initialize correctly");
    assert.equal(symbol, web3.toUtf8(rSymbol), "symbol should have be initialize correctly");
    assert.equal(supply, rSupply.toNumber(), "supply should have be initialize correctly");

  })

Ich habe versucht, Test sowohl in testrpc als auch in rinkeby auszuführen, überall, wo es online eine Ausnahme auslöst

await eCore.init(name, symbol, supply);

Und ich weiß nicht warum.

Antworten (2)

Sie verwenden die Funktion setElephantsRemainingToAssignin der Init-Funktion, aber ich sehe diese Funktion nicht im ElephanteumStorageVertrag.

Ich habe einige Funktionen und Variablen entfernt, um das Beispiel zu vereinfachen. Jetzt ist das Beispiel wahr. Wie gesagt, ich habe die Funktionalität in Remix getestet. Ich nehme an, das Problem liegt im Trüffeltest.

Ich habe "build" dir gelöscht und jetzt funktioniert es. Das Problem war, dass der Truffle Verträge nicht neu kompiliert, bevor der Test standardmäßig ausgeführt wird.