¿Los contratos también tienen un nonce?

¿Los contratos también tienen un nonce y, de ser así, cómo se calcula? Las cuentas habituales tienen un nonce que aumenta con cada transacción. Sin embargo, los contratos no pueden realizar transacciones, solo pueden realizar llamadas activadas por transacciones.

Pero los contratos aún pueden crear otros contratos y para el contrato recién generado, el nonce del remitente es relevante. Entonces parece que los contratos también tienen nonces. ¿Este nonce aumenta cada vez que llaman a otro contrato o solo si crean otro contrato?

Respuestas (2)

Sí, los contratos tienen nonces . EIP 161 hizo que el nonce del contrato comenzara en 1 , y antes de EIP 161, el nonce comenzaría en 0. El nonce de un contrato solo se incrementa cuando ese contrato crea otro contrato (referencia YP de (@zanzu). Cuando un contrato invoca una función en otro contrato, una llamada "transacción interna", el nonce no se incrementa.

El nonce se puede obtener usando web3.eth.getTransactionCount. No existe un método integrado para que un contrato acceda al nonce de una cuenta, incluido el suyo propio. (Un contrato podría usar su almacenamiento para realizar un seguimiento de su propio nonce).

Para que quede claro, solo hay 2 tipos de cuentas en Ethereum y todas tienen las mismas 4 propiedades "físicas": nonce, balance (en wei), hash de almacenamiento trie root y código. La única diferencia "física" es que un contrato tiene un código distinto de cero.

En cuanto al comportamiento, existen algunas diferencias más entre los contratos y las cuentas habituales. El incremento del nonce es una diferencia de comportamiento; otro importante es ¿Dónde se almacena la clave privada de un contrato?


Para aclarar " Las cuentas habituales tienen un nonce que aumenta con cada transacción ", el nonce de una cuenta sin contrato solo se incrementa cuando esa cuenta origina una transacción (cuando es la fromcuenta del remitente). Cuando una cuenta es el destinatario (la tocuenta), su nonce no se incrementa.

La respuesta a su pregunta se puede encontrar en el papel amarillo :

nonce: Un valor escalar igual al número de transacciones enviadas desde esta dirección o, en el caso de cuentas con código asociado, el número de creaciones de contratos realizadas por esta cuenta

Recuerda: en Ethereum, los contratos son cuentas con código asociado.