Tengo un script que envía transacciones automáticamente usando la llamada API JSON RPC eth_sendRawTransaction
a 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 sent
estado 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 nonce
y transaction hash
son 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?
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.
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.
Nicolás Pipitone