Gibt es eine gute Erklärung für Gas?

Ich möchte einen Vertrag mit Truffle bereitstellen.

Mein Konto hat 0,02 Ether (20000000000000000 wei). Ich setze gas: 4612390die truffle.js ein und setze nichts für gasPrice. eth.gasPricegibt 1000000000 wei zurück. Wenn ich das gasPricemit multipliziere gas, bekomme ich 4.612.390.000.000.000, was weniger ist als meine 20.000.000.000.000.000. Aber ich habe den Fehler bekommen insufficient funds for gas * price + value. Wenn ich den Benzinpreis auf niedrig einstelle, bekomme ich intrinsic gas too low.

Gibt es eine Möglichkeit herauszufinden, wie viel Gas benötigt wird, um meinen Vertrag bereitzustellen? Was ist der Unterschied zwischen gasund gasPrice?

Antworten (2)

Ich kann Ihre Frage zum Unterschied zwischen Gas und Gaspreis beantworten.

Die Transaktionskosten entsprechen dem Gas multipliziert mit dem Gaspreis. Gas hat keine Einheit, während die Gaspreiseinheit wei ist. Das von derselben Transaktion verbrauchte Gas ist immer gleich (es ist ein konstanter Wert) und hängt von der Komplexität der Transaktion ab. Der Gaspreis hingegen kann variieren. Das liegt daran, dass Miner ihren Strom in traditioneller Währung bezahlen müssen. Stellen Sie sich vor, der Preis für Ethereum fällt, während gleichzeitig der Strompreis steigt. Wenn der Gaspreis gleich bleibt, zahlen Miner mehr für Strom, als sie in Ethereum belohnt werden. Daher muss der Gaspreis erhöht werden.

Näheres dazu können Sie hier nachlesen: https://hackernoon.com/ether-purchase-power-df40a38c5a2f

Danke. Bedeutet das, dass ich versuchen könnte, meinen Vertrag im Testnetz bereitzustellen, um herauszufinden, wie viel Gas benötigt wird?
Ja, Sie können zum Beispiel zu remix.ethereum.org gehen und Ihren Code anstelle des standardmäßig angezeigten Codes einfügen. Wählen Sie dann auf der rechten Seite die Registerkarte „Ausführen“ und wählen Sie JavaScript VM for Environment. Klicken Sie dann auf die rosa Schaltfläche "Erstellen". Ihr Vertrag wird bereitgestellt. Klicken Sie dann im mittleren Abschnitt ganz unten auf das Symbol mit zwei Pfeilen nach oben. Sie sehen die Konsole und wenn die Bereitstellung ok war, sollten Sie zwei Schaltflächen "Details" und "Debuggen" sehen. Klicken Sie auf "Details". Dort finden Sie Informationen zu Ihrer Transaktion.
Dort finden Sie Informationen über Ihre Transaktion und auch die Transaktionskosten, also den Wert, den Sie suchen. Ach, noch was. Leider bedeutet "Gas" in der Remix-IDE nach allem, was ich sehen kann, "Gas * Gaspreis", daher kann es etwas verwirrend sein, wenn Sie nur meine vorherige Antwort lesen.

Lassen Sie uns zunächst versuchen zu klären, was sowohl Gas als auch GasPrice sind.

Wenn Sie etwas auf der Ethereum Virtual Machine (EVM) ausführen möchten, beispielsweise eine Transaktion, wird Gas für die Berechnung benötigt. Genauer gesagt, jede Operation hat eine genau definierte Menge an Gas, die sie verbraucht. Daher ist das für eine Transaktion benötigte Gas gleich der Summe über dem Gas, das für jeden EVM-Vorgang benötigt wird. Sie können eine Obergrenze dafür festlegen, wie viel Gas eine Transaktion maximal benötigen soll. Wenn Sie daran interessiert sind, mehr zu erfahren, können Sie auf yellowpaper.io nachsehen , wo all dies ausführlicher besprochen wird. Beachten Sie, dass das Erstellen (oder Bereitstellen) eines Smart Contracts auch Gas kostet, da Sie den Konstruktor aufrufen und den gesamten Code in der Blockchain speichern.

Man könnte fragen, warum gibt es überhaupt so etwas wie Gas? Naja, wenn dein Vertrag zB enthalten wäre

function infiniteLoop() public { 
    while (true) { 
        // do some stuff 
    } 
}

Ein Transaktionsaufruf infiniteLoop()würde nie beendet und Miner würden endlos ausgeführt. Die Idee von Gas ist es, genau das zu verhindern: Wenn nur so viel Gas verwendet werden kann, muss die Ausführung irgendwann aufhören. Sie können den Solidity-Compiler solc verwenden, um abzuschätzen, wie viel Gas eine Funktion verbrauchen wird. Dasselbe kann online über remix.ethereum.org erfolgen (Stellen Sie den Vertrag zusammen und klicken Sie auf den Konstruktor, um eine Schätzung der Bereitstellungsgaskosten zu erhalten).

Nun zum Gaspreis. Stellen Sie sich vor, Benzin würde nichts kosten. Sie könnten dann theoretisch einen Vertrag über nutzlose, aber intensive Arbeit schreiben und ein unangemessenes Gaslimit festlegen. Außerdem, warum sollten Miner überhaupt bereit sein, die Transaktion in Ihrem Namen durchzuführen? Der gasPrice, der angibt, was Sie pro Gasmenge zu zahlen bereit sind, gibt den Minern im Netzwerk einen Anreiz, Ihre Transaktion auszuführen und einem Block hinzuzufügen.

Da ich Ihren Vertrag nicht gesehen habe, kann ich nur vermuten, was schief gelaufen ist. Es könnte sein, dass Sie tatsächlich ein Gaslimit angegeben haben, das nicht hoch genug war.