Wenn ich einen Vertrag mit Truffle bereitstelle, der eine import
Erklärung enthält, und versuche, ihn auf etherscan zu überprüfen, muss ich meines Wissens nach den Inhalt der importierten Datei einfügen.
Ich erhalte eine Fehlermeldung bei Etherscan, dass die Bytecodes der verketteten und bereitgestellten Dateien nicht identisch sind. Das Seltsame ist, dass, wenn ich den Vertrag (mit Importen) für Remix bereitstelle, der Bytecode mit der verketteten Quelldatei übereinstimmt.
Hier ist ein Minimalbeispiel für Verträge, die dieses Verhalten aufweisen.
Combined.sol
ist die verkettete Datei und Outer.sol
enthält den bereitgestellten Vertrag.
Hier ist, was ich tue, das einen Fehler bekommt:
Outer.sol
Mit Trüffel bereitstellenConcatenated.sol
Quellcode ein und klicken Sie auf „Bestätigen“.Fehler, Bytecodes stimmen nicht überein.
0.4.11
in Remix und Trüffel.Derzeit unterstützt Etherscan keine Überprüfung von Multifile-Verträgen. Aber es gibt Diskussionen auf Reddit von Etherscan zu diesem Thema.
Das Verketten von Dateien zu einer hat vor einiger Zeit funktioniert, aber seit Version 0.4.7 fügt Solidity am Ende des kompilierten Vertrages einen Hash der Vertragsmetadaten hinzu . Da diese Metadaten Dateinamen und Hashes enthalten, erhalten Sie nach dem Verketten und Kompilieren möglicherweise denselben Bytecode, aber dieser Hash ist anders.
Ich denke, die Motivation hinter dem Hinzufügen des Hashs dieser Metadaten zum bereitgestellten Vertrag besteht darin, die Quellenüberprüfung automatisch zu machen, da jeder bereitgestellte Vertrag einen Schwarm-Link zu Quellen, Compiler-Version und Kompilierungsoptionen enthält.
Ich habe eine CLI namens multisol gebaut, die Ihnen helfen kann . Sie können es über Homebrew installieren, wenn Sie einen Mac verwenden, oder eine der ausführbaren Dateien herunterladen , die ich zur Verfügung stelle, wenn Sie Windows oder Linux verwenden:
$ brew tap paulrberg/multisol
$ brew install multisol
Dann kannst du es so verwenden:
$ multisol path/to/YourContract.sol
Dadurch wird ein Ordner mit dem Namen „multisol-yourcontract“ generiert, der verwendet werden kann, um den Quellcode auf Etherscan für eine bereitgestellte Instanz von YourContract.sol
. Beachten Sie, dass der Überprüfungstyp "Solidity (Multi-Part files)" ist.
Ich habe erstellt truffle-plugin-verify
, um die Truffle-Vertragsüberprüfung auf Etherscan zu automatisieren.
npm install truffle-plugin-verify
truffle.js
oder truffle-config.js
-Datei hinzumodule.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
Nachdem Sie Ihren Outer
Vertrag zu Kovan migriert haben, können Sie ihn auf Etherscan überprüfen, indem Sie Folgendes ausführen:
truffle run verify Outer --network kovan
Weitere Informationen finden Sie im Repository oder in meinem Artikel Truffle Smart Contracts auf Etherscan automatisch verifizieren .
--debug
Flag? github.com/rkalis/truffle-plugin-verify/issues/new
Jakob Wojciechowski
Travis Jacobs
AbweichenFisch