¿Error de sintaxis en el código oficial Ethereum ERC20?

Copié y pegué el código que se encuentra aquí: https://www.ethereum.org/token en un archivo llamado TokenERC20.sol

cuando corro

truffle compile

me sale este error:

SyntaxError: Expected "contract", "import", "library", "pragma", "using", comment, end of input, end of line, or whitespace but "i" found.
    at peg$buildStructuredError (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:177767:12)
    at Object.peg$parse [as parse] (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:181366:11)
    at Object.parse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:89808:23)
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:57847:36
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:50141:5
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:66021:16
    at next (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:75933:18)
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:50126:7
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:96942:5
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:75838:16

¿Alguien sabe qué podría estar causando esto?

EDITAR El problema parece estar aquí:

pragma solidity ^0.4.8;

interface tokenRecipient {
   function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public;
}

contract TokenERC20 {
    // Public variables of the token
    string public name;
    string public symbol;
    uint8 public decimals = 18;
    // 18 decimals is the strongly suggested default, avoid changing it
    uint256 public totalSupply;

Si comento la interfaz y cada línea que la usa, se compila bien. ¿Hay algún problema con la forma en que se declara la interfaz?

¿Qué editor estás usando para editar el archivo? ¿Puedes guardar tu archivo como utf8 e intentarlo de nuevo?
@Ismael Estoy usando Atom y en la parte inferior del archivo dice que ya es utf8
@Ismael Gracias por la ayuda, publiqué una edición de la pregunta. Encontré la línea que está causando el problema, pero no estoy seguro de cómo reescribirla.
¿Cuál es su versión del compilador de Solidity? Parece que requiere 0.4.11 o superior (a pesar del pragma).

Respuestas (1)

Los contratos de interfaz se introdujeron en Solidity versión 0.4.11 :

Versión 0.4.11

Esta versión... agrega contratos de interfaz e implementa algunas comprobaciones de seguridad adicionales.

Características:

...

  • Contratos de interfaz de soporte.

...

Los compiladores anteriores a 0.4.11 dan el error que informa.

Verifique la versión de su compilador, pero pragma solidity ^0.4.8;no parece prometedor.