
Tiempo de lectura aprox: 6 minutos, 20 segundos
Introducción
Estoy inmerso en la preparación y publicación de una serie de podcasts sobre algo que en Bitcoin no se ha resuelto todavía al 100%:
- las direcciones que nos permitan pagos recurrentes con privacidad y sin interactividad requerida
Hablaré más en detalle sobre esto en el próximo pod, pero la idea es que en Bitcoin no tenemos una forma fácil de compartir una dirección de forma pública y poder:
- recibir tantos pagos recurrentes como queramos
- mientras mantenemos la privacidad
- y sin fricción de ningún tipo
Podemos reutilizar direcciones, como se ha hecho siempre, pero eso es malísimo para nuestra privacidad y para la de los pagadores.
Queremos un imposible: tener una dirección que se pueda reutilizar y que ningún observador que la vea pueda cotillear a ver cuanto hemos recibido.
Algo así tenemos con los códigos de pago reutilizables del BIP47 de 2015 y que el equipo de Samourai Wallet implementó en los PayNyms de su wallet en 2018. Pero para utilizar los Payment Codes tienes el problema de necesitar:
- o una transacción de notificación con cada persona a la que quieras realizar pagos recurrentes (abrir un canal de pago (nada que ver con LN))
- o guardar un backup, en paralelo a tu frase mnemónica, de todos los payments codes que te han hecho pagos, para poderlos recuperar más tarde.
Con el estado de la mempool actual, pensar en tener que pagar las comisiones de 1 tx adicional por cada canal de pago que quieras tener es algo que puede tirar para atrás, pero sin lugar a dudas, los Paynyms y sus Códigos de Pago son la mejor solución que tenemos sobre la mesa para tener direcciones de pago reutilizables.
La llegada de los Silent Payments
- Más información: https://github.com/josibake/bips/blob/silent-payments-bip/bip-0352.mediawiki
- Podcast sobre Silent Payments: https://youtu.be/2mg3KcfNVxw
Los Silent Payments de Ruben Somsen y Josi Bake son una nueva propuesta de direcciones reutilizables para bitcoin, que permitirán hacer todo lo que hacen los códigos de pago pero sin necesitar una transacción. Encontrarás la Silent Address de la persona a la que desees pagarle (quizá de su perfil de X, Nostr o su Web), le darás a enviar a tu wallet y ya.
En Mainnet tendrán una longitud de 116 caracteres (como los códigos de pago), empezarán por sp1q (de silent payment) y lucirán tal que así:
sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgqjuexzk6murw56suy3e0rd2cgqvycxttddwsvgxe2usfpxumr70xc9pkqwv
Bitcoin Core publica nuevas versiones cada 6 meses. Hace apenas 1-2 meses se publico la versión 26 y es posible que veamos Silent Payments implementado para la versión 27 o 28.
Nosotros mientras tanto podemos testear las versiones de prueba en signet y en esta guía os enseño como hacerlo.
Si lo conseguís, dejad en los comentarios vuestra SP y os hago algunos pagos silenciosos. También podemos comentar en la sala de chat 🙂
Esta es mi dirección de Silenciosa en Signet:
tsp1qqteqg3kltrqslyme5g3h9n7pgpra0cyf08kleg5vcj9gdkyhyzspjq3zr6x5j3aycvvfrr96lldseexcchtvsu3xrxp7wkzpkk6ekuk2957acw8x
Mas abajo os explico cómo enviarme monedas.
Tutorial Silent Payments en Signet
Este tutorial se ha hecho para Linux (Ubuntu) aunque muy probablemente podría ser adaptado para Mac con mucha facilidad. En Windows no lo he probado pero si teneis instalado WSL con mucha seguridad también se pueda seguir (nota mental, hacer tutorial de instalación de WSL en Windows).
Preparando Ubuntu
Requerimientos previos
1. Tener Linux actualizado
sudo apt updatesudo apt upgrade
2. Tener git instalado
sudo apt install git
Lo habremos instalado si al hacer git –version nos devuelve la versión
- > git version 2.34.1
Instalando direnv
Sobre direnv: https://direnv.net/
sudo apt install direnv
Verificamos que se ha instalado:
direnv --version- > 2.25.2
Ahora hay que «hook it into shell» (https://direnv.net/docs/hook.html)
sudo nano ~/.bashrc
Entonces añadir:
eval "$(direnv hook bash)"
Ctrl+X para salir
y le decimos que Sí a guardar las modificaciones.
Ahora solo nos queda recargar el archivo de .bashrc y lo podemos hacer cerrando sesión y volviendo a acceder o con el siguiente comando:
source ~/.bashrc
Instalando bendir
Esto es opcional pero nos facilitará mucho los comando que le tiremos luego a bitcoin-cli porque nos evitará tener que estar poniendo todo el rato «signet»
Referencia: https://github.com/josibake/bendir
¿Qué es bendir?
- Es un direnv para gestionar signet, regtest, y testnet automáticamente vía directorios y variables de entorno.
¿Cómo lo instalamos?
cdgit clone https://github.com/josibake/bendir.gitcp -r bendir/. ~/silent-payments-testing/cd ~/silent-payments-testingdirenv allow
Instalando Bitcoin Core SP
Dependencias de Bitcoin Core
Para compilar bitcoin core y ejecutarlo vamos a necesitar algunas dependencias. Aunque aquí compilaremos una versión de Test con el código de Silent Payments, si te interesa aprender a compilar bitcoin core de la rama principal (solo cambia un comando), el tutorial imperdible es el de Jon Atack:
Para las dependencias, éstas cambian en función del sistema operativo y la distribución. Revisar en:
- Linux (Unix): https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md
- macOS: https://github.com/bitcoin/bitcoin/blob/master/doc/build-osx.md
- Windows: https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.md
- android, freebsd, netbsd y openbsd se encuentran en el repositorio de bitcoin
Instalo las de linux siguiendo las recomendaciones de Jon Atack:
sudo apt-get install automake autotools-dev bsdmainutils build-essential ccache clang gcc git libboost-dev libboost-filesystem-dev libboost-system-dev libboost-test-dev libevent-dev libminiupnpc-dev libnatpmp-dev libqt5gui5 libqt5core5a libqt5dbus5 libsqlite3-dev libtool libzmq3-dev pkg-config python3 qttools5-dev qttools5-dev-tools qtwayland5 systemtap-sdt-dev

Si te da error la instalación, ¿puede ser que no hicieras sudo apt update al inicio?
Descargar Bitcoin Core y SP:
Descargar el código fuente de Bitcoin Core clonando su repositorio de git:
cdgit clone https://github.com/bitcoin/bitcoin.git
Entramos al directorio recién descargado
cd bitcoin/src
Entonces le damos a
git fetch origin pull/28453/head:silent-payments-testing-branchgit checkout silent-payments-testing-branch
Y con esto ya podemos compilar. Para, volvemos a la carpeta ~/bitcoin
cd ..
Y compilamos con 3 comandos:
./autogen.sh./configuremake<- En lugar de esto te recomiendo el siguiente comando
TE RECOMIENDO para utilizar todos los cores de tu ordenador:
make -j "$(($(nproc) + 1))"
Cuando termine nos quedará copiar los binarios al directorio de test que hemos creado antes:
cp ~/bitcoin/src/bitcoind ~/silent-payments-testing/bin/cp ~/bitcoin/src/bitcoin-cli ~/silent-payments-testing/bin/
Acto seguido entramos en la carpeta de testeo de los Silent Payments:
cd ~/silent-payments-testing
Y tecleamos
init signet
Entonces veremos un mensaje del estilo:

Si no lo vieramos es que tenemos un problema con direnv.
Primeros pasos con Bitcoin Core Signet SP
Con esto ya tendremos a direnv+bendir trabajando y ejecutando comandos de forma simplificada que siempre apuntarán a signet (sin necesidad de indicárselo cada vez). Con lo que ahora ya podemos arrancar Bitcoin core:
bitcoind -daemon
Crear Wallet:
Crearemos la wallet de nombre «sp» con el siguiente comando:
bitcoin-cli createwallet "sp" silent_payments=true
Ahora querremos añadir fondos a nuestra wallet con los que poder operar y testear los Silent Payments. Para ello vamos a necesitar una dirección donde recibir. La creamos con:
bitcoin-cli getnewaddress- > tb1qyf7vrsjy2y0w8uwj2m4d953c5kz29z5u052rlx
Si queremos una address taproot haremos
bitcoin-cli getnewaddress "" "bech32m"
Para recibir monedas a esta dirección podemos utilizar un «faucet» o «grifo» de satoshis de signet. Abajo, en la sección de recursos he dejado algunos links de faucets pero puedes ir directamente y usar este:
Seguimos el procedimiento (ponemos la cantidad y nuestra dirección) y esperamos a que nos lleguen. Para ver si has recibido las monedas:
- bitcoin-cli getbalance
En mi caso el balance me daba 0.00000000 y eso era porque la cadena de bloques no se me había sincronizado (la sincronicé en una sentada tomando café con datos del móvil. No tarda más de 5 min), y me di cuenta cuando ejecuté:
bitcoin-cli getblockchaininfo
Con el nodo signet ya sincronizado sí que me encontraba las monedas:

Todo listo para adentrarnos a los Silent Payment o «Pagos silenciosos» 🤫
Silent payments
Para empezar vamos a necesitar una dirección «silenciosa» o Silent Payment Address para poder recibir fondos (que por ahora nosotros mismos vamos a enviar).
Para generar una Silent Payment Address ejecutamos el siguiente comando:
bitcoin-cli getnewaddress address_type="silent-payment"
Con este comando le estamos pidiendo a nuestra billetera que nos cree una dirección tipo «silent-payment», que se convertirá en un nuevo formato de dirección.

¡Et Voila! Así creo mi primerai Silent Payment Address:
tsp1qqteqg3kltrqslyme5g3h9n7pgpra0cyf08kleg5vcj9gdkyhyzspjq3zr6x5j3aycvvfrr96lldseexcchtvsu3xrxp7wkzpkk6ekuk2957acw8x
Si fuera de mainnet empezaría por las letras «sp» y un total de 117 caracteres (aunque podría crecer en futuras versiones).
Ahora vamos a enviarnos bitcoin a nosotros mismos fondos: del utxo que hemos recibido de 0,01 sBTC a la Silent Payment Address. Y para hacerlo utilizaremos el comando RPC sendtoaddress. Lo construimos de la siguiente forma:
bitcoin-cli sendtoaddress "address" amount
En mi caso:
bitcoin-cli sendtoaddress "tsp1qqteqg3kltrqslyme5g3h9n7pgpra0cyf08kleg5vcj9gdkyhyzspjq3zr6x5j3aycvvfrr96lldseexcchtvsu3xrxp7wkzpkk6ekuk2957acw8x" 0.00215193
Pues bien, esto que debería funcionar, no me funcionaba pq tanto en signet como en regtest la opción de fallbackfee viene desactivada y hay que darle alguna información sobre la fee que queremos usar:

La solución es fijarle una fee de tx antes de enviarla con:
bitcoin-cli settxfee 0.00001
Y con esto, ahora sí que podemos realizar nuestro pago silencioso:

Y así, esta txid que te entrega el comando de pago una vez se ha realizado se convierte en mi primer Silent Payment 🙂
TXID:
810121fc658b7f6b16d4fdfe0a35df539805f437d7682d929bdaff01de0a2a9e
Silent Payment Address con las que testear envíos
Orbe
- tsp1qq00glmn5tjyl6manfwqhhr9c6qgydzhs48yjpwjrm8k0zanm4veuqqn0npayezar59wuralwsmrfua27668jq25qrx5upl08tvnnynsrwvn94sn7
West
- tsp1qqw6n64s44vgdppn47nfrs8rwvujfxu2qw5rtvnmrmyfdpu0zacaakq37uwu6dcmjvx30kctck2m3jnfwvrtdc2wqdlc5rjd398hkx6e90q8jy44w
Jorg2140
- tsp1qqvr3f5cq8zu7fpfy5wm84jgpva3yzcwrft7gt03dc0fsp6q9cx2zuqhyhv72260ujz84x84hmwg4at46t520w7tsq3dlgdpvpkskqukevyw0juel
Y mi Silent Address 🙂
tsp1qqteqg3kltrqslyme5g3h9n7pgpra0cyf08kleg5vcj9gdkyhyzspjq3zr6x5j3aycvvfrr96lldseexcchtvsu3xrxp7wkzpkk6ekuk2957acw8x
Recursos de interés
Comandos
Wallet
Para ver qué wallets tienes creadas
bitcoin-cli listwalletdir
Para cargar una wallet concreta
bitcoin-cli loadwallet "nombre_la_wallet"
Si te da el error de «fallbackfee» puedes fijar una antes de enviar una tx así
bitcoin-cli settxfee 0.00001
Envíar bitcoin
- b
itcoin-cli sendtoaddress(más información de sus campos aquí)
Ver los UTXOs que tienes
bitcoin-cli listunspent
Ver el balance que tienes en la wallet
bitcoin-cli getbalance
Ver el balance que tienes sin confirmar en la billetera
bitcoin-cli getunconfirmedbalance
Ver las direcciones utilizadas
bitcoin-cli listaddressgroupings
Recursos Signet
Faucets:
Explorador:
Referencias
WIP BIP 352 de Josie Bake y Ruben Somsen
Guía de Josie Bake para instalar un nodo de Signet:
Bendir de Josie:
Guía para compilar Bitcoin Core de Jon Atack:
Instalar un nodo de Signer por Michael Folkson:
Sobre el fallbackfee en regtest y signet:
Crear una tx con coin control en bitcoin core wallet por línea de comando:

Entusiasta Bitcoin. Conecto con personas de habla hispana con perfil propio dentro del mundo Bitcoin y comparto su valor en mi podcast semanal y twitter.
¿Te ha sido útil esta madriguera? Puedes apoyarme con una tip bitcoin o LN . | 2515 4D1C 6C36 C024

