Die Verwendung von Solidity Browser ( https://ethereum.github.io/browser-solidity/ ) zum Minen eines Vertrags im Testnetz mit injiziertem web3- und Metamask-Konto löst diesen Fehler aus:
callback contain no result Gas required exceeds limit: 3000000
Dieser Vertrag (Quellcode => https://gist.github.com/computerphysicslab/f362383f9d3fed26becba48b934bbcfc ) wird voraussichtlich rund 6 Millionen Gas kosten, um bereitgestellt zu werden (gemäß JS VM-Umgebung). Beim Versuch, das Gaslimit zu erhöhen, werden jedoch diese Fehler ausgegeben:
callback contain no result Gas required exceeds limit: 4000000
callback contain no result Gas required exceeds block gas limit: 5000000
callback contain no result Gas required exceeds block gas limit: 6000000
callback contain no result Gas required exceeds block gas limit: 10000000
...
Es scheint also nicht möglich zu sein, den Vertrag abzubauen, da es ein Blockgaslimit von etwa 5 Millionen Gas gibt. Kann man diese Grenze irgendwie überwinden?
Ref.:
Solidity-Browser-Compiler stürzt ab
Warum stürzt der browserbasierte Solidity-Compiler ab, wenn der Code zu lang ist?
Überschreitung des Gasblock-Grenzfehlers beim Einsatz in der Nähe des Gasblock-Grenzvertrags
Sofern die Bergleute das Blockgaslimit nicht erhöhen, besteht Ihre einzige Möglichkeit darin, den Vertrag in mehrere Verträge aufzuteilen.
Jeder Vertrag hat also eine eigene Adresse, und Sie können zwischen ihnen telefonieren. Zum Beispiel kann ein ICO Crowdsale aufgeteilt werden in:
Auch die Aufteilung hilft bei einem Sicherheitsaudit, da jeder Vertrag einen begrenzten Umfang hat.
Jeder Vertrag kann unabhängig bereitgestellt werden, und über eine Konfigurationsmethode schließen Sie die Einrichtung ab.
Tatsächlich wird das maximale Gas pro Transaktion angegeben, eth.getBlock('latest').gasLimit
das heute rund 4,7 Millionen beträgt.
Bearbeiten: Das Gaslimit steigt und es scheint, dass das Ziel darin besteht, ein Limit von 6,7 Millionen zu erreichen, sodass Sie Ihren Vertrag möglicherweise bald einsetzen können, ohne etwas zu tun. Quelle: Reddit
Um Ihren Vertrag bereitzustellen, müssen Sie die Bereitstellungskosten reduzieren.
Es gibt Möglichkeiten, die Gaskosten zu senken:
Sie können beispielsweise versuchen, SafeMath anstelle Ihrer eigenen Implementierung zu verwenden.
Oder obwohl Sie es vielleicht getan haben, können Sie einen Teil entfernen, der zum Debuggen verwendet wird
// @notice For debugging purposes when using solidity online browser
function whoAmI() constant returns (address) {
return msg.sender;
}
Übrigens ist die Diskussion zur Erhöhung des Gaslimits im Gange, einige Miner-Pools haben es bereits erhöht, aber einige große verwenden immer noch dieses "alte" Limit, das verwendet wird, um DDOS-Angriffe zu verhindern. Dieser Thread auf Reddit erklärt ein wenig das aktuelle Problem mit dem Gaslimit.
Sie müssen einige der Dinge, wie Safemath, in einen Bibliotheksvertrag aufnehmen , den Sie als separate Verträge bereitstellen können. Sonst gibt es für Sie keine Möglichkeit, die Gaskosten zu senken.
Juan Ignacio Pérez Sakristán
Jeff Colemann
Ismael
Juan Ignacio Pérez Sakristán
Ismael
Ismael