Error del compilador Solidity Solc en el código que Remix puede compilar

Estoy intentando compilar el siguiente código de solidez usando solc en NodeJS.

pragma solidity ^0.4.11;

contract helloWorld {

  string public message;

  function constructor() public{
    message = "Hello World";
  }

  function sayHi() constant public returns (string){
    return message;
  }
}

Los comandos que he escrito en NodeJS para hacer esto son:

var source = `source code above`
var compiled = solc.compile(source)

Cuando miro el objeto 'compilado', veo los siguientes errores:

formal:
   { errors:
      [ ':5:3: Error: Type "string" not supported for state variable.\n  string public message;\n  ^-------------------^\n' ] },
  sourceList: [ '' ],
  sources: { '': { AST: [Object] } } }

Tengo abierta una instancia de TestRPC en funcionamiento y puedo ejecutar web3.eth.accounts desde la consola del nodo a esta instancia de TestRPC (a través del puerto 8485). El código compila correctamente en Remix. Estoy siguiendo una guía sobre cómo hacer que estas bibliotecas funcionen en una computadora con Windows, por lo que no veo por qué algo podría ser incompatible entre sí.

Las versiones que estoy usando son

  • solc - 0.4.11
  • web3 - 0.19.0
¿Podría intentar actualizar su compilador (solc) y cambiar pragma solidity ^0.4.11;a pragma solidity ^0.4.22;(la última versión)

Respuestas (1)

El error que obtienes es de la función.

publicsayHi() constant public returns (string)

~~~Creo que la función Solidity no puede devolver el tipo de cadena.~~~ (Me equivoqué en esto)

Esto es incorrecto, las funciones de Solidity pueden devolver cadenas
Tienes razón. Pero por qué el error dijo.Error: Type "string" not supported for state variable.
Hay varias fuentes en la web donde las personas devuelven cadenas, como esta forum.ethereum.org/discussion/8053/…
No lo sé, pero supongo que posiblemente porque es una versión antigua del compilador.
Veo algo. function constructor() public¿ Debería ser esto function helloWorld() public?
esto es cierto para solidity 0.4.21 y versiones anteriores. pero aun así, no produciría el error de cadena.