Базовая передача токенов и модульное тестирование

У меня возникли проблемы с тестированием очень наивного метода перевода моей монеты, основанного на демонстрационной монете ethereum.org . Я упростил его до самого необходимого, но мой модульный тест на прочность продолжает давать сбои. Вот монетный контракт:

pragma solidity ^0.4.24;

// A very naive coin for sanity checking                                                                                                                                                              
contract Mikancoin {
  uint public totalSupply;
  uint8 public decimals = 3;
  mapping (address => uint) public balanceOf;

  constructor(uint _initialSupply) public {
    totalSupply = _initialSupply * 10 ** uint(decimals);
    balanceOf[msg.sender] = totalSupply;
  }

  function transfer(address _to, uint _tokens) public returns (bool success) {
    // todo: add more checks                                                                                                                                                                               
    balanceOf[msg.sender] -= _tokens;
    balanceOf[_to] += _tokens;
    return true;
  }

  function balanceOf(address _tokenOwner) public view returns (uint balance) {
    return balanceOf[_tokenOwner];
  }
}

Теперь я написал тест метода передачи:

pragma solidity ^0.4.24;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Mikancoin.sol";

contract TestMikancoin {
  address fox = 0x284A84baA00626e2773a1138D53923b4acAED2F4;

  function testTransfer() public {
    Mikancoin mikan = Mikancoin(DeployedAddresses.Mikancoin());

    uint startingBalance = mikan.balanceOf(msg.sender);

    Assert.equal(mikan.balanceOf(fox), 0, "Initial fox balance");

    uint tokens = 5;
    Assert.isTrue(mikan.transfer(fox, tokens), "Transfer succeeded");
    Assert.equal(mikan.balanceOf(fox), tokens, "Fox balance after transfer");
    Assert.equal(mikan.balanceOf(msg.sender), startingBalance - tokens, "Sender balance after transfer");
  }
}

Я запускаю локально через ganache-clivia. truffle test.Он завершается со следующим выводом:

1 провал

1) TestMikancoin testTransfer: Ошибка: Баланс отправителя после перевода (Проверено: 99000, Против: 98995)

Ответы (1)

Я понял. Мне нужно использовать thisвместоmsg.sender.