Salidas de la consola Geth después de admin.setSolc("/usr/bin/solc")
:
eth.compile.solidity("")
I0601 15:31:56.663260 common/compiler/solidity.go:114] solc, the solidity compiler commandline interface
Version: 0.3.3-0/RelWithDebInfo-Linux/g++/Interpreter
path: /usr/bin/solc
solc: empty source string
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at :1:1
y
eth.getCompilers()
[]
Obtengo una matriz vacía en lugar de ['Solidity']
.
Solidez instalada a través de:sudo apt-get install solc
salida para which solc
: /usr/bin/solc
(agregué esto a PATH)
He visto una pregunta similar , pero estoy usando la última versión (0.3.3) y todavía tengo el problema. ¿Me estoy perdiendo algo?
El resultado vacío eth.getCompilers()
es normal.
Puedes probar lo siguiente:
> eth.getCompilers()
[]
> var ceilSource='contract Ceil { function ceil(uint a, uint m) constant returns (uint ) { return ((a + m - 1) / m) * m; }}'
undefined
> var ceilCompiled = web3.eth.compile.solidity(ceilSource);
undefined
> ceilCompiled
{
Ceil: {
code: "0x606060405260348060106000396000f3606060405260e060020a60003504638587be6e8114601a575b005b602435600435810160001901819004026060908152602090f3",
info: {
abiDefinition: [{...}],
compilerOptions: "--bin --abi --userdoc --devdoc --add-std --optimize -o /tmp/solc067035811",
compilerVersion: "0.3.4",
developerDoc: {
methods: {}
},
language: "Solidity",
languageVersion: "0.3.4",
source: "contract Ceil { function ceil(uint a, uint m) constant returns (uint ) { return ((a + m - 1) / m) * m; }}",
userDoc: {
methods: {}
}
}
}
}
Si puede reproducir los resultados anteriores, la instalación de su compilador funciona correctamente.
(El código es de ¿Cuál es la forma más económica de redondear () o ceil () a múltiplos de 1000? ).
Además, obtengo los mismos resultados que usted al compilar una cadena vacía:
> eth.compile.solidity("")
solc: empty source string
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at <anonymous>:1:1
EDITAR 15/06/2016 - Respondiendo a@Matthias
P: Cuando dice que el resultado de getCompilers vacío es normal, ¿qué significa eso exactamente? ¿Qué hace que esta función devuelva algo o no?
R: No sé qué significa exactamente el []
resultado eth.getCompilers()
, pero cuando ejecuto los siguientes comandos en mi geth console
pantalla, los resultados son los que veo, y no tengo problemas para compilar el código de Solidity desde dentro geth
. Solo estoy tratando de eliminar los diferentes puntos de error.
Esto es lo que veo:
geth console
...
> eth.getCompilers()
I0615 01:17:48.956307 common/compiler/solidity.go:114] solc, the solidity compiler commandline interface
Version: 0.3.4-0/RelWithDebInfo-Linux/g++/Interpreter
path: /usr/bin/solc
[]
> eth.getCompilers()
[]
La primera ejecución de getCompilers()
produce algunos resultados de solc
. Desde la línea de comando, si ejecuto solc --version
, también obtengo la información de la versión.
user@Kumquat:~/TestSolc$ solc --version
solc, the solidity compiler commandline interface
Version: 0.3.4-0/RelWithDebInfo-Linux/g++/Interpreter
Si puede ver información similar a la que obtengo, se puede acceder a su compilador de Solidity desde geth
.
Aquí hay una prueba adicional que puede probar si tiene problemas para compilar la fuente de Solidity desde dentro geth
.
Guardé el siguiente código en Ceil.sol:
contract Ceil {
function ceil(uint a, uint m) constant returns (uint ) {
return ((a + m - 1) / m) * m;
}
// To measure gas
function ceil1(uint a, uint m) returns (uint ) {
return ((a + m - 1) / m) * m;
}
}
Ahora estoy compilando afuera geth
usando los parámetros de la línea de comando en los ceilCompiled
resultados anteriores:
user@Kumquat:~/TestSolc$ solc --bin --abi --userdoc --devdoc --add-std --optimize -o /tmp/solc067035811 Ceil.sol
Aquí está el contenido de mi directorio /tmp/solc067035811:
user@Kumquat:~/TestSolc$ ls -al /tmp/solc067035811/
total 24
drwxrwxr-x 2 bok bok 4096 Jun 15 01:21 .
drwxrwxrwt 12 root root 4096 Jun 15 01:22 ..
-rw-rw-r-- 1 bok bok 328 Jun 15 01:21 Ceil.abi
-rw-rw-r-- 1 bok bok 156 Jun 15 01:21 Ceil.bin
-rw-rw-r-- 1 bok bok 22 Jun 15 01:21 Ceil.docdev
-rw-rw-r-- 1 bok bok 22 Jun 15 01:21 Ceil.docuser
Y aquí está el contenido de los archivos en el directorio /tmp/solc067035811:
user@Kumquat:~/TestSolc$ cat /tmp/solc067035811/Ceil.abi
[{"constant":false,"inputs":[{"name":"a","type":"uint256"},
{"name":"m","type":"uint256"}],"name":"ceil1","outputs":
[{"name":"","type":"uint256"}],"type":"function"},
{"constant":true,"inputs":[{"name":"a","type":"uint256"},
{"name":"m","type":"uint256"}],"name":"ceil","outputs":
[{"name":"","type":"uint256"}],"type":"function"}]
user@Kumquat:~/TestSolc$ cat /tmp/solc067035811/Ceil.bin
6060604052603e8060106000396000f3606060405260e060020a600035046314bdae22811460245780638587be6e146024575b005b602435600435810160001901819004026060908152602090f3 user@Kumquat:~/TestSolc$ cat /tmp/solc067035811/Ceil.docdev
{
"methods" : {}
}
user@Kumquat:~/TestSolc$ cat /tmp/solc067035811/Ceil.docuser
{
"methods" : {}
}
Si puede reproducir resultados similares ejecutándose solc
desde su línea de comando, lo más probable es que el problema no esté en su compilador de Solidity. Tendrás que seguir buscando la causa.
galáhad
privacidadisahumanright.eth
solc
en otra pregunta , por lo que tuve la curiosidad de revisar su pregunta.Matías
solc
compila su fragmento de código muy bien en el cli (estoy recuperando la misma cadena binaria), pero tan pronto como cargo geth e intento compilar a travéseth.compile.solidity
de , obtengosolc: exit status 1; Unknown exception during compilation.
Cuando dice que el resultado de getCompilers vacío es normal, ¿qué significa eso? significa exactamente? ¿Qué hace que esta función devuelva algo o no?privacidadisahumanright.eth
solc
problema. Algunas posibilidades:solc
no se puede crear el subdirectorio temporal;solc
no se puede compilar correctamente con algunos de los parámetros de la línea de comandos--bin --abi --userdoc --devdoc --add-std --optimize -o /tmp/solc067035811
.Matías
privacidadisahumanright.eth
solc
ejecutable instalado en su sistema? Puede usar el comandofind / -name 'solc'
en Linux o OS/X.