Trüffel-Festigkeitstests: kein Gas mehr & überschreitet die Sperrgasgrenze

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 testich

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 gasKonfigurationswerts in truffle.jseinen 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?

versuchen Sie die Problemumgehung in diesem Github-Problem: github.com/trufflesuite/truffle/issues/…

Antworten (3)

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 throwsabsichtlich 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.