IOTA es un protocolo diseñado para ser utilizado por dispositivos IoT. Estos dispositivos seguirán felizmente cualquier regla para usar el protocolo de manera estricta, óptima y segura. Desafortunadamente, los humanos no son tan buenos para seguir reglas, si es que los conocen, y a menudo no tienen idea de las consecuencias de ciertas acciones. A continuación detallamos una lista de buenas prácticas y se explica el por qué para cada caso.
Estas son las reglas
REGLA 1: NUNCA vuelva a utilizar una dirección para recibir fondos. Nunca. Sin excepciones.
REGLA 2: SIEMPRE haga «Attach to Tangle» cuando crea nuevas direcciones para recibir.
REGLA 3: SIEMPRE espere a que se confirme una transacción antes de enviar cualquier la siguiente.
Estas son las razones
Todo tiene que ver con el gasto múltiple (multi-spending). Es decir, que se está gastando más de una vez desde la misma dirección. El problema, es que IOTA emplea one-time signatures y al utilizar una dirección se expone un 50% de su clave privada (seleccionado aleatoriamente) al público. Esto en sí mismo no es un problema, los fondos que llegan después de un único gasto son bastante seguros debido a que decifrar el otro 50% de la clave es una tarea extremadamente compleja.
Pero, cuando ocurre un segundo gasto en la misma dirección, se expone un otro 50% aleatorio de la clave privada de esa dirección. Entonces, teóricamente, las estadísticas le dirán que ahora el 75% de la clave privada ha sido expuesta. Sin embargo, dado que lo que queda expuesto al público es un 50% aleatorio de la clave, puede tener la mala suerte de que ambas exposiciones al 50% solo tengan una superposición del 10%. ¡En cuyo caso ya se ha expuesto un 90% de su clave! En un escenario como éste, su clave privada podría ser vulnerada más fácilmente.
En resumen: ¡dos o más gastos de la misma dirección son una pésima idea!
A continuación veremos qué escenarios podrían ocurrir que terminarán en un gasto múltiple y por qué seguir las tres reglas es una buena idea.
Regla 1: nunca vuelva a utilizar una dirección. Nunca. Sin excepciones.
De inmediato puedo escuchar a algunas personas decir: «¡Pero se te permite recibir varias veces en una dirección!» Técnicamente, es correcto. Los dispositivos de IoT harán esto todo el tiempo. Pero tienen la ventaja de saber de manera exagerada qué van a hacer las partes con las que están hablando y cuándo. Para que puedan hacer esto con seguridad aquí hay un escenario que muestra solo un ejemplo de por qué es una mala idea enviar varias veces a la misma dirección.
Digamos que retiro X iotas de un Exchange a la dirección A en mi wallet. Todo el proceso toma un poco de tiempo, pero termino con X iota en la dirección A.
Alentado por este éxito, decido retirar otros iotas a la misma dirección A. Después de todo, puedo enviar a una dirección varias veces, ¿no? Entonces realizo nuevamente el envío y el Exchange comienza a procesar el pedido. Tenga en cuenta que este proceso puede tardar horas o incluso días.
Mientras tanto le cuento a mi amigo acerca de IOTA, y para alentarlo, quiero enviarle algunos (digamos Z) iotas. Entonces él instala la wallet y me da una dirección de recepción B. Le digo a mi wallet que envíe Z iotas a la dirección B. La billetera hace lo que pedimos: toma los iotas en la dirección A, envía Z iotas a la dirección B, y -para proteger la dirección A de múltiples gastos, también envía los X-Z iotas restantes de forma segura a una nueva dirección C generada en mi wallet.
Todo parece estar bien hasta ahora. Pero con un problema: el Exchange aún no procesó mi retiro. Cuando finalmente lo procese, los iotas serán enviados a la dirección A tal como lo instruí. ¡Excepto que la dirección ahora ya tiene un gasto anterior! Oops!
Esta situación podría haberse evitado simplemente generando una nueva dirección D para la segunda extracción y utilizando esa dirección en lugar de la dirección A.
Por lo tanto: NUNCA reutilice una dirección. Ni siquiera para recibir.
Regla 2: Siempre haga Attach to Tangle a una nueva dirección de recepción.
De inmediato puedo escuchar a algunas personas decir: «¡Pero realmente esto no es necesario!». Y nuevamente, son técnicamente correctos. Está perfectamente bien enviar iotas a una dirección que no estaba vinculada a la Tangle explícitamente. Ellos llegarán bien. De nuevo, los dispositivos de IoT hacen esto todo el tiempo, pero también llevan un registro de las direcciones que dieron como direcciones de recepción.
La wallet IOTA lo hace de manera diferente. Debido a que es posible instalar la wallet en diferentes dispositivos e iniciar sesión en ambas carteras con la misma seed, los desarrolladores están determinando el estado de la wallet directamente desde la Tangle. De esta forma, ambas carteras responderán de la misma manera a los eventos.
Pero esta solución viene con un costo oculto. Para entender esto, necesitamos ver cómo la wallet decide qué direcciones ya se han utilizado. Lo hace al solicitare al nodo al que están conectados una lista de transacciones que incorporan esa dirección. Si aún no hay transacciones, concluye que aún no ha utilizado la dirección.
Al adjuntar una dirección a la Tangle, crea explícitamente una transacción de transferencia cero para esa dirección. Ahora la wallet puede encontrar esa transacción en la Tangle, por lo que sabe que ya está en uso. Y sí, en caso de que alguien envíe iotas a esa dirección, la wallet puede encontrar esa transacción en la Tangle y nuevamente ver que ya está en uso. Por lo tanto, no necesitamos adjuntarlo explícitamente, ¿verdad? Bzzzzt! Incorrecto!
Digamos que tengo X iotas en la dirección A. Decido retirar otros i iotas del Exchange a la dirección B. Como he seguido regla 1 y usé una dirección diferente. No me molesto en vincular la dirección B a la Tangle, porque me dijeron antes que eso no era necesario. Entonces hago el retiro y el Exchange comienza a procesar el pedido. Lo cual nuevamente toma tiempo.
A continuación, decido enviar Z iotas a mi amigo nuevamente. Inicio la transferencia, y esta vez la wallet puede tomar desde la dirección A, enviar Z iotas a la dirección de mi amigo, y luego quiere enviar las restantes X – Z iotas a una nueva dirección de recepción. Por lo tanto, busca en la Tangle qué dirección aún no está en uso. Aha! La dirección B no se usa aún y el resto de mi balance es enviado allí. Ahora estamos en la misma situación que estábamos con la regla 1.
Entonces, si ahora decidimos enviar otra cantidad de iotas a otro amigo, estaremos gastando la dirección B antes de que el retiro a la dirección B se ha ejecutado. Y terminamos con un gasto múltiple garantizado de nuevo.
Esta situación podría haberse evitado simplemente vinculando explícitamente la dirección B a la Tangle (Attach to Tangle). En ese caso, la wallet habría visto que ya estaba en uso, y habría enviado el resto a una nueva dirección C en su lugar.
Por lo tanto, haga el caso: Siempre vincule una nueva dirección de recepción a la Tangle.
Regla 3: siempre espere a que se confirme una transacción antes de enviar cualquier otra cosa.
De inmediato puedo escuchar a algunas personas decir: «¡Pero la wallet me impedirá realizar gastos dobles!» Y nuevamente, son técnicamente correctos. La wallet verificará antes de gastar si ya ha habido un gasto confirmado en la dirección, y no permitirá un segundo gasto en ese caso. Pero considere la siguiente situación:
Tengo X iotas en la dirección A y decido enviar Y iotas a un Exchange. Esto generará una transacción N° 1 que gastará Y iotas desde la dirección A.
Ahora también decido enviar a mi amigo su Z iotas antes de que se confirme la transacción N° 1. Como la wallet aún ve las X iotas en la dirección A, generará felizmente la transacción N° 2 gastando Z iotas de la dirección A. ¡Vaya! Dos gastan desde la misma dirección.
Esta situación podría haberse evitado simplemente esperando a que se confirme la transacción N° 1 antes de enviar la transacción N° 2.
Por lo tanto: siempre espere a que se confirme una transacción antes de enviar cualquier otra cosa.
Tenga en cuenta que muchas de estas situaciones son incluso más confusas porque no tiene idea de qué direcciónes elegirá la wallet como entradas para enviar iotas a alguna parte.
También tenga en cuenta que solo proporciono un ejemplo de donde las cosas pueden salir mal para cada regla. Las cosas se vuelven aún más fangosas cuando ocurren snapshots. Pero eso es algo para otro artículo.
Fuente: https://forum.helloiota.com/1973/Best-practices-for-using-the-IOTA-wallets-safely