Recientemente me fascinó Blockchain y comencé a aprender Ethereum. Me encontré con el concepto del nonce en Ethereum.
Después de investigar, descubrí que nonce se usa para dos propósitos.
una. Mantener en orden las transacciones relacionadas con una cuenta. es decir, si hay una transacción con el nonce 3 relacionada con alguna cuenta en el txpool y alguna transacción llegará al nonce 4, entonces esa transacción no se extraerá hasta que ya menos que se extraiga la transacción con el nonce 3.
Entiendo esto.
Pero tengo alguna pregunta que no soy capaz de encontrar?
i) el valor nonce está relacionado con una dirección, ¿verdad? Entonces, dos direcciones pueden tener el mismo nonce al mismo tiempo, es decir, la cuenta con la dirección A puede tener el último nonce 2, de manera similar, la cuenta con la dirección B también puede tener el último nonce 2.
ii) ¿Todos los nodos de la red tendrán el mismo valor nonce más reciente para todas las cuentas disponibles en la red?
Es decir, si hay tres cuentas y 2 mineros y el valor de nonce para tres cuentas es 1,2,3 respectivamente, ambos mineros tendrán el mismo nonce.
Suposición: ambos mineros están sincronizados
b) ¿cómo se usa nonce para evitar un gasto doble?
¿Qué es el nonce en Ethereum?
Si consulta el Glosario en Github Wiki , hay dos tipos de nonce que se usan en Ethereum.
Account nonce: un contador de transacciones en cada cuenta. Esto evita los ataques de reproducción en los que se envía una transacción, por ejemplo. B puede reproducir 20 monedas de A a B una y otra vez para agotar continuamente el saldo de A.
Nonce de prueba de trabajo: un valor sin sentido en un bloque que se puede ajustar para tratar de satisfacer la condición de prueba de trabajo
Aquí se refiere a la cuenta nonce, que es el recuento de transacciones de esa cuenta.
i) El valor de Nonce está relacionado con una dirección, ¿verdad? Entonces, dos direcciones pueden tener el mismo nonce al mismo tiempo, es decir, la cuenta con la dirección A puede tener el último nonce 2, de manera similar, la cuenta con la dirección B también puede tener el último nonce 2.
Sí, como se explicó anteriormente, es el recuento de transacciones y, por lo tanto, está relacionado con la cuenta. Como es un número creciente, dos cuentas pueden tener el mismo nonce al mismo tiempo.
ii) ¿Todos los nodos de la red tendrán el mismo valor nonce más reciente para todas las cuentas disponibles en la red?
Cuando los nodos se sincronicen con blockchain, eventualmente lo harán. Dado que un nodo acepta la cadena válida más larga, no hay problema de que todos los nodos no se actualicen con el último valor de nonce en el momento en que se extrae una transacción. Una vez sincronizados, tendrán el mismo valor de nonce para la cuenta. (Es obvio porque en una cadena de bloques se supone que todos los nodos tienen los mismos datos de bloque. Entonces, después de un cierto período de tiempo , puede estar bastante seguro de que la transacción está confirmada, de ahí el valor de nonce)
b) nonce se usa para evitar el doble gasto, ¿cómo?
Evitar el doble gasto significa dejar de usar dos veces la misma cantidad. Si el nonce se establece en el mismo valor, solo se extraerá una de las transacciones y, la mayoría de las veces, esa puede ser la que tenga un precio de gasolina más alto, pero sin embargo, no se gastará dos veces, ya que solo se realizará una transacción al final en cualquiera de las dos. caso.
Otro truco evitado por nonce es usar precios de gasolina más altos para que una transacción enviada más tarde se extraiga antes que una anterior de la misma cuenta.
Considere una situación en la que A envía una transacción de X ETH a B como pago y la cuenta de A solo tiene X ETH en su cuenta. Una vez que la transacción se envió para ser minada, A puede enviar otra transacción de X ETH con un precio de gas más alto a una de sus otras cuentas, lo que permite que la primera transacción enviada se extraiga más tarde al obtener una prioridad más alta en la cola de transacciones pendientes. Pero dado que Ethereum tiene en cuenta el nonce, esto no está permitido ya que el nonce de la transacción posterior es más alto que el anterior.
También puede consultar esta pregunta .
En primer lugar, es 'nonce', no 'nounce'.
i) Sí, cada dirección tiene un nonce. Las direcciones pueden tener el mismo nonce, y con frecuencia lo tienen.
ii) Sí, todos los nodos en la misma cadena de bloques han registrado el mismo nonce para cada dirección, porque los nodos se almacenan dentro de la cadena de bloques.
b) El nonce es básicamente un contador que realiza un seguimiento de cuántas transacciones ha enviado una dirección.
Supongamos que una dirección A tiene 1 ETH.
Primero, intenta enviar 1 ETH a la dirección B. Llamemos a esta transacción A0 porque fue firmada por A y tiene un nonce 0. Ahora, A intenta duplicar este 1 ETH enviando otra transacción de 1 ETH a C: llamémoslo transacción A1. A1 será rechazado inmediatamente por todos los nodos, porque cada nodo puede ver que A1 debe venir después de A0, y después de A0 no hay suficiente ETH en A para enviar A1.
Por lo tanto, no puede gastar dos veces con diferentes nonces.
A podría intentar una estrategia diferente: duplicar el gasto con el mismo nonce. Primero, A envía la transacción A0 a B, y luego envía otra transacción A0 a C. Ambos tienen el mismo nonce y el mismo origen, pero un destino diferente. Solo se aceptará una de las transacciones A0 en la cadena de bloques, porque todos los nodos pueden ver que A usó el nonce 0 dos veces, y esto no está permitido.
Por lo tanto, tampoco puede gastar dos veces con el mismo nonce.
Prashant Prabhakar Singh
sudo
vaquero