Imaginemos que tengo dos transacciones bastante iguales: la única diferencia es su to
campo. La primera transacción - A
, tiene 0x1111....
y la segunda - B
, tiene 0x22222....
en el to
campo.
Si los envío al mismo tiempo, ¿qué sucederá? Veo dos formas diferentes:
El "mundo" se dividirá en dos partes: los nodos que han recibido A
al principio y los que han recibido B
. Entonces, dependiendo de dónde se encuentre "nuestro" minero, A
o B
se extraerá, 50/50.
Los nodos de Ethereum permiten reemplazar transacciones si no se confirman. Entonces, si una transacción aún no se extrae y el nodo recibe una nueva, la reemplaza.
Y la segunda pregunta. Configuremos el gasPrice
para el B
dos veces más grande que en el A
.
A
B
¿ Tiene B
posibilidades de ganar esta carrera? Quiero decir, ¿existe una regla como: "Si hay una transacción desde alguna dirección en el grupo de tx, pero hay otra transacción desde la misma dirección y es más costosa , la primera transacción debe reemplazarse con la segunda"?
¡Gracias de antemano!
Si los envío al mismo tiempo, ¿qué sucederá?
Un nodo no reemplazará transacciones con el mismo nonce a menos que el precio del gas de la nueva transacción sea superior a cierto valor ( predeterminado: 10 %, mínimo: 1 % ). Como resultado, A
o B
será minado depende de qué transacción recibió primero el minero. Tenga en cuenta que la transacción no minada se eliminará cuando un nodo reciba el bloque minado.
¿B tiene alguna posibilidad de ganar esta carrera?
Sí. Account Nonce
se usa en Ethereum para reemplazar una transacción que no se está extrayendo. Enviar una transacción con el mismo nonce
y un precio de gas más alto reemplazará la anterior. Para un caso de uso normal, nonce
debe aumentarse en 1 cada vez que envíe una transacción, de modo que una cuenta pueda enviar varias transacciones al mismo tiempo.
No es ninguna de esas cosas.
Las transacciones enviadas terminan en la cola de transacciones pendientes. Sí, los nodos de la red descubren las transacciones pendientes en su momento, ciertamente no simultáneamente, pero no importa.
El proceso de minería establece un orden definido para las transacciones que se aceptan en la cadena. Puede ser A, luego B, o B y luego A. En cualquier caso, las transacciones serán procesadas por todos los nodos en el mismo orden.
Un bloque es un conjunto ordenado de transacciones. Una cadena de bloques es un conjunto ordenado de bloques. Por extensión, una cadena de bloques es un conjunto ordenado de transacciones. Todos procesarán las transacciones en la misma secuencia, tarde o temprano.
Espero eso ayude.
natewelch_
to
ygasPrice
. Siempre será A o B ya que tienen el mismo nonce.Rob Hitchens
natewelch_