Si una llamada de contrato previsiblemente requiere que se procesen 41043 de gas según lo estimado por estimateGas
, ¿por qué necesito especificar un límite de gas de ~70000 para que se procese?
Creo que, en algunos casos, el gas usado acumulativo no es exacto debido al gasto de gas o al reembolso de gas. Si en algún momento el contrato supera el gasLimit, fallará con una excepción Out of Gas. Si se emite un reembolso más adelante en el contrato, reducirá la gasolina acumulada aunque supere lo que usted cree que es el "límite de gasolina" durante la ejecución del contrato.
Veamos a Etherdice como ejemplo.
El contrato tenía datos almacenados
Cada vez que un usuario enviaba una transacción al contrato, el contrato eliminaría el artículo más antiguo almacenado
Sin embargo, dado que el contrato solo reembolsa al final de la transacción, todos los fondos quedaron atrapados en el contrato debido a que se quedó sin gasolina.
Entonces, antes de que un usuario envíe una transacción, digamos que el combustible es 100,000. Después de que el usuario envía la transacción, el gas es 100.000. Durante el contrato, en un momento determinado, "necesita" 200.000. Y en el momento en que llega a ese límite, se queda sin gasolina y listo.
En el caso de etherdice, en realidad fue peor porque estaba alcanzando el límite global de 3141592 que existía antes de Homestead.
tu no
Puede especificar el gas exactamente y debería funcionar bien. El único inconveniente es que si cambia el estado del contrato que está ejecutando y requeriría más gas del que proporciona incluso una sola unidad, perderá todo el gas proporcionado y la transacción se revertirá.
Aquí hay consejos generales, seguidos de una síntesis de las otras respuestas y comentarios para explicar esta situación particular.
estimateGas
, como su nombre lo indica, no siempre es 100% exacto
los reembolsos de gasolina solo se brindan al final de la transacción: se debe proporcionar suficiente gasolina durante toda la transacción; de lo contrario, una excepción por falta de gasolina hará que se pierda todo el combustible
regla general en la depuración de contratos y transacciones es: en caso de duda, aumentar el gas
La conclusión parece ser:
Geth v1.4 o la develop
sucursal tiene la solución para estimar Gas. Tenga en cuenta que, aunque estimateGas
es práctico de usar, aún no será correcto para todos los escenarios posibles.
cerveza inglesa
Chevdor