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 getMoney
Funktion 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.
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!
szerte