Ich habe Probleme, eine sehr naive Transfermethode für meine Münze zu testen, die auf der ethereum.org-Demomünze basiert . Ich habe es auf das Wesentliche reduziert, aber mein Solidity Unit Test schlägt immer wieder fehl. Hier ist der Coin-Vertrag:
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];
}
}
Jetzt habe ich einen Test der Übertragungsmethode geschrieben:
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");
}
}
Ich laufe lokal gegen ganache-cli
über truffle test.
Es schlägt mit der folgenden Ausgabe fehl:
1 versagt
1) TestMikancoin testTransfer: Fehler: Sendersaldo nach Überweisung (Getestet: 99000, Gegen: 98995)
Ich habe es herausgefunden. Ich muss this
stattdessen verwendenmsg.sender.