Kann ein Vertrag das globale Blockgaslimit erreichen?

Der OPCODE GASLIMIT erhält die Gasgrenze des Blocks. Könnte Inline-Montage,

    uint gasLimit;

    assembly {
        gasLimit := gaslimit
    }

Gaslimit holen?

contract B {

function getGasLimit() returns (uint) {
    uint gasLimit;

    assembly {
        gasLimit := gaslimit
    }
    return gasLimit;

}

}

Die Verwendung von https://ethereum.github.io/browser-solidity/ mit einem Gaslimit von 3000000 getGasLimit()gibt 6000000 zurück.

Warum gibt es die doppelte Gasgrenze zurück?

Geben Sie hier die Bildbeschreibung ein

Nach ein wenig Testen denke ich, dass dies tatsächlich ein Fehler sein könnte, bei dem die Browser-Solidität das Gaslimit auf das Doppelte der angeforderten Menge setzt. Probieren Sie es aus, testrpc oder auf der echten Kette, es funktioniert für mich
Das war auch meine Vermutung. Getestet auf Ropsten Testnet, scheint dort zu funktionieren, imgur.com/a/pkcoC
Eigentlich kein Fehler, nur schlechtes Design. Wenn man sich den Code ansieht, scheint es, dass das „Gaslimit“ tatsächlich das Gaslimit für jede Transaktion ist, nicht das Blockgaslimit. Die Browser-VM legt das Blockgaslimit automatisch auf das Doppelte des Transaktionsgases fest. msg.gasSie können dies sehen, wenn Sie sich nur die für die gesendeten Transaktionen ansehen . Es wird das sein, was Sie in das gas limitFeld eingeben (minus ein bisschen)
Bitte posten Sie Ihre Antwort @TjadenHess.

Antworten (1)

Diese Verwirrung war auf die Mehrdeutigkeit des Begriffs „Gaslimit“ zurückzuführen, das in der Browsersolidität Gas pro Transaktion bedeutete , aber OP nahm an, dass es das Blockgaslimit meinte . Die Verwirrung wurde durch die Tatsache verstärkt, dass das Block-Gas-Limit in der Browser-VM standardmäßig auf das Doppelte des Transaktions-Gas-Limits eingestellt ist.

Ich habe eine PR eingereicht, die zusammengeführt wurde, und jetzt steht auf dem Etikett "Transaktionsgaslimit", was hoffentlich klarer sein sollte