Enlace solc con problema geth

Después de actualizar a geth 1.4.4, ya no puedo hacer referencia al compilador de geth.

El compilador solc está instalado en /usr/local/bin pero esto es lo que obtengo cuando busco compiladores disponibles:

> eth.getCompilers();
I0520 10:22:45.501340 common/compiler/solidity.go:114] solc, the solidity compiler commandline interface
Version: 0.3.2-7a51852a/Release-Darwin/appleclang/JIT

path: /usr/local/bin/solc

[]

Luego trato de establecer la ruta del compilador nuevamente:

> admin.setSolc("/usr/local/bin/solc")
I0520 10:25:49.234999 common/compiler/solidity.go:114] solc, the solidity compiler commandline interface
Version: 0.3.2-7a51852a/Release-Darwin/appleclang/JIT

path: /usr/local/bin/solc
"solc, the solidity compiler commandline interface\nVersion: 0.3.2-7a51852a/Release-Darwin/appleclang/JIT\n\npath: /usr/local/bin/solc"

Cuando reviso los compiladores nuevamente, todavía obtengo:

> eth.getCompilers();
[]

Obtengo lo mismo usando:

> web3.eth.getCompilers();
[] 

He reinstalado go-ethereum, npm.

¿Alguien puede darme una pista de qué hacer o dónde buscar para buscar?

No tuve problemas antes de actualizar a geth 1.4.4

Gracias por adelantado

Respuestas (1)

Resumen

Fallo de segmentación con la versión de solc 0.3.2-7a51852a/Release-Darwin/appleclang/JIT , corregido con una versión actualizada posterior .

ACTUALIZACIÓN 26/06/2016

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.



Detalles

Comprueba el compilador de Solidity dentrogeth

Acabo de verificar por instalación (Linux) y el resultado que obtiene es consistente con el resultado que obtengo, pero el compilador funciona correctamente.

Ejecute la prueba a continuación para verificar si su compilador está configurado correctamente.

Estoy usando el siguiente código:

contract Test { 
    function double(int a) constant returns(int) {
        return 2*a;
    } 
}

He aplanado el código de arriba para:

> var testSource='contract Test {  function double(int a) constant returns(int) { return 2*a; } }'
undefined

He intentado compilar el código usando la siguiente declaración:

> var testCompiled = web3.eth.compile.solidity(testSource);
undefined

Y verificó los resultados de la compilación:

> testCompiled
{
  Test: {
    code: "0x6060604052602a8060106000396000f3606060405260e060020a60003504636ffa1caa8114601a575b005b6002600435026060908152602090f3",
    info: {
      abiDefinition: [{...}],
      compilerOptions: "--bin --abi --userdoc --devdoc --add-std --optimize -o /tmp/solc935251869",
      compilerVersion: "0.3.2",
      developerDoc: {
        methods: {}
      },
      language: "Solidity",
      languageVersion: "0.3.2",
      source: "contract Test {  function double(int a) constant returns(int) { return 2*a; } }",
      userDoc: {
        methods: {}
      }
    }
  }
}

Y si quieres comprobar si el código se ejecuta correctamente:

> var testContract = web3.eth.contract(testCompiled.Test.info.abiDefinition);
var test = testContract.new({
    from:web3.eth.accounts[0], 
    data: testCompiled.Test.code, gas: 2000000}, 
    function(e, contract) {
      if (!e) {
        if (!contract.address) {
          console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
        } else {
          console.log("Contract mined! Address: " + contract.address);
          console.log(contract);
        }
    }
})
...
Contract mined! Address: 0x5e3361efa79827d8a53a397b454770c6816585d7
> test.double(5)
10


Compruebe el compilador Solidity

Si aún tiene problemas, intentemos compilar el código fuente fuera de geth.

Guarde el siguiente código en Test.sol:

contract Test { 
    function double(int a) constant returns(int) {
        return 2*a;
    } 
}

Desde su terminal, debería poder ejecutar los siguientes comandos si su compilador de solidez funciona correctamente:

user@Kumquat:~$ solc --bin Test.sol

======= Test =======
Binary: 
606060405260728060106000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480636ffa1caa146037576035565b005b604b60048080359060200190919050506061565b6040518082815260200191505060405180910390f35b6000816002029050606d565b91905056

user@Kumquat:~$ solc --abi Test.sol

======= Test =======
Contract JSON ABI
[{"constant":true,"inputs":  [{"name":"a","type":"int256"}],"name":"double","outputs":[{"name":"","type":"int256"}],"type":"function"}]

Si los comandos anteriores no producen un resultado similar, hay algo que no está del todo bien con su solcbinario.


Controlarweb3.js

Tiene un mensaje de error que incluye el texto web3.js. El problema podría estar en este módulo. Actualizaré cuando haya investigado un poco más.

Hola, gracias ofr respuesta. Recibo un error cuando intento compilar: "solc: señal: error de segmentación en web3.js:3119:20 en web3.js:6023:15 en web3.js:4995:36 en <anónimo>:1:20 >"
¿Simplemente confirmando que no está agregando el >al principio de cada declaración? Este es el aviso en geth.
Hola, he compilado muchos contratos antes. Así que no hay problema con eso :-)
También he reinstalado cpp-ethereum (que instala el solc). Creo que puede ser un problema con el node.js pero no estoy seguro
Sí. ¿Puede verificar que puede compilar el código desde su línea de comando (fuera del sitio geth)?
Hola, No De hecho me sale este error al compilar directamente como indicaste: Error de segmentación: 11
Pero supongo que eth.getCompilers(); me da una matriz vacía de compiladores [] también está en cuestión?
no lo creo La matriz vacía []debe ser como el undefinedmensaje. ¿ solcDesde su línea de comando se ejecuta en absoluto? ¿Sin ningún parámetro? ¿Y con el --helpparámetro?
Sí: solc --version solc, la interfaz de línea de comandos del compilador de solidity Versión: 0.3.2-7a51852a/Release-Darwin/appleclang/JIT
Gracias por su ayuda, pero sin suerte hasta ahora. Intentaré construir el solc desde la fuente ya que reinstalar cpp-ethereum con brew no ayudó
Reinstalé cpp-ethereum hoy y ahora el compilador funciona y también dentro de geth. La matriz de compiladores dentro de geth aún devuelve [] pero funciona. Supongo que ha habido una actualización. Gracias por tu ayuda.
Cuando intento compilar el contrato, aparece el siguiente mensaje de error: exec: "solc": archivo ejecutable no encontrado en $PATH en web3.js:3119:20 en web3.js:6023:15 en web3.js:4995 :36 en <anónimo>:1:20 ¿Alguien puede ayudar?
@Physes intente sudo apt-get update y luego sudo apt-get install solc