Construir geth desde la fuente no hace que Solidity esté disponible

Realicé una nueva instalación de go-ethereum desde la fuente en Ubuntu y Fedora, la inicié y esperaba encontrar Solidity disponible al hacerlo eth.getCompilers(), pero en su lugar aparece una lista vacía.

Luego instalé Solidity explícitamente, como se describe en el tutorial aquí , reinicié geth, pero eso no cambió nada. Instalé el paquete para que esté disponible globalmente npm -gy puedo ver que el paquete está disponible si intento importarlo desde una sesión de nodo de consola.

Tampoco estoy usando el cliente c ++, por lo que no tengo solcinstalado el ejecutable, pero parece que entiendo que no es necesario si realizo la npminstalación.

¿Qué me estoy perdiendo? Gracias.

Posible duplicado de Link solc con problema geth
eth.compilers devuelve una lista vacía incluso si está instalada, vea el tema justo arriba;)
solo como referencia, solc viene con el cliente cpp, no con geth, pero su instalación con npm debería estar bien
Gracias @ euri10 pero creo que este es un problema diferente. Mi mejor suposición, dado que el nodeejecutable puede encontrar Solidity, es que el gethejecutable no usa la variable de entorno NODE_PATH, por lo tanto, no puede encontrar la instalación npm de Solidity.

Respuestas (2)

eth.getCompilers()devuelve una lista vacía incluso si está instalado.

Puedes probar :

➜  ~ which solc
/usr/local/bin/solc

entonces en geth

> admin.setSolc("/usr/local/bin/solc")

Después de su edición, si solo desea usar el paquete npm, no podrá compilar en geth, pero aún puede usarlo en un script como se describe en el documento del paquete :

var solc = require('solc');
var input = "contract x { function g() {} }";
var output = solc.compile(input, 1); // 1 activates the optimiser
for (var contractName in output.contracts) {
    // code and ABI that are needed by web3
    console.log(contractName + ': ' + output.contracts[contractName].bytecode);
    console.log(contractName + '; ' + JSON.parse( output.contracts[contractName].interface));
}
Gracias @ euri10, pero ¿no acabas de escribir que el solcejecutable es solo parte de la distribución del cliente c ++? ¿Necesito instalar los clientes go y c++ si quiero usar Solidity dentro de la gethconsola? Además de eso, la npminstalación no me da un solcejecutable, solo bibliotecas que puedo usar en node.
efectivamente, si desea probar el ejecutable dentro de geth, deberá instalar solc, que viene con el paquete c ++, disculpas, no fui lo suficientemente claro

Por lo tanto, parece que el compilador independiente de Solidity solcsolo está disponible como parte de las herramientas de línea de comandos de Ethereum C++.

Esto significa que si desea usar solcdesde adentro geth, debe instalar las herramientas Go, que le brindan, gethy las herramientas C ++, que le brindan solc.

Esto me parece muy extraño, particularmente considerando que las herramientas de C++ son un proyecto secundario que pasó por momentos difíciles y aparentemente se está reiniciando .

Entonces, ¿qué se supone que uno debe usar hoy en día como el principal compilador de Solidity? Quizás la consola de NodeJS .

Estoy siguiendo muy de cerca el desarrollo de C++ y actualmente están en un proceso de dividir el proyecto de C++ en bifurcaciones independientes para eth, ethminer, solidity, etc. ser capaz de instalar la solidez sólo para entonces.