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?
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 --targetgaslimit
bandera al iniciar el nodo. Por ejemplo, puede hacer lo siguiente para una red con id 666
ejecutá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 9000000000000
medida 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 limit
problema.
Por supuesto, cerrar el nodo y reiniciar repite el proceso desde el límite de gas inicial de la cadena hasta el final de 9000000000000
nuevo.
Básicamente, usar --targetgaslimit
como bandera es una forma muy conveniente de aumentar o disminuir el límite de gas de una cadena privada mientras se desarrolla.
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 gasLimit
cerca 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.
usuario3184743
Román Frólov