Отправка эфиров с помощью mocha.js и трюфеля может привести к увеличению суммы, чем предполагалось
Добрый день,
У меня есть контракт General и библиотека 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();
}
}
Теперь странная часть, когда я пытаюсь отправить деньги на генеральный контракт, используя функцию getMoney
, сумма, которая равна на самом деле передано ДВАЖДЫ указанная сумма.
Это файл JS, который я использую для проверки моего контракта:
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, ""));
});
});
});
И окончательные результаты:
✓ 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
Другая полезная информация, которая может быть полезной, заключается в том, что всякий раз, когда я удаляю вызов во внешнюю библиотеку, все работает отлично.
Я озадачен этим странным поведением и буду признателен за любую помощь или прозрение, которое у вас может быть.
2 ответа
Вы совершенно правы, чтобы быть сбитым с толку - поведение, которое вы наблюдаете, неверно.
Это открытая проблема с testrpc, и, как вы говорите, она связана с вызовом библиотечной функции: https://github.com/ethereumjs/testrpc/issues/122
Извините, я не мог больше помочь - вы можете следить за проблемой, когда она официально зафиксирована!