¿Puede un contrato alcanzar el límite de gas de bloque global?

El OPCODE GASLIMIT obtiene el límite de gas del bloque. Podría ensamblarse en línea,

    uint gasLimit;

    assembly {
        gasLimit := gaslimit
    }

buscar el límite de gas?

contract B {

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

    assembly {
        gasLimit := gaslimit
    }
    return gasLimit;

}

}

Usando https://ethereum.github.io/browser-solidity/ , con un límite de gas establecido en 3000000, getGasLimit()devuelve 6000000.

¿Por qué devuelve el doble del límite de gas?

ingrese la descripción de la imagen aquí

Después de algunas pruebas, creo que esto puede ser un error con la solidez del navegador que establece el límite de gas al doble de la cantidad solicitada. Pruébalo en, testrpc o en la cadena real, me funciona
Esa fue mi suposición también. Lo probé en la red de prueba de Ropsten, parece funcionar allí, imgur.com/a/pkcoC
No es un error, en realidad, solo un mal diseño. Mirando el código, parece que el "límite de gas" es en realidad el límite de gas para cada transacción , no el límite de gas del bloque. La máquina virtual del navegador establece automáticamente el límite de gas de bloque en el doble del gas de transacción. Puede ver esto si solo mira msg.gaslas transacciones que se envían. Será lo que pongas en el gas limitcampo (menos un poco)
Publique su respuesta @TjadenHess.

Respuestas (1)

Esta confusión se debió a la ambigüedad en el término "límite de gas", que en la solidez del navegador significaba gas por transacción , pero OP asumió que significaba el límite de gas del bloque . La confusión se agravó por el hecho de que el límite de gas de bloque en la máquina virtual del navegador tiene como valor predeterminado el doble del límite de gas de transacción.

Envié un PR, que se fusionó, y ahora la etiqueta dice "Límite de gas de transacción", que con suerte debería ser más claro