Ich versuche, einige grundlegende Tests mit meinem Vertrag durchzuführen, die mit Solidity-Tests von Truffle geschrieben wurden (in Solidity geschriebene Tests).
Beim Laufen bekomme truffle test
ich
Error: VM Exception while processing transaction: out of gas
Hinweis: Dies wird durch den Vertragskonstruktor verursacht new ...
, der tatsächlich eine Menge Dinge tut. Und ich kann nichts in meinem Code aufschlüsseln.
Gibt es eine Möglichkeit, dies mit einem in Solidity geschriebenen Test zum Laufen zu bringen? Gibt es eine Möglichkeit, die im Testvertrag verfügbare Gasmenge zu konfigurieren?
--
AKTUALISIEREN:
Eigentlich habe ich herausgefunden, dass das Ändern des gas
Konfigurationswerts in truffle.js
einen Effekt hat. Doch ich stoße jetzt auf eine weitere Straßensperre
Error: Error: Exceeds block gas limit
Ich nehme an, dass ich keine andere Wahl habe, als die Bereitstellung (also den Konstruktor) meines Vertrags zu optimieren, um ihn leichter zu machen?
Ich bin heute auf das gleiche Problem gestoßen - aber für mich war das Problem, dass meine test-file.sol scheinbar zu groß war. Also habe ich meine Tests in zwei Dateien aufgeteilt, und alle Tests liefen wieder einwandfrei.
Es ist wahrscheinlich sowieso sinnvoll, Testdateien in mehrere kleinere Suiten zu strukturieren, als eine große Datei, durch die Sie blättern müssten.
Fügen Sie gas: 350000 zu Ihrer truffle.js-Datei hinzu, mein Beispiel unten
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*", // Match any network id
gas: 3500000
}
},
mocha: {
useColors: true
}
};
Die neue Version von Trüffel, Version 4, hat zu diesem Zeitpunkt eine Gasprüfung zu den Tests hinzugefügt. also das wird jetzt gebraucht.
Sollte es wahrscheinlich leichter machen.
Wenn Sie TestRPC oder eine private Kette verwenden, können Sie die gaslimit
, aber es ist eine Netzwerk Eigenschaft. Ich würde diese Methode für die Fehlerbehebung reservieren, dh um zu bestätigen, womit Sie es zu tun haben. Beachten Sie, dass es manchmal zu Gasausfällen kommt, wenn der Vertrag throws
absichtlich geschlossen wird, sodass dies irreführend sein kann.
Wenn Sie keine Möglichkeit finden, innerhalb eines Budgets zu arbeiten, werden Sie wahrscheinlich enttäuscht sein, wenn Sie versuchen, im Live-Netzwerk bereitzustellen.
Ich hoffe es hilft.
jopasserat