[Ethereum] Solidity/Remix Error : The constructor should be payable if you send value. How to solve this

remixsoliditytokens

pragma solidity ^0.4.16;

contract MyToken {
    // This creates an array with all balances
    mapping (address => uint256) public balanceOf;

// Initializes contract with initial supply tokens to the creator of the contract
function MyToken (
    uint256 initialSupply
) payable {
    balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
}

// Send coins
function transfer(address _to, uint256 _value) payable {
    require(balanceOf[msg.sender] >= _value);           // Check if the sender has enough
    require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows
    balanceOf[msg.sender] -= _value;                    // Subtract from the sender
    balanceOf[_to] += _value;                           // Add the same to the recipient
}
}

The following error occurs when I try to run the above code in Remix to transfer a certain amount of coins to another address:

transact to browser/test.sol:MyToken.transfer errored: VM error: invalid opcode.
The constructor should be payable if you send value.
The execution might have thrown.
Debug the transaction to get more information. 

Here is the screenshot of the page :
enter image description here

Please help me !!
Thanks

Best Answer

pragma solidity ^0.4.1;

contract MyToken {
    mapping (address => uint) public balanceOf;
    event SenderLogger(address);
    event ValueLogger(uint);

   // Initializes contract with initial supply tokens to the creator of the 
   //contract

   constructor (uint256 initialSupply) public payable {
       // Give the creator all initial tokens 
       balanceOf[msg.sender] = initialSupply;   
   }

   // Send coins
   function transfer(address _to, uint256 _value) public payable {

    // Check if the sender has enough
    require(balanceOf[msg.sender] >= _value);

    // Check for overflows
    require(balanceOf[_to] + _value >= balanceOf[_to]); 

    // Subtract from the sender
    balanceOf[msg.sender] -= _value;     

    // Add the same to the recipient               
    balanceOf[_to] += _value;                           
}
// fallback function
function () private payable {
    emit SenderLogger(msg.sender);
}

}

Related Topic