Aumentar el límite de gas para permitir el despliegue de contratos más grandes

Estoy trabajando en una cadena de bloques privada y descubrí que no puedo implementar un contrato de más de 34 Kb, lo cual es bastante limitante para mí. A modo de comparación, los cryptokitties tienen entre 40 y 47 Kb, ¡así que ni siquiera puedo implementar gatitos digitales!

Aquí hay parte de mi chains.jsonque corresponde a los límites de gas:

  "params": {
    "maximumExtraDataSize": "0x20",
    "minGasLimit": "0x1388",
    "networkID": "0x2323",  
    "gasLimitBoundDivisor": "0x400"
  },
  "genesis": {
    "seal": {
      "authorityRound": {
        "step": "0x0",
        "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
      }
    },
    "difficulty": "0x20000",
    "gasLimit": "0x165A0BC00"
  },

Si entiendo correctamente, tengo un límite 0x165A0BC00que parece ser bastante grande y no limitante. Sin embargo, en la práctica no funciona.

¿Cómo puedo mejorar la configuración de la red para que sea posible cargar contratos de hasta 50-60 Kb? Actualmente envío 4600000 de gasolina por cada transacción.


Error cuando estoy tratando de suministrar más gas:

Mensaje: Nethereum.JsonRpc.Client.RpcResponseException: el costo de transacción excede el límite de gas actual. Límite: 4700000, obtenido: 46000000. Intente disminuir el suministro de gas.

Cuando estoy suministrando una cantidad regular de gas

Mensaje: Nethereum.RPC.Eth.Exceptions.ContractDeploymentException: el código no se implementó correctamente

Cryptokitties se implementó usando menos de 4 millones de gas: vea la transacción en etherscan. 0x165A0BC00es 6 mil millones en decimal: esto es más que suficiente y sospecho que su error está en otra parte. ¿Podría agregar más detalles de los errores encontrados?
Si su contrato es demasiado grande, es básicamente porque no lo optimizó. Tuve el mismo problema, optimizando el mío resolvió la solución. Otra solución en la cadena privada es separar su contrato en varios contratos
@Andromelus no, optimicé mucho las cosas. Actualmente solo tengo un contrato con un montón de campos y métodos get/set. No puedo separar los campos (porque deben recuperarse todos juntos) y no puedo eliminar los métodos get o set. Por eso mi pregunta es: cómo eliminar esa limitación. Hay un contrato en el interno (es decir, cryptokitties) que no se puede implementar en mi red. Si lo implementaron con éxito, entonces no hay nada de malo en el contrato en sí, solo depende de la configuración adecuada.
Si tiene campos públicos, no necesita escribir getters/setters para recuperarlos individualmente. Es enerado por el EVM. Sería más fácil si pudiéramos verificar su código

Respuestas (1)

Usted suministró 46,000,000 de gas mientras que el límite es de solo 4,700,000, por lo que la transacción no es válida. Debería funcionar si suministra menos de 4.700.000 de gas.

El otro error no parece estar relacionado con un problema de gas: probablemente diría "Se quedó sin gas".

No responde a un problema. No puedo quedarme sin gasolina porque pasé el valor máximo (tener ~1000000 ethereum en la cuenta). El problema es que ni un valor por debajo de 4,7m ni por encima de 4,7m no puede hacer que este contrato se despliegue.
En el caso de que suministre gas a 46m, le indicará que disminuya el suministro de gas. ¿Tiene más detalles sobre el error cuando suministra menos de 4,7 m de gas?
Normalmente paso gas de 4,6 m. En este caso no estaba funcionando. 4.7 tampoco fue suficiente. Cuando acabo de agregar un cero más para hacerlo, 46dejó de funcionar. Sé que es un límite. La pregunta principal es cómo aumentarla. Literalmente, no hay forma de implementar un contrato si la cantidad de gas que requiere es más que un umbral máximo.