Formato de Dirección RS

From Nxt Wiki
Jump to: navigation, search
This page is a translated version of the page RS Address Format and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎русский • ‎українська

Desde la versión 1.0.1 del software de Nxt, el uso de direcciones Reed-Solomon para las cuentas Nxt está soportado. Es el formato por defecto en el cliente oficial.

Esta forma de dirección es más fiable gracias a la introducción de redundancia que puede detectar y corregir errores al utilizar números de cuenta Nxt.

Estas direcciones siempre siguen el siguiente formato:

NXT-XXXX-XXXX-XXXX-XXXXX

... donde X es un número no ambiguo o un caracter alfabético (no se emplean las letras O e I, ni los números 0 y 1). Las direcciones siempre incluyen el prefijo "NXT-", y se utilizan guiones para separarlas en grupos de 4, 4, 4, y al final 5 caracteres. Las direcciones NO distinguen entre mayúsculas y minúsculas.

1 Antecedentes

El formato original de los números de cuenta Nxt es un identificador numérico de 64 bits que deriva de la clave privada de la cuenta. Los usuarios iniciales de Nxt apuntaron que este formato era proclive a errores, ya que un solo número mal apuntado resultaba en transacciones accidentalmente enviadas a la cuenta equivocada.

Los códigos Reed-Solomon para corrección de errores solucionan este problema añadiendo redundancia a las direcciones. Se consideraron otras opciones (hashes MD5, dígitos de suma, etc.) pero se optó por el formato Reed-Solomon porque:

  • la frecuencia de colisiones es la misma que en el formato de dirección original;
  • el sistema de corrección de errores básico puede emplearse para ayudar a los usuarios a la hora de escribir direcciones;
  • algunos lenguajes de programación carecen de función de hashing MD5 nativa, y la implementación de Reed-Solomon es más sencilla que la de MD5.

1.1 Beneficios de las direcciones Reed-Solomon

  • La probabilidad de una colisión al azar entre direcciones, usando la implementación en Nxt de 4 "check-bits", es de 1 entre un millón (redundancia de 20 bits).
  • Permite la corrección de hasta 2 errores en la dirección.
  • Garantiza que se puedan detectar hasta 4 errores.
  • La longitud de la dirección siempre es de 17 caracteres, y siempre incluye el prefijo "NXT". Esto hace que las direcciones sean fácilmente reconocibles como pertenecientes a Nxt.
  • Implementaciones en C++, PHP, y JavaScript están disponibles en: https://drive.google.com/file/d/0B7kbeA6whDvNWVczbEtvQ1YtZGc

2 Codificación de las direcciones Nxt Reed-Solomon

  • El uso de mayúsculas no es obligatorio, pero por unidad todas las direcciones se muestran en mayúsculas.
  • Las direcciones están divididas en grupos de 4 caracteres separados por guiones, con un grupo final de 5 caracteres, pero esta separación no es obligatoria a la hora de introducir una dirección.
  • Las direcciones numéricas antiguas son reconocidas y soportadas para mantener la compatibilidad retroactiva.

Ejemplos de direcciones RS:

NXT-3DH5-DSAE-4WQ7-3LPSE
NXT-K4G2-FF32-WLL3-QBGEL

3 Detalles Técnicos

La primera regla, y la más importante, es que no hay ningún método infalible para corrección de errores: No puedes basarte en la corrección de errores, y punto.

El problema no es muy intuitivo: puedes o bien hacer una verificación de la validez de la dirección, lo que devuelve una colisión entre un millón, o puedes intentar corregir los errores. Pero no ambas cosas.

El problema es que el algoritmo Reed-Solomon sólo garantiza la corrección de 2 errores como máximo. Si hay más de dos errores presentes al introducir una dirección, producirá falsos positivos con una probabilidad de alrededor del 10% y las transacciones seguirán siendo enviadas a direcciones incorrectas.

Piensa en el algoritmo como capaz de adivinar errores, y de asistir a los usuarios a la hora de detectarlos.

Los direcciones Reed-Solomon (RS) en Nxt están codificadas del modo siguiente:

  1. Coge la ID de cuenta de 64 bits original, añade 1 bit cero para tener 65, y divídela entre trece "símbolos" de 5 bits (65 / 5 = 13).
  2. Ordena los símbolos del bit más bajo al más alto, en orden little-endian, p.ej. bits 0-4, 5-9, 10-14, etc. hasta los 60-64.
  3. Añade 4 símbolos de paridad (20 bits), producidos por la codificación Reed-Solomon de nuestros 13 símbolos del primer paso (que se dejan intactos). Esto produce una palabra código de 13 + 4 = 17 símbolos.
  4. Baraja los símbolos de la palabra código en un orden predefinido y codifícales 1 a 1 con un alfabeto de 32 caracteres, dividiéndolos en grupos separados por guiones.