Отправка эфиров с помощью 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

Другая полезная информация, которая может быть полезной, заключается в том, что всякий раз, когда я удаляю вызов во внешнюю библиотеку, все работает отлично.

Я озадачен этим странным поведением и буду признателен за любую помощь или прозрение, которое у вас может быть.

5 голосов | спросил shultz 26 PMpWed, 26 Apr 2017 19:03:09 +030003Wednesday 2017, 19:03:09

2 ответа


2

Вы совершенно правы, чтобы быть сбитым с толку - поведение, которое вы наблюдаете, неверно.

Это открытая проблема с testrpc, и, как вы говорите, она связана с вызовом библиотечной функции: https://github.com/ethereumjs/testrpc/issues/122

Извините, я не мог больше помочь - вы можете следить за проблемой, когда она официально зафиксирована!

ответил Adam Dossa 26 PMpWed, 26 Apr 2017 21:31:26 +030031Wednesday 2017, 21:31:26
2

Он исправлен в последней версии 4.1.0

ответил szerte 23 AM000000100000005331 2017, 10:47:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132