Saltar al contenido
buybitcoinsmart

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 amount es un número decimal de bitcoin, nunca de satoshis, escrito con punto y sin comas ni símbolo de moneda. amount=0.01 significa una centésima de bitcoin, es decir, 1.000.000 satoshis.
  • El parámetro label nombra al beneficiario, como una tienda o una persona.
  • El parámetro message indica 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.

No confundir con

Preguntas frecuentes

¿Puedo pegar un URI bitcoin: en el campo de retiro de un exchange?

Normalmente no. La mayoría de los formularios de retiro esperan una dirección sin más y rechazarán o truncarán cualquier cosa con el prefijo bitcoin:. Copie solo el texto entre los dos puntos y el primer signo de interrogación, y luego compruébelo con la pantalla de recepción de su billetera.

¿El monto de un URI bitcoin: está en bitcoin o en satoshis?

En bitcoin. El BIP21 especifica un número decimal de bitcoin, así que amount=0.01 es una centésima de bitcoin, o 1.000.000 satoshis. Los campos del protocolo de pago y las facturas Lightning usan en cambio satoshis y milisatoshis, lo que es una fuente habitual de errores de unidad.

¿Un URI bitcoin: demuestra a quién estoy pagando?

No. Nada de lo que contiene un URI BIP21 está firmado ni verificado, y la etiqueta es texto libre que aporta quien creó el enlace. Confirme la dirección de destino en la propia pantalla de su billetera de hardware antes de aprobar nada.

Para seguir leyendo

Términos relacionados

Más en la sección Referencia para desarrolladores

Leer esta página en inglés