Out of Gas invocando contratos precompilados en cadenas de bloques privadas

¿Por qué los contratos precompilados conducen a Out of Gas en cadenas de bloques privadas?

Se proporcionan algunos datos en los documentos de Solidity , pero ¿se puede explicar más?

Puede ser que te encuentres con Out-of-Gas for sha256, ripemd160o ecrecoveren una cadena de bloques privada. La razón de esto es que se implementan como los llamados contratos precompilados y estos contratos solo existen realmente después de recibir el primer mensaje (aunque su código de contrato está codificado). Los mensajes a contratos no existentes son más caros y, por lo tanto, la ejecución se encuentra con un error de falta de gas. Una solución para este problema es enviar primero, por ejemplo, 1 Wei a cada uno de los contratos antes de usarlos en sus contratos reales. Esto no es un problema en la red oficial o de prueba.

¿Qué sucede que "estos contratos solo existen realmente después de recibir el primer mensaje (aunque su código de contrato está codificado)"?

¿Cómo el envío de 1 Wei hace que estos contratos "realmente existan"?

¿La asignación de 1 wei en el bloque de génesis de una cadena de bloques privada, para cada uno de estos contratos, evitará la falta de combustible?

Respuestas (1)

Hay una regla general de costo de gasolina que establece que enviar un mensaje a cualquier cuenta inexistente cuesta más que enviar un mensaje a una cuenta existente. Eso también se aplica a las cuentas de los contratos precompilados.

Para no pagar costos más altos del mensaje, debe crear la cuenta de destino antes. Esa es la razón por la que algunos bloques de génesis de prueba/privados crean las cuentas para los contratos precompilados al establecer sus saldos en 1 wei, por ejemplo, el bloque de génesis de testnet .