La oficina del contralor de la moneda de EEUU aprueba el uso de Stablecoins para las actividades de pago de los bancos

La oficina del contralor de la moneda de EEUU (OCC), regulador y supervisor de la banca y asociaciones de ahorro federales, ha emitido su carta interpretativa 1174 de Enero 2021 en la que se establece que los bancos podrán usar redes de verificación de nodos independientes (RVNI) con Stablecoins para realizar funciones bancarias, como por ejemplo pagos.

Bajo RVNI se entiende la tecnologia DLT (Distributed Ledger Technology) que se utiliza en las criptomonedas, mientras que bajo Stablecoin se entiende en esta carta una criptomoneda respaldada por una moneda fiduciaria (ej. USD o EUR).

De acuerdo a la interpretación los bancos pueden servir como un nodo RVNI y usar estos nodos y monedas estables para realizar actividades bancarias cumpliendo siempre con la regulacion vigente.

https://www.occ.treas.gov/news-issuances/news-releases/2021/nr-occ-2021-2a.pdf

Esta aprobación abre nuevas posibilidades a los bancos, en especial para transferencias transfronterizas, puediendo asi marcar el inicio del fin de SWIFT.

Entendiendo los Monederos (Wallets) para Bitcoin

Una vez que te convences de entrar al futuro del dinero y te preparas a comprar tu primer Bitcoin o fracción de el, veras que es necesario tener un monedero (wallet) para guardar tu dinero. Un monedero de Bitcoin (y otras criptomonedas) es un programa (software) que sirve para enviar, recibir y guardar tus Bitcoin. En realidad no guarda Bitcoin sino las Llaves Privadas (private keys) que te permiten consumir los Bitcoin de las direcciones publicas (Bitcoin address) a las cuales te dan acceso. La dirección publica o dirección Bitcoin es a su vez es una derivación de la Llave Pública.

Es decir, con la Llave Privada generas la Llave Pública, y con esta generas la dirección de Bitcoin (Bitcoin address, la que entregas para que te manden BTC). Todo esto lo hace tu wallet. Entonces, básicamente lo que tu wallet contiene es una lista de llaves privadas y su par de llaves públicas. Quien controla la llave privada es el dueño de los Bitcoin.

Por ejemplo si quieres recibir Bitcoin tu wallet crea una dirección para que otro usuario te puede enviar los Bitcoin. Lo que sucede por detrás es que tu wallet crea aleatoriamente una llave privada, con la cual crea una llave pública y finalmente te muestra la dirección Bitcoin generada de esta ultima.

Pero porque crear una dirección para cada transacción, no puedo hacer que envíen todo a la misma dirección, es decir, reutilizar la dirección? Es correcto, uno puede reutilizar la dirección y varias personas pueden enviar Bitcoin a la misma dirección, y como tu wallet tiene la llave privada puedes consumirlos. Pero existen dos potenciales problemas de seguridad:

  1. Es mas fácil saber de quien es la cuenta, y como la blockchain es transparente, cualquiera podría saber cuantos Bitcoin tienes en tu cuenta. Esto es el equivalente a que tu Banco publique tus nombres y apellidos con tu estado de cuenta.
  2. Cuando consumes tus Bitcoin de una cuenta debes firmar la transacción, y en esa firma se publica tu llave publica de la dirección usada. Si bien es extremadamente difícil derivar la llave privada de la publica, es aun mas difícil derivarla de la dirección Bitcoin (son 2 pasos versus 1 paso).

El punto 2 es la razón principal por la que se consume siempre la totalidad de Bitcoin de una dirección en cada transacción, lo cual nos lleva a otra función del wallet. Cuando consumes los Bitcoin de una dirección, es muy probable que no necesites consumir el total, es decir, se generara cambio. Este cambio es enviado en la transacción a otra cuenta generada por tu wallet (llave privada, publica y dirección) automáticamente. Es decir, de tu cuenta A que tiene 0.3 BTC enviás a B 0.1 BTC y tu wallet crea la cuenta C a donde dirige los 0.2 BTC de cambio.

Tu wallet guarda las llaves privadas en un archivo que por lo general se llama wallet.dat. Este archivo es vital, y si lo pierdes o te lo roban perderás todos tus Bitcoin. Entonces existen dos medidas de seguridad no negociables:

  1. Encripta tu wallet, es decir agrega una contraseña para poder leer el archivo wallet.dat. Tu wallet tiene una función para esto. Ahora si alguien roba tu archivo wallet.dat no podrá leerlo para hacerse de tus BTC.
  2. Haz copias de seguridad de tu wallet. Como podrás apreciar, después de cada transacción deberías hacer una copia de seguridad, pero por razones practicas, al menos al final de cada uso de tu wallet.

Este proceso de mantener un archivo con tu llaves puede ser tedioso y también peligroso si por alguna razón pierdes el backup del archivo, ademas que el mismo esta en una computadora que podría ser hackeada. Esto genero que los desarrolladores creen las hierarchical deterministic (HD) wallets. Estos monederos utilizan una lista de palabras, 12 o 24, para generar una llave privada raíz de la cual se pueden derivar innumerables llaves privadas, y con ellas innumerables llaves publicas y direcciones. Entonces ya no necesitamos guardar el archivo wallet.dat, sino solo necesitamos anotar las 12 o 24 palabras, y eso puede ser en una hoja de papel que no esta conectada a ninguna computadora y por lo tanto inhackeable. Claro que esta hoja debe ser también guardada en un lugar seguro, e idealmente, en varios lugares seguros.

Existen dos (2) categorías de wallets:

  1. Hot Wallet, aquellos que están constantemente conectados a Internet.
  2. Cold Wallet, aquellos que se conectan solo cuando es necesario mover BTC. Por ejemplo los Hardware Wallets y los Paper Wallets (wallets en papel).

Dentro de los Hot Wallet tenemos también tres diferencias:

  1. Lightweight o ligero, significa que el wallet lee la blockchain de otro nodo en Internet, lo cual da la ventaja de no consumir los mas de 200GB en tu disco duro para guardar la blockchain de Bitcoin.
  2. Full Node wallet, significa que el wallet baja a tu computadora la blockchain completa, lo cual de una ventaja de seguridad al no depender de un tercero.
  3. Web Wallet, que como su nombre dice son servicios de wallet en Internet. El problema es que en estos servicios no controlas tu llave privada y por lo tanto dependes de terceros, es la opción menos recomendable.

En los Cold Wallet exploraremos las dos opciones:

  1. Hardware Wallet, que guarda tu llave privada del tipo HD y te permite generar casi ilimitadas direcciones. Es muy segura porque solo la conectas a la PC e Internet cuando necesitas hacer transferencias.
  2. Paper Wallet, que lo que se entiende, un wallet de papel, donde esta escrita tu llave privada y dirección Bitcoin (así como el código QR). Esta también es muy segura porque no esta conectada a Internet, pero debes tomar en cuenta que para consumir los Bitcoin de la misma deberás importar tu llave privada a un Hot Wallet (software). Otro punto a tomar en cuenta es que siempre se consume el total, y por lo tanto el cambio lo recibirás en una nueva dirección que tu wallet generará, mientras que en la dirección del paper wallet no quedara nada.

Cual es el Wallet mas recomendable? Pues depende para que se quiere usar. Por ejemplo para el día a día, y montos pequeños, un wallet en el celular es bastante seguro y practico ya que permite leer códigos QR. Pero en general yo prefiero un hardware wallet como por ejemplo el Ledger Nano X.

Algunos Wallets:

  1. Mycelium (Android, IPhone)
  2. Unstoppable Wallet (IPhone)
  3. Electrum (Linux, Windows, Android, Mac)
  4. Exodus (Para principiantes, Linux, Windows, Mac, IPhone, Android)
  5. Atomic (Para principiantes, Linux, Windos, Mac, IPhone, Android)
  6. Bitcoin Core (Linux, Windows, Mac)
  7. Bitcoin Paper Wallet 
  8. Ledger Live, se usa con Ledger Nano (Linux, Windows, Mac, Androis, Iphone)

Ranking de seguridad de Wallets de peor a mejor:

  1. Servicio de custodia donde no controlas tu llave privada con interfaz web y sin 2FA (Two Factor Authentication), realmente quien guarde así sus criptos es un suicida. Ejemplo: Exchanges (Casas de Cambio)
  2. Servicio de custodia donde no controlas tu llave privada con interfaz web y con 2FA (Two Factor Autherntication). Ejemplo: Exchanges (Casas de Cambio, 2FA por SMS es un riesgo)
  3. Wallet basado en web no custodiado (es decir, uno mismo controla su llave privada) sin 2FA. El riesgo de phishing es alto. Ejemplo: blockchain.comMyEtherWallet usando el archivo Keystore
  4. Una PC con poca seguridad usando un wallet en caliente (hot wallet). Por ejemplo tener un Windows pirata, o un Windows sin todos los updates. Podrías tener instalado un troyano o keylogger.
  5. Apps de Wallet para el teléfono móvil donde controlas tu llave privada y tienes tu copia de Mnemonic keys.
  6. Hardware Wallet.

Ahora estas listo para iniciar tu camino por el futuro de la banca, la no banca, o la banca en tu bolsillo.

Montar un Nodo Completo de Bitcoin en Raspberry Pi

Esta vez haremos algo mas técnico, montar un nodo completo (Full Node) de Bitcoin en un Raspberry Pi (RBP). Un nodo completo de Bitcoin es un programa que valida las transacciones y bloques de la red Bitcoin. A su vez, la mayoría de nodos aceptan transacciones y bloques de otros nodos, los que validan y retransmiten a otros nodos.

Correr un nodo completo tiene su lado positivo:

  • Ayuda a la red de Bitcoin en la medida que la blockchain de Bitcoin siga las reglas, lo cual ayuda a evitar que muchos mineros se pongan de acuerdo para romperlas.
  • Mayor seguridad en la medida que tu monedero (wallet) no depende de un nodo que no controlas y en el cual debes confiar.
  • En caso de un hard-fork es una forma de votar por la blockchain que prefieras.
  • Mayor privacidad, en el caso que usas un nodo de terceros, ese nodo puede saber que direcciones IP se conectan.
  • No es difícil y no es caro.

Existen algunos lados negativos a considerar:

  • Asegurarse que Bitcoin no este prohibido en tu jurisdicción.
  • Mayor consumo de datos en tu conexión de Internet, verifica que no tengas limites de datos.

Veamos los requerimientos:

  • Raspberry Pi3 (o Pi4), con fuente e idealmente su caja (case
  • Monitor con conector HDMI y un teclado
  • Cable de red UTP 
  • Cable HDMI
  • Memoria SD con 512GB de alta velocidad (a la fecha Bitcoin consume 345GB) 
  • Lector/Grabador de memoria SD para nuestra PC 

Como primer paso debemos preparar la memoria SD e instalarle un sistema operativo. En este caso usaremos Ubuntu Server 20.04. Como el RBP solo reconoce hasta 64GB en FAT32 y las memorias mayores formatean en exFAT debemos formatear y forzar FAT32 antes de instalar el sistema operativo.

Para formatear la memoria podemos usar SD formatter. Lo bajamos, instalamos y ejecutamos para formatear la memoria SD.

Para migrar a FAT32 podemos usar GUIformat. Igualmente descargar, instalar y ejecutar.

Luego debemos bajar una imagen del sistema operativo Ubuntu Server 20.04 para ARM32 de aquí

Para grabar la imagen del sistema operativo a la memoria SD usaremos el Raspberry Pi Imager. Lo instalamos y ejecutamos y usamos la imagen de Ubuntu que descargamos para grabar la memoria SD.

Hasta ahi hemos terminado los preparativos para poder levantar el Raspberry Pi con Ubuntu. Ahora debemos pasar la memoria al Raspberry Pi3, conectar todos los cables, monitor, teclado y finalmente la fuente de poder para encenderlo.

Al ingreso veremos que nos recibe el Ubuntu con una terminal pidiendo el login. El usuario por defecto es ubuntu y su contraseña es ubuntu. Nos pedira cambiar la contraseña, escojan la que quieran pero anótenla e idealmente que sea segura.

Ahora viene lo bueno, empecemos a configurar el Ubuntu. Siempre iniciamos con una actualización:

sudo apt update
sudo apt upgrade
sudo reboot

Una vez reiniciado el sistema instalamos, configuramos y activamos el firewall:

sudo apt install ufw
sudo ufw allow 8333 comment “Bitcoin mainnet”
sudo ufw allow ssh
sudo ufw enable
sudo ufw status

También demos un nombre a nuestro servidor:

sudo hostnamectl set-hostname pi-bitcoin
hostnamectl

Cambiemos la IP dinámica (DHCP) a una estática:

ip a

Verificar el nombre de la conexión de red, usualmente es eth0. Para pasarla a estática debemos editar un archivo (adaptar de acuerdo a tu red):

sudo nano /etc/netplan/50-cloud-init.yaml
network:
   ethernets:
      eth0:
         addresses: [192.168.0.200/24]
         gateway4: 192.168.0.1
         nameservers:
            addresses: [8.8.8.8, 8.8.4.4]
   version: 2

Reiniciar la conexión de red y verificar el IP nuevo.

sudo netplan apply
ip a

Como el RBP tiene poca memoria RAM vamos a crear un archivo de SWAP de 4GB para que no nos quedemos sin memoria y el nodo se detenga:

sudo fallocate -l 4GB /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo reboot

Para no usar el usuario con acceso root (administrador) para ejecutar el nodo creamos otro usuario y pasa a su cuenta:

sudo adduser bitcoin
sudo su - bitcoin

Ya estamos listos para instalar el nodo de Bitcoin. Necesitamos descargar Bitcoin Core para ARM Linux de https://bitcoincore.org/en/download/. A la fecha de esta publicacion la version es v0.20.1.

wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz
tar xvf https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz

Ahora tendrán el programa en el directorio bitcoin-core-0.20.1. Entren al directorio y pueden lanzar el servidor con:

bin/bitcoind

Eso debe funcionar, pero lo detenemos con CTRL-C porque necesitamos hacer unas configuraciones adicionales antes de dejarlo funcionando. Para eso editamos el archivo ~/.bitcoin/bitcoin.conf:

nano ~/.bitcoin/bitcoin.conf
daemon=1
disablewallet=1
maxconnections=40
logips=1

Lanzamos nuevamente el nodo:

bin/bitcoind

Esta vez ya no vemos el registro de eventos (log). Para verlo podemos usar el siguiente comando:

tail -f ~/.bitcoin/debug.log

De ser posible, configrar un DEST-NAT en el router para que las conexiones externas al puerto 8333 sean dirigidas el IP de nuestro RBP.

Para revisar que nuestro nodo realmente esta activo debemos primero verificar nuestro IP publico:

curl https://www.whatismyip.com/ | grep "Public IPv4 is"

Y luego ingresamos ese IP en un Web Browser (Brave o Firefox) en https://bitnodes.io/.

Listo, espero les haya servido y gracias por apoyar la red Bitcoin.

Referencias:

Bitcoin y el dinero digital

Para entender Bitcoin y la nueva economía primero debemos entender el dinero. Así que la primera pregunta que debemos hacer es: “Que es el dinero?”

Los economistas definen el dinero como algo (cualquier cosa) que es generalmente aceptada para el pago de bienes y servicios, o para el pago de deuda (lo que incluye impuestos). La moneda (o currency en ingles), que es el papel moneda y las monedas de metal que llevamos usualmente en la billetera, son una forma de dinero. Sin embargo esta definición es muy restrictiva, ya que los cheques, tarjetas de crédito y cuentas bancarias también son consideradas dinero.

En la medida que el dinero puede ser cualquier cosa, en la historia se ha usado como dinero conchas, huesos, metales preciosos, monedas, notas de papel, y recientemente el libro contable digital (blockchain). Sin importar si el dinero es papel, conchas u oro, el dinero tiene tres (3) funciones que lo distinguen de otros activos como acciones, bonos y bienes raíces:

A. Medio de intercambio
El dinero cumple la función de medio de intercambio al ser usado para pagar por bienes y servicios, reduciendo significativamente los costos de transacción.

B. Unidad de cuenta o de cambio
El dinero es usado para medir valor en una economía, es decir, medimos el valor de bienes y servicios en términos de dinero. Así un kilogramo de arroz puede valer S/ 5.00 y una computadora personal puede valer S/ 4,000.00.

C. Depósito de valor
El dinero puede ser usado como un repositorio de valor para mantener el poder adquisitivo en el tiempo. Esta función no es única del dinero, otros activos como acciones, bonos, oro, propiedades, arte o joyas también pueden usarse como depósitos de valor.

El dinero también tiene seis (6) propiedades:
1. Debe ser fácil de estandarizar
2. Debe ser ampliamente aceptado
3. Debe ser divisible, de modo que sea fácil dar el cambio (vuelto)
4. Debe ser fácil de transportar
5. Debe ser durable
6. Debe ser escaso y difícil de falsificar

CriterioPapel MonedaOroBitcoinDinero Monopolio
A) Medio de intercambio++++++++++++
B) Unidad de cuenta+++++++
C) Depósito de valor++++++++++
1. Estandarizable+++++++++++
2. Ampliamente aceptado++++++++++
3. Divisible++++++++++
4. Fácil de transportar++++++++++
5. Durable++++++++++
6. Escaso, no falsificable++++++++(+)+
Ejemplos de dinero

De la tabla anterior podemos observar que efectivamente muchas cosas pueden ser dinero y a su vez pueden cumplir con las funciones y propiedades del dinero en diversas medidas. Es así como el papel moneda (dinero FIAT) es un muy buen medio de intercambio y unidad de medida, pero debido a la inflación y al mal manejo de algunos gobiernos puede no ser tan buen deposito de valor. Por otro lado, el oro y el Bitcoin no son (actualmente) buenos referentes como unidad de cuenta, pero ciertamente sirven de medio de intercambio y sobre todo como deposito de valor.

Finalmente existen varias categorías de dinero:

1. Dinero de materias primas (commodity)
* Oro, Plata
* Granos, gemas, ganado, etc.
* Notas de papel respaldadas por materias primas

2. Dinero FIAT
* Dinero de consenso, decretado por los gobiernos de tener valor
* No esta respaldado por nada físico (solo la confianza en el gobierno)

3. Dinero de crédito
* Cheques
* Tarjetas de crédito

4. Dinero electrónico
* Tarjetas de débito
* Tarjetas prepago
* M-Pesa

5. Criptomonedas (se diferencian del dinero electrónico al usar la Blockchain como medio de seguridad)
* Bitcoin
* Litecoin
* Dash
* Monero

Espero que esto sea de ayuda y sirva de base para los próximos blogs.

Referencias:
The Economics of Money, Banking, and Financial Markets (Eleventh Edition), Fredrick S. Mishkin (2016 ISBN 978-0-13-383679-0)