¿Qué sucede si una transacción ya procesada se envía nuevamente a la red?

Tengo un script que envía transacciones automáticamente usando la llamada API JSON RPC eth_sendRawTransactiona un nodo que tiene RPC habilitado.

Mi pregunta es, ¿qué sucederá si envío estas transacciones (puede haber muchas, por cierto) varias veces después de que ya se hayan procesado?

Digamos, mi script tiene un error, o la base de datos donde almaceno el sentestado de la transacción se elimina, y de alguna manera vuelvo a enviar muchas transacciones sin procesar (ya procesadas y almacenadas en la cadena de bloques) nuevamente. Básicamente estoy interesado en saber si voy a perder dinero por segunda vez que envíe estas transacciones. ¿Pueden los mineros procesarlo y tomar la tarifa, mientras informan el error?

La lógica sugiere que no debería costarme enviar transacciones varias veces porque noncey transaction hashson valores únicos, pero quiero estar seguro de ello. Además, si volver a enviar transacciones ya procesadas no cuesta dinero, ¿podría ser un ataque DDoS potencial para la red principal de Ethereum? Me gusta, ¿volver a enviar todas las transacciones que la cadena de bloques ya ha procesado?

Quiero decir, si los mineros pudieran hacer eso, no necesitan que ejecutes "eth_sendRawTransaction". Podrían simplemente volver a ejecutarlo ellos mismos y tomar la tarifa. O, más fácil de entender, podrían escribir su propio script en eth_sendRawTransaction, utilizando los mismos datos que les envió la primera vez que ejecutó eth_sendRawTransaction (Dado que dos scripts hacen lo mismo, tienen el mismo resultado, independientemente de si es suyo o del otro). mineros copiándote).

Respuestas (3)

Por cada dirección de remitente, una transacción con un cierto nonce solo se puede minar una vez. No perderá dinero, pero otros nodos pueden desconectarse de usted porque podrían pensar que está enviando spam.

Cuando un nodo de Ethereum recibe una transacción, no la retransmite inmediatamente a todas sus conexiones. No podrá hacer DDoS en la red usando este método.

ooh, por cierto, acabo de hacer esto en testnet, y no puedes enviar una transacción existente nuevamente, obtienes este error:nonce too low

Esto es lo que obtiene cuando vuelve a enviar una transacción:

Error: nonce too low

Cada vez que realiza una transacción, nonce obtiene un aumento en uno. Así es como Ethereum protege del doble gasto. Si vuelve a enviar su transacción con el mismo nonce. El primer nodo rpc verifica su número de nonce si ya está utilizado, simplemente descartará su transacción y no la transmitirá a los pares conectados.

Hm, "Doble gasto" es una frase muy específica en la seguridad de la cadena de bloques, por lo que no recomendaría usarla aquí, ya que no tiene nada que ver con el significado tradicional de un "Ataque de doble gasto" (es decir, tener un saldo de $ 5, comprar algo , luego bifurcación dura para gastar sus $ 5 nuevamente). Quizás sería mejor decir que el nonce está ahí para evitar el "Envío doble", donde alguien puede volver a enviar su transacción para que le dé ETH dos veces.