Das Bauen von Geth aus der Quelle macht Solidity nicht verfügbar

Ich habe eine Neuinstallation von go-ethereum aus der Quelle auf Ubuntu und Fedora durchgeführt, es gestartet und erwartet, Solidity verfügbar zu finden, wenn ich tue eth.getCompilers(), aber ich erhalte stattdessen eine leere Liste.

Ich habe Solidity dann explizit installiert, wie im Tutorial hier beschrieben , neu gestartet geth, aber das hat nichts geändert. Ich habe das Paket so installiert, dass es global verfügbar ist, npm -gund ich kann sehen, dass das Paket verfügbar ist, wenn ich versuche, es aus einer Konsolenknotensitzung zu importieren.

Ich verwende den C++-Client auch nicht, daher habe ich die solcausführbare Datei nicht installiert, aber ich scheine zu verstehen, dass sie nicht benötigt wird, wenn ich die npmInstallation durchführe.

Was vermisse ich? Vielen Dank.

Mögliches Duplikat von Link solc mit Geth-Problem
eth.compiler geben eine leere Liste zurück, auch wenn sie installiert ist, siehe das Thema oben;)
nur als Referenz Solc kommt mit dem cpp-Client, nicht mit Geth, aber Ihre Installation mit npm sollte in Ordnung sein
Danke @euri10, aber ich glaube, das ist ein anderes Problem. Angesichts der Tatsache, dass die ausführbare Datei Solidity finden kann, ist meine beste Vermutung, dass die nodeausführbare Datei die Umgebungsvariable NODE_PATH nicht verwendet und daher die npm-Installation von Solidity nicht finden kann. geth

Antworten (2)

eth.getCompilers()gibt eine leere Liste zurück, selbst wenn es installiert ist.

Du kannst es versuchen :

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

dann in geth

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

Wenn Sie nach Ihrer Bearbeitung nur das npm-Paket verwenden möchten, können Sie es nicht in Geth kompilieren, aber Sie können es dennoch in einem Skript verwenden, wie in der Paketdokumentation beschrieben :

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));
}
Danke @euri10, aber hast du nicht gerade geschrieben, dass die solcausführbare Datei nur Teil der C++-Client-Distribution ist? Muss ich sowohl den go- als auch den c++-Client installieren, wenn ich Solidity in der gethKonsole verwenden möchte? Darüber hinaus npmgibt mir die Installation keine solcausführbare Datei, sondern nur Bibliotheken, die ich in node.
Wenn Sie die ausführbare Datei in Geth ausprobieren möchten, müssen Sie solc installieren, das mit dem C++-Bundle geliefert wird. Entschuldigung, ich war nicht klar genug

Es sieht also so aus, als ob der eigenständige Solidity-Compiler solcnur als Teil der Ethereum C++-Befehlszeilentools verfügbar ist.

solcDas bedeutet, dass Sie, wenn Sie von innen verwenden möchten, gethsowohl die Go-Tools installieren müssen, die Ihnen geben, als auch gethdie C++-Tools, die Ihnen solc.

Das sieht für mich sehr seltsam aus, insbesondere wenn man bedenkt, dass die C++-Tools ein sekundäres Projekt sind, das einige harte Zeiten durchgemacht hat und anscheinend neu gestartet wird .

Also, was soll man heute als führenden Solidity-Compiler verwenden? Vielleicht die NodeJS-Konsole .

Ich verfolge die C++-Entwicklung sehr genau und sie sind derzeit dabei, das C++-Projekt in eigenständige Forks für eth, ethminer, solidity usw. aufzuteilen solidity erst dann installieren können.