Nach dem Upgrade auf Geth 1.4.4 kann ich nicht mehr auf den Compiler von Geth verweisen.
Der Solc-Compiler ist in /usr/local/bin installiert, aber das bekomme ich, wenn ich nach verfügbaren Compilern suche:
> 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
[]
Dann versuche ich den Compiler-Pfad erneut zu setzen:
> 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"
Wenn ich die Compiler erneut überprüfe, bekomme ich immer noch:
> eth.getCompilers();
[]
Ich bekomme das gleiche mit:
> web3.eth.getCompilers();
[]
Ich habe go-ethereum, npm neu installiert.
Kann mir jemand einen Tipp geben, was zu tun ist oder wo ich suchen muss?
Ich hatte keine Probleme vor dem Upgrade auf geth 1.4.4
Danke im Voraus
Segmentierungsfehler mit Solc-Version 0.3.2-7a51852a/Release-Darwin/appleclang/JIT , behoben mit später aktualisierter Version .
UPDATE 26.06.2016
Dies ist ein Fehler im Solidity-Compiler.
Hier ein Schnelltest:
user@Kumquat:~$ echo '' | solc
Unknown exception during compilation.
Siehe eth.compile.solidity
schlägt mit Solc-Version 0.3.5 #2703 fehl , die auf Exception on Compilation von stdin #651 verweist .
Und das Problem Fix crash for input from stdin. #652 wurde behoben, wird aber eine unbekannte (hoffentlich kurze) Zeit brauchen, um es in die Repository-Pakete zu schaffen.
Dies ist die Codeänderung für den Fix – Fix crash for input from stdin. #652 - Dateien geändert .
Sie können versuchen, die vorherige Version von zu installieren solc
.
Oder eine Problemumgehung, die im ersten Link oben angeboten wird:
Für alle, die eine vorübergehende Problemumgehung wünschen, können Sie dieses Repo klonen: https://github.com/mattdf/solidity-static und einen eingebauten Docker erstellen und dann die Solc-Datei in Ihre Installation kopieren. Es erstellt einen statisch kompilierten Build von Solc, sodass es auf den meisten Distributionen funktionieren sollte.
geth
Ich habe gerade die Installation (Linux) überprüft und die Ausgabe, die Sie erhalten, stimmt mit der Ausgabe überein, die ich erhalte, aber der Compiler funktioniert ordnungsgemäß.
Führen Sie den folgenden Test aus, um zu überprüfen, ob Ihr Compiler richtig konfiguriert ist.
Ich verwende den folgenden Code:
contract Test {
function double(int a) constant returns(int) {
return 2*a;
}
}
Ich habe den obigen Code abgeflacht zu:
> var testSource='contract Test { function double(int a) constant returns(int) { return 2*a; } }'
undefined
Ich habe versucht, den Code mit der folgenden Anweisung zu kompilieren:
> var testCompiled = web3.eth.compile.solidity(testSource);
undefined
Und überprüfte die Ergebnisse der Zusammenstellung:
> 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: {}
}
}
}
}
Und wenn Sie überprüfen möchten, ob der Code korrekt ausgeführt wird:
> 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
Wenn Sie immer noch auf Probleme stoßen, versuchen wir, den Quellcode außerhalb zu kompilieren geth
.
Speichern Sie den folgenden Code in Test.sol:
contract Test {
function double(int a) constant returns(int) {
return 2*a;
}
}
Von Ihrem Terminal aus sollten Sie die folgenden Befehle ausführen können, wenn Ihr Solidity-Compiler ordnungsgemäß funktioniert:
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"}]
Wenn die obigen Befehle keine ähnliche Ausgabe erzeugen, stimmt etwas mit Ihrer solc
Binärdatei nicht.
web3.js
Sie haben eine Fehlermeldung, die den Text enthält web3.js
. Das Problem könnte bei diesem Modul liegen. Ich werde aktualisieren, wenn ich es ein bisschen mehr recherchiert habe.
Seestern
Datenschutz ist ein Menschenrecht.eth
>
am Anfang jeder Anweisung hinzufügen? Dies ist die Eingabeaufforderung ingeth
.Seestern
Seestern
Datenschutz ist ein Menschenrecht.eth
geth
)?Seestern
Seestern
Datenschutz ist ein Menschenrecht.eth
[]
muss wie dieundefined
Nachricht sein. Läuftsolc
überhaupt von Ihrer Kommandozeile aus? Ohne Parameter? Und mit den--help
Parametern?Seestern
Datenschutz ist ein Menschenrecht.eth
Seestern
Seestern
Physen
PetrosM