DEV Community

Nox Klax
Nox Klax

Posted on

Entendiendo las direcciones de ethereum y su generación

Ethereum Wallets

Recientemente he empezado a trabajar en una prueba de concepto para utilizar NFTs dentro de una de las aplicaciones que programo en mi trabajo.

Ha sido hasta ahora una aventura increible, sin embargo, una de las barreras que queremos romper para nuestros usuarios es la creación de wallets y direcciones. Queremos generar direcciones desechables que se puedan utilizar como provisionales y permitir luego que los usuarios puedan mover sus assets a sus wallets principales.

En otras palabras, queremos que los usuarios puedan interactuar con los NFTs sin tener que pasar por todo el proceso que puede representar crear una wallet. Especialmente para usuarios nuevos dentro del ecosistema.

Llegados a este punto, empecé a revisar dentro de la documentación de servicios que me permiten interactuar con un nodo de la red de ethereum, como podía generar direcciones para posteriormente interactuar con ellas.

Lo sorprendente para mí era que no existía documentación al respecto en ninguna parte. Entendía el por qué de esto. Si un servicio genera para ti una dirección, puede perfectamente almacenar tu llave privada y tener acceso total a esa dirección generada.

Por supuesto, esto no es bueno para la seguridad de los usuarios. Sin embargo, me seguía preguntando cómo lo hacían servicios como Binance que te permiten tener wallets sin pasar por todo el proceso de crearlas tú mismo.

Y entonces llegué a un post que me hizo entender por completo dónde estaba la falla de mi búsqueda.

Las direcciones, wallets y llaves privadas NO son manejadas por la blockchain de Ethereum. No, en serio. Son un ente totalmente aparte que vive por fuera de ethereum.

Por lo tanto, simplemente usando el algoritmo cryptografico detrás de las direcciones de ethereum (keccak256), o una implementación más simple a través de una librería, podemos generar todas las direcciones que queramos.

La duda natural surge entonces. Cómo se asegura ethereum de que una dirección nueva no haya sido generada y usada en el pasado? La respuesta es que no lo hace.

Mind blow

Significa esto que estamos en riesgo si alguien genera una dirección identica a la nuestra? Bueno sí y no. Déjame explicarte.

Las direcciones de ethereum son hashes de 160 bits lo que significa que existen 2^160 hashes posibles. Por lo tanto las probabilidades de colisión entre 2 direcciones será del 50% cuando se hayan usado 2^80 hashes.

Para darte una idea que tan poco probable es esto, si cada persona en el planeta gastara todo su tiempo vital solo generando cuentas de ethereum y lograra generar una cuenta cada segundo, alcanzaria a generar tan solo 2^57 cuentas.

Es decir, que para generar 2^80 cuentas y alcanzar el 50% de probabilidades de encontrar una colisión, se necesitaría que este proceso se hiciera, sin parar, por al menos 8 millones de años.

En otras palabras, la forma en que ethereum se asegura de que cada dirección sea única es teniendo un aplastantemente alto número de direcciones posibles. De esa forma, es practicamente imposible generar una dirección duplicada... Al menos por ahora.

Seguiré escribiendo sobre web3, solidity y smart contracts, asi que si te interesa, sígueme en twitter, es allí donde te podrás enterar más fácilmente de mi travesía por la web3.

https://twitter.com/NoxKlax

Discussion (0)