Glosario / Referencia para desarrolladores
URI de Bitcoin
También se conoce como BIP21.
- ¿Qué es un URI de Bitcoin?
- Un URI de Bitcoin reúne los datos de un pago en una cadena de caracteres sobre la que se puede hacer clic; empieza por bitcoin: y puede llevar una dirección, un monto y una etiqueta.
Se especifica en el BIP-21.
Un URI de Bitcoin es un enlace, y al hacer clic en él se abre su billetera con el pago ya rellenado. El BIP21 estableció el formato el 29 de enero de 2012: el esquema bitcoin:, una dirección y, después, parámetros opcionales tras un signo de interrogación. Recibir uno en lugar de una dirección sin más saca el monto de la lista de cosas que usted tiene que copiar correctamente.
Cómo funciona
La gramática del BIP21 es deliberadamente pequeña, y esa es la principal razón de que el formato haya sobrevivido sin cambios durante más de una década.
Un URI completo tiene este aspecto: bitcoin:bc1q...w5mdq?amount=0.00042&label=Coffee%20Shop&message=Order%20118. Todo lo que hay entre los dos puntos y el signo de interrogación es la dirección de destino. Todo lo que va detrás es un conjunto de pares name=value unidos por el signo &, y el BIP21 solo define tres:
- El parámetro
amountes un número decimal de bitcoin, nunca de satoshis, escrito con punto y sin comas ni símbolo de moneda.amount=0.01significa una centésima de bitcoin, es decir, 1.000.000 satoshis. - El parámetro
labelnombra al beneficiario, como una tienda o una persona. - El parámetro
messageindica para qué es el pago.
Los dos campos de texto van en UTF-8 con codificación porcentual, así que un espacio se convierte en %20 y un signo & dentro de una etiqueta se convierte en %26.
Dos reglas mantienen el formato extensible. Los parámetros desconocidos se ignoran, lo que permite a una billetera antigua leer un URI nuevo sin atragantarse. Los parámetros con el prefijo req- son la excepción: una billetera que no entienda uno debe rechazar el URI entero en lugar de adivinar qué pretendía hacer. Esa sola regla es todo el mecanismo de actualización, y desde entonces ha absorbido todas las extensiones sin romper el software más antiguo.
Esas extensiones son donde vive realmente el formato hoy:
- El parámetro
r=, añadido por el BIP72, apuntaba a una solicitud de pago BIP70. Esa ruta está muerta. - El parámetro
pj=, del BIP78, nombra un endpoint de PayJoin para que pagador y beneficiario puedan construir juntos una transacción colaborativa. - El parámetro
lightning=lleva una factura BOLT11 junto a la dirección on-chain. Las billeteras que lo entienden pagan por Lightning, las que no lo entienden recurren a la dirección como alternativa, y las páginas de pago de los comerciantes imprimen el resultado como un único código QR unificado. - El BIP353 publica un URI completo dentro de un registro TXT firmado con DNSSEC bajo la etiqueta
_bitcoin-payment, de modo que un nombre legible por humanos se resuelve en instrucciones de pago.
La dirección en sí es opcional. La gramática del BIP21 permite cero caracteres de dirección, que es como funcionaba bitcoin:?r=... y como funciona hoy un URI que solo lleva una oferta.
Por qué importa cuando compra bitcoin
El momento en que más importa un URI de Bitcoin es el retiro, cuando las monedas salen de un exchange que usted no controla y llegan a un lugar que sí controla.
Casi todos los exchanges que cubre este sitio, desde Kraken y River hasta Relai y Bitpanda, le dan un simple cuadro de texto para la dirección de destino. Ese cuadro espera la dirección, no el URI. Si pega bitcoin:bc1q... en él, normalmente obtendrá un error de validación y, de vez en cuando, un campo truncado sin aviso y un retiro fallido. Tome lo que hay entre los dos puntos y el signo de interrogación, y pegue solo eso.
El tráfico también circula en sentido contrario. La pantalla de recepción de su propia billetera de hardware, la página de pago de un comerciante y una operación entre pares le entregan URI en lugar de direcciones sin más. Un URI es más seguro exactamente en un aspecto: el monto viaja con él, así que usted no puede escribir mal el total. No es más seguro en el aspecto que más importa. Nada de lo que contiene un URI está firmado. El campo label es texto libre elegido por quien construyó la cadena de caracteres, así que una página de phishing puede escribir label=Kraken%20Withdrawal y su billetera mostrará esas palabras sin comentario alguno.
Por eso la pantalla de la billetera de hardware es el control que cuenta. Diga lo que diga un URI, un dispositivo de firma le muestra la dirección a la que está a punto de pagar en una pantalla que el malware de portapapeles no puede reescribir. Compare allí los caracteres iniciales y finales, en el dispositivo, no en la pestaña del navegador que generó el enlace.
Un ejemplo práctico: pagar la factura de una cafetería
Suponga que una caja registradora imprime un código QR y su teléfono lee bitcoin:bc1q...w5mdq?amount=0.00042&label=Kaffeehaus&message=Table%207.
Su billetera extrae de ahí tres datos: pagar 0,00042 bitcoin, enviarlo a esa dirección y mostrar las palabras Kaffeehaus y Table 7 en la pantalla de confirmación. Después hace varias cosas que el URI nunca pidió. Elige cuáles de sus UTXO gastar, estima una comisión por vB a partir de su propia visión de la mempool, añade una salida de cambio y espera su aprobación.
Lo que no hace es verificar nada sobre el destinatario. No ha comprobado que la tienda controle la dirección, que 0,00042 bitcoin sea el precio acordado ni que la etiqueta sea honesta. Esas comprobaciones le corresponden a usted. En un café, lo que se arriesga es perder un café. En una transferencia de cinco cifras, vale la pena leer la dirección en el dispositivo de firma, en grupos de cuatro caracteres, antes de aprobar.
URI de Bitcoin frente a dirección de bitcoin
Una dirección es el destino por sí solo, sin instrucciones adjuntas. Una dirección bech32 moderna llega a 42 caracteres para una salida SegWit de una sola clave y a 62 para una salida Taproot, y no dice nada sobre cuánto enviar ni a quién. Un URI es un contenedor: una dirección más un monto, una etiqueta y un mensaje opcionales. Siempre se puede recuperar la dirección de un URI leyendo el texto entre el esquema y el primer signo de interrogación. No se puede ir en sentido contrario, porque, para empezar, una dirección nunca llevó un monto.
URI de Bitcoin frente a factura BOLT11
Una factura BOLT11 es el equivalente en Lightning, y se comporta de forma distinta en tres aspectos que importan. Es de un solo uso, fija un hash de pago en lugar de una dirección y expira, por defecto a los 3.600 segundos cuando el comerciante no establece ningún valor. Un URI de Bitcoin nunca expira y se puede pagar dos veces, lo que es una ventaja en una página de donaciones y un peligro en una factura. El código QR unificado evita tener que elegir al poner una cadena de caracteres BOLT11 dentro del parámetro lightning= de un URI corriente, lo que deja que cada billetera tome la vía que admite.