Wenn ich mit solc eine sehr große Datei übersetze, läuft der Stack über. Dies passiert am häufigsten in node, da der Standard-Stack nur 984 kByte groß ist, was Sie seltsamerweise für ein Programm aus den 1990er Jahren erwarten würden, außer dass node nicht aus den 1990er Jahren stammt.
Dies ist der Fehler, den Sie erhalten:not ok 1 RangeError: Maximum call stack size exceeded
Es ist wahrscheinlich, dass der von Solc verwendete Javascript-Wrapper ein O(n)-Stack-Verhalten hat, z. B. eine rekursive Funktion.
Danke dafür!
Am Ende gemacht: node --stack-size=4096 .\node_modules\truffle\build\cli.bundled.js compile
,
statt truffle compile
(nach einem Blick in node_modules/.bin/truffle
).
EDIT: Unter Ubuntu funktioniert das auch:node --stack-size=4096 node_modules/.bin/truffle compile
Dies funktioniert von der Befehlszeile aus, ist aber sehr umständlich:
alias node='node --stack-size=4096'
Es ist umständlich, weil Sie die Stapelgröße überall angeben müssen, wo Sie node aufrufen, und auf den meisten Systemen können Sie die Option nicht in einem Shebang unterbringen. ZB funktionieren alle Node-Utilities wie Mocha oder Tape nicht so einfach wie beabsichtigt.
Sie könnten 'node' in Ihrem Pfad überschreiben, aber das ist nicht sehr portabel, Sie müssen daran denken, dies in Ihrer Produktions- sowie in Entwicklungs- und Staging-Umgebungen zu tun.
Es wäre schön, wenn es eine Umgebungsvariable wäre, aber der Knoten unterstützt das nicht.
Die andere Option besteht darin, Ihren Solidity-Code in mehrere Dateien aufzuteilen, was einfacher ist, sobald es import
portabel funktioniert.
bingen
Paul S