Wie finde ich die genaue Solidity-Compiler-Version, die von Truffle verwendet wird?

Ich versuche, einen Vertrag zu überprüfen, den ich kompiliert und mit Etherscan im Netzwerk bereitgestellt habe . Der Vertrag wurde mit Truffle erstellt. Wie finde ich genau heraus, welche Version des Solidity-Compilers auf Etherscan auszuwählen ist?

Antworten (5)

Ich laufe Truffle 3.4.11und laufe gerade: truffle versionGibt mir auch die Solidity-Version:

truffle version                                                                                                                                                           
Truffle v3.4.11 (core: 3.4.11)
Solidity v0.4.15 (solc-js)

Ich habe es geschafft, einen hacky Weg zu finden, dies zu tun. Hinweis - Ich suchte nach mehr als nur der Version von solc. Ich habe nach dem tatsächlichen Build des Compilers gesucht, den solc verwendet (dh der verwendete Commit, die Night-Build-Nummer usw.), damit ich ihn auf EtherScan auswählen konnte .

Ich habe Trüffel global installiert, also habe ich ausgeführt which truffle, was es mir ermöglichte, schließlich (nach Symlinks) zu finden, wo Trüffel auf meinem Mac gespeichert war:/Users/username/.nvm/versions/node/v7.7.3/lib/node_modules

Von hier aus war es leicht ausfindig zu machen, wo auch die von Trüffel verwendete Solc-Installation aufbewahrt wird. Relativ zum vorherigen Pfad, in dem es sich befinden würde./truffle/node_modules/solc

An dieser Stelle - wenn Sie nur die Version des Solc-Pakets wollen, können Sie hineinschauenpackage.json

Wenn Sie weiter gehen und die spezifische Compiler-Version finden möchten (wie ich), dann werfen Sie einen Blick hinein wrapper.jsund suchen Sie nach der var versionVariablendeklaration. Es stellt sich heraus, dass dies eine Funktion ist, die den Namen der verwendeten Compiler-Version zurückgibt. Einfach console.log(version());in der nächsten Zeile und beim nächsten Ausführen truffle testwird truffle compileder Solidity-Compiler-Build in Ihre Konsole ausgegeben. Bei mir sah das so aus:

var version = soljson.cwrap('version', 'string', []);
console.log(version());

Denken Sie daran, die Datei wrapper.js in ihren ursprünglichen Zustand zurückzusetzen, nachdem Sie die benötigten Informationen erhalten haben.

Hinweis: Dies ist eine sehr hackige Art, dies zu tun. Es gibt wahrscheinlich einen besseren Weg, aber es war die erste Methode, über die ich gestolpert bin. Selbst dann - es hat mir sowieso nicht einmal geholfen, den Vertrag auf Etherscan zu verifizieren.

Die anderen unten vorgeschlagenen Methoden sind viel einfacher. Ich schlage vor, diese Antwort zu bearbeiten, um zu reflektieren, dass es viel einfachere Möglichkeiten gibt.

Der einfachste Weg, um die Compiler-Version mit Truffle zu erhalten, besteht darin, sie in Ihrem Projektverzeichnis ./build/contracts/YourContractName.jsonam Ende der Datei zu finden. Es sieht aus wie,

 "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  }

Sie können sich die Datei ansehen ./node_modules/solc/package.jsonund sehen, "solc@^x.y.z"wo x.y.zdie Versionsnummer ist, die verwendet wird.

Wenn Sie npm mit dem Flag -g installiert haben, können Sie dies tun (lassen Sie das -g weg, wenn Sie es lokal installiert haben).

$ npm -g ls | grep solc └─┬ solc@0.4.18

Das sollte deine Version sein.