0

Hey there guys how are u , can someone help me on this ?

contract Token {
    mapping(address => uint) public balances;
    mapping(address => mapping(address => uint)) public allowance;
    uint public totalSupply = 1000000000000 * 10 ** 18;
    string public name = "testcoin";
    string public symbol = "tst";
    uint public decimals = 18;


    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);

    constructor() {
        balances[msg.sender] = totalSupply;
    }
    function balanceOf(address owner) public returns(uint) {
        return balances[owner];
    }
    function transfer(address to, uint value) public returns(bool) {
        require(balanceOf(msg.sender) >= value, 'balance too low');
        balances[to] += value;
        balances[msg.sender] -= value;
       emit Transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) public returns(bool) {
        require(balanceOf(from) >= value, 'balance too low');
        require(allowance[from][msg.sender] >= value, 'allowance too low');
        balances[to] += value;
        balances[from] -= value;
        emit Transfer(from, to, value);
        return true;   
    }


    function approve(address spender, uint value) public returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;   
    }
}
1
  • Explain your problem.
    – user610620
    Commented Dec 13, 2022 at 0:50

1 Answer 1

1

Your contract does not transfer eth out to an external address or performs an external call to a smart contract, so reentrency is not a concern here since that's what needed in order to be vulnerable to reentrency.

Be careful tho, you forgot to reduce the allowance when doing the transferFrom, which means that if user A has 100 tokens and approve's user B to use 10 tokens, user B will be able to call transferFrom 10 times and steal 90 tokens from user A.

Other than that it looks pretty good!

Hope this helps!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.