El compilador Solidity no funciona en la consola Javascript

Estoy usando Geth 1.4.5-stable junto con Solc versión 0.3.5-0 en Linux. Se ejecuta en un servidor de Digital Ocean. Tengo una cadena de testnet completamente sincronizada y estoy tratando de compilar contratos desde la consola de Javascript.

Pasos que he tomado :

A. Agregué Solidity a PATH conexport PATH=$PATH:/usr/bin/solc

B. Me conecté a la consola en otra ventana de shell con el siguiente comando:

geth --rpc --rpcaddr localhost --rpcapi "eth,net,web3,admin" \
  --solc /usr/bin/solc attach ipc:/home/physes/.ethereum/testnet/geth.ipc

Esto parece funcionar bien y puedo usar otros comandos API RPI.

C. Estaba probando un contrato de Greeter.

i)

var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) suicide(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'

ii)

var greeterCompiled = web3.eth.compile.solidity(greeterSource)

En este punto falla, y obtengo:

solc: exit status 1
Unknown exception during compilation.
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at <anonymous>:1:23

¿Qué estoy haciendo mal?

No debe /usr/bin/solc directamente a PATH, pero eso no debería causar su error
Ok, no creo que eso sea lo que lo causó (también lo intenté sin el indicador --solc). Contexto posiblemente importante: esto se está ejecutando en un servidor de Digital Ocean. Funciona bien en mi instancia local de Geth.
¿Está utilizando la misma versión en ambos (local y remoto)? La última versión que trabajé sin problemas fue geth 1.3.6. Probablemente debería informar el problema en github.
Acabo de probar la nueva versión de solcy está funcionando.

Respuestas (1)

Este es un error en el compilador de Solidity.

Aquí está una prueba rápida:

user@Kumquat:~$ echo '' | solc
Unknown exception during compilation.

Ver eth.compile.solidityfallas con la versión 0.3.5 #2703 de solc , que se vincula a Excepción en compilación desde stdin #651 .

Y el problema Solucionar bloqueo para la entrada de stdin. # 652 se ha solucionado, pero tomará una cantidad de tiempo desconocida (con suerte, corta) para que llegue a los paquetes del repositorio.

Este es el cambio de código para la solución: corrige el bloqueo de la entrada desde la entrada estándar. #652 - Archivos cambiados .

Puedes intentar instalar la versión anterior de solc.

O una solución ofrecida en el primer enlace de arriba:

Para cualquiera que quiera una solución temporal, puede clonar este repositorio: https://github.com/mattdf/solidity-static y hacer una compilación en docker, luego copiar el archivo solc a su instalación. Hace una compilación compilada estáticamente de solc, por lo que debería funcionar en la mayoría de las distribuciones.


Actualización 07/10/2016

He instalado la última versión de solcy ahora funciona correctamente:

user@Kumquat:~$ solc --version
solc, the solidity compiler commandline interface
Version: 0.3.5-0/RelWithDebInfo-Linux/g++/Interpreter

Y probando la excepción en la versión anterior:

user@Kumquat:~$ echo '' | solc
user@Kumquat:~$ 
Gran respuesta. Un problema similar: en mi máquina local con la versión anterior de Solidity que funciona, un problema que tengo es que no hay comentarios. Estoy usando geth attach etc. etc.la cadena de bloques en otra ventana, y aunque acepta la entrada de javascript, no hay respuesta y no la obtengo contract mined!al final. ¿Es esto un problema con la conexión?
Solo confirmando: ¿su cuenta está desbloqueada usando --unlock 0? Consulte ethereum.stackexchange.com/a/6028/1268 .