¿Cómo aumentar el límite de gas en bloque usando geth?

Cuando trato de ejecutar métodos de mi contrato inteligente, estoy limitado por el límite de gas en un bloque y no puedo hacer nada. ¿Cómo cambiar el límite de gas en el bloque?

Pero, ¿qué pasa si el desarrollador necesita enviar un contrato en su cadena de bloques privada recién creada? ¿Alguna posibilidad de cambiar el límite de gas en el bloque de génesis? ( geth init genesis.json no cambia ni la dificultad ni el gasLimit) { "config": { "chainId": 1994, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0 } , "Nonce": "0xAbcDef0001478042", "TimeStamp": "0x0", "Parenthash": "0x000000000000000000000000000000000000000000000000000000000000000000000000", "Extradata": "0x00", "Gasprice": "0x1", ",", ":" "0x1ff": "0x1ff" ":" dificultad": "400", "mixhash": "0x00000000000000000000000000000000
Si tiene una nueva pregunta, hágala haciendo clic en el botón Preguntar . Incluya un enlace a esta pregunta si ayuda a proporcionar contexto. - De la revisión

Respuestas (4)

Si bien se recomienda no alterar el límite de gas de una cadena una vez creada, puede ser necesario jugar con el límite de gas de una cadena de bloques privada existente, especialmente durante el desarrollo.

En geth, esto se puede hacer configurando la --targetgaslimitbandera al iniciar el nodo. Por ejemplo, puede hacer lo siguiente para una red con id 666ejecutándose en localhost:8545:

  geth --networkid '666' --datadir 'path/to/your/chain/db' --targetgaslimit '9000000000000' --rpc --rpccorsdomain 'localhost:8545' --mine

Lo anterior iniciará su nodo y seguirá presionando el límite de gas a 9000000000000medida que continúa la extracción. Con el tiempo, el límite de gasolina habrá crecido tanto que ya no tendrá el Error: exceeds block gas limitproblema.

Por supuesto, cerrar el nodo y reiniciar repite el proceso desde el límite de gas inicial de la cadena hasta el final de 9000000000000nuevo.

Básicamente, usar --targetgaslimitcomo bandera es una forma muy conveniente de aumentar o disminuir el límite de gas de una cadena privada mientras se desarrolla.

¡Configuró gasLimit en 9000000 millones! Es demasiado. Establézcalo en 10000000(~10 millones), que es el límite de gas actual para la red principal de Ethereum.

Respuesta corta

No puedo o no debo.

mejor respuesta

El límite de gas del bloque es una propiedad de la red. Si está utilizando una cadena privada, puede jugar con ella en el bloque de génesis. En una cadena de bloques real, los mineros votan periódicamente sobre esta propiedad. Ver papel amarillo.

Más información aquí: ¿Qué significa cada parámetro de genesis.json?

gasLimit Un valor escalar igual al límite actual de gasto de gas por bloque en toda la cadena. Alto en nuestro caso para evitar estar limitado por este umbral durante las pruebas. Nota: esto no indica que no debamos prestar atención al consumo de Gas de nuestros Contratos.

Respuesta útil

Considere reestructurar el contrato con miras a reducir el requerimiento de gas. La red Ethereum en vivo tiene un límite móvil. https://ethstats.net/

Espero eso ayude.

La respuesta de @Daniel Okwufulueze establece el límite de gas en 9000000 millones .

No recomiendo establecer el límite de gat en un valor de gas extremadamente alto. Incluso si está utilizando una cadena privada, es mejor configurar gasLimitcerca de la red principal real gasLimit, para mantener un entorno de simulación realista.

En la red principal de Ethereum, el límite de gas actual es de ~10 millones (comprobado el 4 de enero de 2020), consulte https://etherscan.io/chart/gaslimit .

Simplemente agregue la siguiente bandera en los nodos de minero o firmante al comenzar geth:

geth --targetgaslimit '10000000', sigue por otras banderas.

Solo quería aportar una solución a problemas similares. Cuando recibe el error: "err: Error: Error devuelto: excede el límite de gas del bloque", es posible que se desencadene por la cantidad de gas que envió para procesar la transacción. Normalmente, pensaría que está bien enviar más gasolina de la necesaria porque se reembolsaría la gasolina no utilizada. Sin embargo, si proporciona demasiada gasolina para procesar su transacción, se bloqueará con este error. Parece que la suposición que hace el minero es que si necesita enviar tanto gas, la función subyacente es demasiado complicada de procesar y propensa a errores. Tendrían más suerte haciendo dinero extrayendo una transacción más simple.

De acuerdo con https://www.ethgasstation.info/ El límite máximo de bloque es 8000000, por lo que la cantidad de gas para su transacción debe ser menor o igual a este número en hexadecimal, es decir, web3.utils.toHex('8000000') , y lo mismo debe ocurrir con el gas requerido para la función del contrato.