El uso de Solidity Browser ( https://ethereum.github.io/browser-solidity/ ) para extraer un contrato en testnet con web3 inyectado y cuenta metamask arroja este error:
callback contain no result Gas required exceeds limit: 3000000
Se espera que la implementación de este contrato (código fuente => https://gist.github.com/computerphysicslab/f362383f9d3fed26becba48b934bbcfc ) cueste alrededor de 6 millones de gas (según el entorno JS VM). Sin embargo al intentar aumentar el límite de gas se arrojan estos errores:
callback contain no result Gas required exceeds limit: 4000000
callback contain no result Gas required exceeds block gas limit: 5000000
callback contain no result Gas required exceeds block gas limit: 6000000
callback contain no result Gas required exceeds block gas limit: 10000000
...
Entonces, parece que no es posible explotar el contrato porque hay un límite de gas de bloque de alrededor de 5 millones de gas. ¿Es posible superar este límite de alguna manera?
Referencias:
El compilador del navegador Solidity falla
¿Por qué el compilador de solidez basado en el navegador falla cuando el código es demasiado largo?
A menos que los mineros aumenten el límite de gas del bloque, su única opción es dividir el contrato en varios contratos.
Por lo tanto, cada contrato tiene su propia dirección y puede realizar llamadas entre ellos. Por ejemplo, una ICO Crowdsale se puede dividir en:
También la división ayuda a una auditoría de seguridad ya que cada contrato tiene un alcance limitado.
Cada contrato se puede implementar de forma independiente y, a través de un método de configuración, completa la configuración.
En realidad, el gas máximo por transacción está dado por eth.getBlock('latest').gasLimit
4,7 millones en la actualidad.
Editar: el límite de gas está aumentando y parece que el objetivo es alcanzar un límite de 6,7 millones, por lo que sin hacer nada, pronto podrá implementar su contrato. Fuente: Reddit
Para implementar su contrato, debe reducir el costo de implementación.
Hay formas de reducir el costo del gas:
Por ejemplo, puede intentar usar SafeMath en lugar de su propia implementación.
O incluso aunque lo haya hecho, pero puede eliminar la parte utilizada para depurar como
// @notice For debugging purposes when using solidity online browser
function whoAmI() constant returns (address) {
return msg.sender;
}
Por cierto, la discusión para aumentar el límite de gas está en camino, algunos grupos de mineros ya lo aumentaron, pero algunos grandes todavía usan este límite "antiguo" para prevenir ataques DDOS. Este hilo en Reddit explica un poco el problema actual con el límite de gas.
Deberá poner algunas de las cosas, como SafeMath, en un contrato de biblioteca , que puede implementar como contratos separados. De lo contrario, no hay forma de reducir los costos del gas.
Juan Ignacio Pérez Sacristán
jeff coleman
ismael
Juan Ignacio Pérez Sacristán
ismael
ismael