Das Senden von Ethern mit mocha.js und truffle kann zu größeren Summen führen als beabsichtigt

Schönen Tag,

Ich habe einen Vertrag General und eine Bibliothek GenLib.

library GenLib{
    event MoneyIn (address _from, uint256 _amount);
    function moneyIn() {
       MoneyIn(msg.sender, msg.value); <- Only call the event MoneyIn()
   } 
}

contract General{
    function getMoney () payable{
        GenLib.moneyIn();
   }
}

Nun der seltsame Teil, wenn ich versuche, Geld mit der getMoneyFunktion an den allgemeinen Vertrag zu senden, ist der tatsächlich überwiesene Betrag das ZWEIMALE des angegebenen Betrags.

Das ist die JS-Datei, die ich verwende, um meinen Vertrag zu überprüfen:

var Gen   = artifacts.require("General");

contract('Gen', function(accounts) {

  var user = accounts[0];

  var valueP2C      = web3.toWei(2, "ether");

  it("Deploy Gen contract", function(){
    return Gen.deployed().then(function(instance){
      gen = instance;
    });
  });

  it("Gen account is empty", function(done){
    web3.eth.getBalance(gen.address, function(err, res){
      done(assert.equal(res.valueOf(), 0, ""));
    });
  });

  it("Use account is full", function(done){
    web3.eth.getBalance(user, function(err, res){
      userAmount = res.valueOf(); 
      done(assert.equal(res.valueOf(), 0, ""));
    });
  });  

  it ("Send money from user to gen", function(done){ 
    gen.getMoney({from: user, value: valueP2C}).then(function(res){
        done(assert.notEqual(res, null, ""));
      });
  });


  it("Gen recieved money", function(done){
    web3.eth.getBalance(gen.address, function(err, res){
      done(assert.equal(res.valueOf(), valueP2C, ""));
    });
  });

  it("User account is P2C lower", function(done){
    web3.eth.getBalance(user, function(err, res){
      done(assert.equal(res.valueOf(), userAmount - valueP2C, ""));
    });
  });  
}); 

Und die Endergebnisse:

✓ Deploy Gen contract
✓ Gen account is empty
✓ User account is full
✓ Send money from user to gen
1) Gen received money
> No events were emitted
2) User account is P2C lower
> No events were emitted


expected '4000000000000000000' to equal '2000000000000000000' <-TWICE THE AMOUNT
expected '87641250800000000000' to equal 89643554700000000000

Eine weitere nützliche Information ist, dass immer dann, wenn ich den Aufruf an die externe Bibliothek entferne, alles einwandfrei funktioniert.

Ich bin verblüfft über dieses seltsame Verhalten und würde mich über jede Hilfe oder Einsicht freuen, die Sie haben könnten.

Dieser Fehler ist bei mir mit testRPC 4.0.1 immer noch da. Hat jemand eine Problemumgehung gefunden?

Antworten (2)

Sie haben völlig Recht, verblüfft zu sein - das Verhalten, das Sie beobachten, ist falsch.

Dies ist ein offenes Problem mit testrpc und hängt, wie Sie sagen, mit dem Aufruf einer Bibliotheksfunktion zusammen: https://github.com/ethereumjs/testrpc/issues/122

Tut mir leid, dass ich dir nicht weiterhelfen konnte – du kannst das Problem im Auge behalten, wenn es offiziell behoben ist!