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?
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.solidity
fallas 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.
He instalado la última versión de solc
y 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:~$
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?--unlock 0
? Consulte ethereum.stackexchange.com/a/6028/1268 .
ismael
física
ismael
privacidadisahumanright.eth
solc
y está funcionando.