Una wallet de Bitcoin es una app o un dispositivo que te permite almacenar, respaldar, recibir, y enviar Bitcoin. Aunque suene simple, los desarrolladores de wallets enfrentan grandes desafíos de ingeniería para lograr una aplicación robusta y fácil de usar. En éste artículo exploro las responsabilidades básicas de toda wallet de Bitcoin.
Las wallets son aplicaciones que almacenan tus claves privadas y generan las claves públicas para que puedas recibir pagos en Bitcoin.
También te permiten crear transacciones para enviar tus Bitcoin a terceros o a otras wallets propias.
Cómo ya expliqué en éste artículo, tener Bitcoin significa ser dueño de «monedas» no gastadas que están almacenadas en la blockchain, el «libro contable» de la red de Bitcoin.
En ese sentido, la responsabilidad principal de una wallet de Bitcoin es utilizar tus claves para encontrar todas tus «monedas» disponibles, reflejarlas en tu «balance», y permitirte usarlas.
Es común creer que la wallet es el lugar donde se «guardan» los Bitcoin para ser usados. Ésta creencia es falsa. Las wallets sólo almacenan claves para poder gestionar tus Bitcoin. Por eso, un nombre más apropiado para las wallets sería un «llavero», porque almacenan las llaves (keys) que te dan acceso a tus monedas, pero no guardan tus monedas.
Responsabilidades básicas de una wallet de Bitcoin
A grandes rasgos, una wallet de Bitcoin debería hacer o permitirte:
- Crear una nueva wallet (una nueva seed phrase)
- Importar una wallet existente (con seed phrase existente)
- Generar nuevas claves privadas y públicas «hijas» para recibir nuevas monedas y poder gastarlas a futuro
- Escanear la blockchain, el «libro contable» para encontrar tus monedas disponibles y agregarlas a tu balance
- Detectar pagos entrantes, para poder agregarlos a tu balance
- Construir transacciones para poder enviar tus Bitcoin a terceros o a otra wallet propia
- Respaldar tu wallet para no perder acceso a tus fondos
- Opcional, pero recomendado: permitirte elegir qué monedas usar en cada transacción que realices (esto se conoce como coin control)
- Opcional, pero recomendado: permitirte guardar información relevante sobre tus monedas (por ejemplo: de quién vino, cuál fue el motivo del pago, etc)
Voy a explorar cada una de esas cuestiones
Crear o importar una nueva wallet
Las wallets te permiten crear o importar una seed phrase, que es la copia de seguridad de tu clave privada maestra.
Cuando creas una nueva seed phrase, tu wallet estará vacía.
Cuando importas una seed phrase «ya usada», la wallet escaneará la blockchain de Bitcoin para encontrar tus «monedas» y almacenarlas en sus estructuras internas para construir tu balance y permitirte gestionar tus Bitcoin desde la aplicación de la wallet.
Generar nuevas claves privadas y públicas «hijas» para recibir nuevas monedas y poder gastarlas a futuro
Como ya mencioné en mi artículo sobre claves privadas, tu seed phrase es un respaldo de tu clave privada «maestra».
Pero cuando quieras recibir nuevos BTC, tu wallet creará un nuevo par de claves para recibir el pago y poder gastarlo en el futuro.
Cada pago recibido en Bitcoin suele tener su propia clave privada y pública (o dirección)
Esto quiere decir que no vas a tener una sóla clave privada, si no que vas a tener decenas, o cientos, o miles de claves privadas; todas derivadas de tu clave privada maestra.
Para esto, las wallets necesitan mecanismos para derivar nuevas claves privadas «hijas» de tu clave privada maestra.
Derivación secuencial
Una forma simple de lograr esto sería hacer una derivación secuencial, que consiste en tomar la clave privada, agregarle un índice (ej: 0, 1, 2, …, n), y luego hacerle una operación de hash para conseguir la clave privada hija.

En el ejemplo anterior, la wallet tomó la seed phrase y generó n claves privadas que le permiten derivar sus n claves públicas para poder recibir pagos en ellas.
Derivación jerárquica determinística
En la actualidad, las wallets usan un mecanismo más astuto para generar claves y direcciones, y lo logran usando una estructura jerárquica determinística.
Esto se conoce como Hierarchical Deterministic (HD) Key Generation, y está descripto en la propuesta de mejora de Bitcoin BIP32
Éste método usa un algoritmo que produce un árbol de claves.

Éste esquema permite organizar los fondos de una forma más flexible, como por ejemplo: crear múltiples «cuentas» de Bitcoin con tu misma seed phrase, crear subcategorías, etc.
Lo interesante de éste método es que es un estándar utilizado por prácticamente todas las wallets de Bitcoin, y sólo necesitas de tu seed phrase para poder acceder a tus fondos, independientemente de la wallet que uses.
Escanear la blockchain para encontrar tus monedas
Cuando importas tu seed phrase en un nuevo dispositivo (wallet), el dispositivo utilizará el algoritmo jerárquico que expliqué más arriba para derivar tus direcciones, empezando desde la nro 0, hasta encontrar todos tus fondos disponibles en la blockchain de bitcoin.
Habiendo generado tus claves «hijas», la wallet puede escanear todo el libro contable de Bitcoin y reconstruir el historial de transacciones, hasta llegar a tu saldo final.
La dificultad de éste proceso radica en que cada clave privada puede tener aproximadamente 4 mil millones de claves hijas, por lo que cada rama del arbol puede tener 4 mil millones de hijos, y cada hijo puede tener otros 4 mil millones de hijos; y así sucesivamente.
Hubo propuestas como BIP43 y BIP44 que propusieron una forma estándar de navegar ese espacio enorme de claves, dandole una función específica a cada rama del arbol.
¿Cómo sabe la wallet que ya encontró todos los fondos?
Imagina que recibiste 100 pagos de bitcoin en las direcciones 1, 2, 3, 4, …, 99, 100; y luego decidís mudarte a nueva wallet importando tu seed phrase en ella.
Tu nueva wallet derivará tus claves siguiendo el esquema de (BIP32, BIP43, BIP44).
Eso quiere decir que primero derivará tu dirección nro 1 y encontrará el primer pago, luego derivará tu dirección nro 2 y encontrará el segundo pago; y así sucesivamente hasta derivar la dirección nro 100 y encontrar el último pago que recibiste.
Tu wallet ya encontró todos los fondos, pero todavía no lo sabe, porque es posible que en la dirección nro 101 también haya fondos.
¿Cómo podría saber la wallet que la última dirección que recibió fondos fue la nro 100?
La cantidad posible de claves derivadas es tan grande que es imposible para una wallet revisar si hay fondos en cada una de ellas.
Por eso, las wallets utilizan un concepto de gap limit. El gap limit es un número que marca el límite de direcciones a escanear.
Si tu wallet tiene gap limit = 20, significa que cuando encuentre 20 direcciones consecutivas sin fondos, considerará que ya no hay más fondos y dejará de escanear.
En nuestro ejemplo, si tu último pago fue recibido en la dirección nro 100, la wallet escaneará hasta la dirección nro 120 y descubrirá que no se recibieron fondos en ninguna de las últimas 20 direcciones, por lo que dejará de buscar.
Detectar nuevo pagos entrantes, para poder agregarlos a tu balance
Cuando recibís un pago en una dirección de Bitcoin, es importante que la wallet la detecte y la agregue a tu saldo.
Para esto, las wallet suelen mantener un pool de direcciones que monitorean constantemente para ver si se reciben pagos en ellas, y así enviarte una notificación y actualizar tu balance.
Construir transacciones para poder enviar tus Bitcoin a terceros o a otra wallet propia
Las wallets te permiten enviar pagos de Bitcoin utilizando las monedas disponibles en tu balance.
Cuando quieras gastar tus Bitcoin, tu wallet te pedirá una dirección de destino y eligirá las monedas que más se adecuen al monto que querés enviar, buscando un balance entre privacidad y costo de comisión por envío.
Es muy importante que la wallet sepa estimar la comisión correcta, basada en la congestión que haya en la red de Bitcoin, para evitar demoras en la confirmación del pago.
Algunas wallets más avanzadas permiten al usuario elegir exactamente qué monedas usar para cada pago. Esto es parte de un concepto que se conoce como coin control.
Respaldar tu wallet para no perder acceso a tus fondos
El respaldo más importante de tu wallet es tu seed phrase (clave privada maestra).
Siguiendo los consejos que describo en éste artículo vas a tener acceso a tus Bitcoin sin importar si tu teléfono celular o hardware wallet se hayan perdido, robado, o hayan dejado de funcionar.
Otros tipos de respaldo
Algunas wallets te permiten añadir metadata a los pagos que hacés y recibís, por ejemplo: una nota, una categoría, la persona que lo recibió, etc.
Estos datos adicionales no quedan registrados en ningún lugar de la red de Bitcoin, si no que están en tu aplicación.
En éste caso, para no perder acceso a esos datos es recomendable que la wallet ofrezca backups de la metadata que deberías guardar en un lugar seguro.
Pero lo más importante a la hora de respaldar tu wallet es resguardar tu clave privada maestra de forma segura, porque con ella nunca vas a perder acceso a los fondos.
Bonus: watch-only wallets
Las Watch-only wallets sólo almacenan claves públicas y no almacenan ninguna clave privada.
Esto sirve para poder ver tu saldo de Bitcoin, ver pagos entrantes, y en algunos casos generar nuevas direcciones para recibir pagos; pero sin poder gastarlos.
Al no almacenar tus claves privadas, las watch-only wallets son muy seguras para usar en cualquier dispositivo, porque nadie podrá gastar tus fondos.
Esto se logra importando tus claves públicas en la wallet, o importando tu xpub (extended public key), un concepto que menciono en el artículo sobre una nueva forma de pagos en Bitcoin llamada Silent Payments.
Deja una respuesta