11

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.

learnercys
  • 215
  • 1
  • 2
  • 7

2 Answers2

15

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

emit Transfer(msg.sender, _to, _value);
qbsp
  • 4,367
  • 2
  • 15
  • 26
5

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

Filip
  • 199
  • 1
  • 6