I'm following this page instructions to create my own crypto-currency with Ethereum. Here is my code:

pragma solidity ^0.4.18;

contract MyToken {
  string public name;
  string public symbol;
  uint8 public decimals;

  event Transfer(address indexed from, address indexed to, uint256 value);

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

  function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits) public {
    balanceOf[msg.sender] = initialSupply;
    name = tokenName;
    symbol = tokenSymbol;
    decimals = decimalUnits;
  }

  /* Send coins */
  function transfer(address _to, uint256 _value) public {
    /* Check if the sender has balance and for overflows */
    require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);

    /* Add and subtract new balances */
    balanceOf[msg.sender] -= _value;
    balanceOf[_to] += _value;

    /* Notify anyone listening that this transfer took place */
    Transfer(msg.sender, _to, _value);
  }
}

Right now I'm stuck in the line Transfer(msg.sender, _to, _value); because of this error:

Invoking events without "emit" prefix is deprecated.
    Transfer(msg.sender, _to, _value);
    ^-------------------------------^

I'm still new in Ethereum platform so I'm not sure what that error means.

up vote 5 down vote accepted

You need to add emit to your instruction to avoid that warning. That kind of invocation is deprecated.

emit Transfer(msg.sender, _to, _value);
  • It would be useful for you to include what the emit prefix does. – Nic Szer Jun 6 at 8:50
  • emit will just fire the event. – mirg Jun 6 at 8:53

The emit keyword was introduced 'in order to make events stand out with regards to regular function calls' (Solidity release notes). Please view this link for a more detailed explanation: https://medium.com/@aniketengg/emit-keyword-in-solidity-242a679b0e1a

Furthermore, here is the official example, along with its explanation, from the Solidity docs:

function deposit(bytes32 _id) public payable {
    // Events are emitted using `emit`, followed by
    // the name of the event and the arguments
    // (if any) in parentheses. Any such invocation
    // (even deeply nested) can be detected from
    // the JavaScript API by filtering for `Deposit`.
    emit Deposit(msg.sender, _id, msg.value);

The link for that specific part of the docs is the following: http://solidity.readthedocs.io/en/v0.4.21/contracts.html#events

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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