¿Qué es un conversor de direcciones de Bitcoin Cash?
Un conversor de direcciones de Bitcoin Cash traduce una misma cuenta BCH entre sus dos formas de escritura: la forma CashAddr bitcoincash:q… / p… definida en la especificación CashAddr, y la forma legacy Base58Check 1… / 3… heredada de Bitcoin. Ambas contienen el mismo hash de 160 bits de una clave pública (P2PKH) o de un script (P2SH); solo cambian la codificación y el checksum.
Cómo funciona la codificación CashAddr
- Byte de versión. Un byte cuyos bits superiores indican el tipo (0 = P2PKH, 1 = P2SH) y cuyos tres bits inferiores codifican el tamaño del hash (0 = 160 bits, 3 = 256 bits).
- Reagrupación en 5 bits. El byte de versión y el hash se concatenan y se vuelven a cortar en grupos de 5 bits, rellenados con bits cero, exactamente como hace bech32.
- Checksum. Se calcula un código BCH de 40 bits sobre el prefijo expandido (los 5 bits inferiores de cada carácter, seguidos de un cero), el payload y ocho grupos cero, usando las constantes generadoras 0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8 y 0x1e4f43e470. Los ocho grupos del checksum se añaden al final.
- Alfabeto. Cada grupo se escribe con el conjunto de 32 caracteres
qpzry9x8gf2tvdw0s3jn54khce6mua7l, por lo que la cadena nunca contiene 1, b, i ni o.
Ejemplo práctico
El primer vector de la especificación es 1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu. La decodificación Base58Check da la versión 0x00 (P2PKH) y el hash160 76a04053bda0a88bda5177b86a15c3b29f559873. Al anteponer el byte de versión CashAddr 0x00, reagrupar en valores de 5 bits y añadir el checksum se obtiene bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a. La variante P2SH del mismo hash empieza por 3 en forma legacy (3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC) y por p en CashAddr (bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq). Pega cualquiera de ellas arriba para ver la conversión en vivo.
Formatos de un vistazo
| Forma | Ejemplo | Checksum | ¿Se distingue de BTC? |
|---|---|---|---|
| Legacy P2PKH | 1…, 26–35 caracteres | 4 bytes de doble SHA-256 | no |
| Legacy P2SH | 3…, 34 caracteres | 4 bytes de doble SHA-256 | no |
| CashAddr P2PKH | bitcoincash:q…, 42 caracteres tras el prefijo | polymod de 40 bits | sí |
| CashAddr P2SH | bitcoincash:p…, 42 caracteres | polymod de 40 bits | sí |
| CashAddr P2SH-32 | bitcoincash:p…, 62 caracteres | polymod de 40 bits | sí, sin forma legacy |
| Testnet | bchtest:q… o m… / n… / 2… | igual | solo por el prefijo |
Por qué importa la advertencia de legacy
Los exchanges todavía muestran direcciones legacy para los depósitos de BCH, y los usuarios siguen pegando direcciones de Bitcoin en formularios de retiro de BCH. Como los bytes son idénticos, una transacción BCH a la dirección 1… de un usuario de Bitcoin es válida y se confirma en la cadena de Bitcoin Cash, donde la billetera del destinatario nunca mira. Las monedas no se destruyen, pero solo quien tenga esa clave privada puede recuperarlas con una billetera BCH, y la mayoría de los destinatarios no tiene idea de cómo hacerlo. Convertir todas las direcciones a CashAddr antes de enviar elimina la ambigüedad: una billetera que acepta bitcoincash: es una billetera BCH.
Usos habituales
- Convertir una dirección de depósito legacy de un exchange antiguo a la forma CashAddr que esperan las billeteras modernas y el generador de QR de pago.
- Comprobar si una cadena
q…pegada sin su prefijo es de mainnet o debchtest. - Extraer el hash160 para construir o verificar un script, o para comparar dos formas de escritura de la misma dirección.
Para Bitcoin en sí usa el validador de direcciones de Bitcoin; para cadenas bech32 genéricas, el codificador / decodificador bech32.