Indirizzo in formato 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 • ‎русский • ‎українська

Con l'introduzione della versione 1.0.1 del software Nxt, è stato aggiunto il supporto agli indirizzi in formato Reed-Solomon. È il formato usato di default per il client ufficiale.

Gli indirizzi espressi in questo formato migliorano la leggibilità creando ridondanze che possono rilevare e correggere errori durante la digitazione e l'uso di account Nxt.

Questi indirizzi hanno sempre questa forma:

NXT-XXXX-XXXX-XXXX-XXXXX

... dove X è una lettera o un numero non ambiguo (lettere come O e I non sono usate; e non lo sono nemmeno numeri come 0 e 1). Tutti gli indirizzi sono prefissati con "NXT-", e il trattino è usato per separare l'indirizzo in gruppi di 4, 4, 4 e successivamente 5 caratteri. Gli indirizzi NON fanno distinzione fra maiuscole e minuscole.

1 Contesto

Il formato di default per un account Nxt è una stringa da 64-bit completamente composta da numeri, ed è derivata dalla chiave privata dell'account. I primi utilizzatori di Nxt si sono lamentati che il formato era soggetto ad errori, in quanto a più riprese lo sbaglio di un singolo carattere ha come risultato l'invio di fondi all'account sbagliato.

Il codice di correzione degli errori Reed-Solomon risolve questo problema introducendo delle ridondanze negli indirizzi. Altre possibilità sono state considerate (hash MD5, somme di controllo, etc) tuttavia il formato Reed-Solomon è stato scelto per le ragioni seguenti:

  • il tasso di collisione è lo stesso dell'indirizzo col formato di default;
  • il sistema di correzione degli errori può essere usato per assistere l'utente nella digitazione degli indirizzi;
  • alcuni linguaggi di programmazione non hanno funzioni native per l'hashing MD5 e l'implementazione Reed-Solomon è più semplice che l'MD5.

2 = Benefici degli indirizzi Reed-Solomon

  • La probabilità di una collisione casuale degli indirizzi, utilizzando l'implementazione di 4 "bits di controllo" per Nxt, è di 1 in un milione (ridondanza a 20-bit)
  • Permette fino a 2 errori (di battitura) di essere corretti.
  • Permette fino a 4 errori (di battitura) di essere individuati.
  • L'indirizzo è sempre di 17 caratteri, ed è sempre prefissato con "NXT". Questo rende l'indirizzo facilmente riconoscibile e identificabile in quanto appartenente a Nxt.
  • L'implementazione C++, PHP e JavaScript può essere trovata su: https://drive.google.com/file/d/0B7kbeA6whDvNWVczbEtvQ1YtZGc

3 Codifica degli indirizzi Reed-Solomon di Nxt

  • L'uso di maiuscole o minuscole non sono forzate, tuttavia per coerenza tutti gli indirizzi sono mostrati usando lettere maiuscole.
  • Gli indirizzi sono separati in gruppi di quattro caratteri e un gruppo finale di 5 usando dei trattini, tuttavia questo non è forzato durante l'inserimento dei caratteri.
  • Il vecchio indirizzo numerico è ancora riconosciuto e supportato per retrocompatibilità

Esempi di indirizzi RS:

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

4 Dettagli Tecnici

La prima e più importante regola è che un metodo di correzione degli errori infallibile non esiste: Non fare totale affidamento alla correzione degli errori, punto.

Il problema è in qualche modo contro intuitivo: o fai una sorta di controllo si/no della validità dell'indirizzo, che ti darebbe una collisione ogni milione, oppure provi a correggere gli errori. Non puoi avere entrambe.

Il problema sta nel fatto che l'algoritmo Reed-Solomon garantisce una correzione fino ad un massimo di 2 errori. Se ve ne sono di più nell'indirizzo, ne produce dei falsi positivi con una probabilità di circa 10% e le transazioni saranno inviate all'indirizzo sbagliato.

Considera l'algoritmo come un sistema che stima la presenza di errori, e che assiste l'utente a trovarli.

Gli indirizzi Reed-Solomon (RS) per Nxt sono codificati come segue:

  1. Prendi i 64-bit dell'account ID originale, aggiungi 1 bit zero per ottenerne 65 e successivamente dividilo in tredici "simboli" da 5-bit (65 / 5 = 13).
  2. Ordina i simboli dal bit minore al maggiore, in little-endian, i.e. bits 0-4, 5-9, 10-14, etc fino a 60-64.
  3. Aggiungi 4 simboli di parità (20 bits), produci la codifica Reed-Solomon dei 13 simboli del punto uno (che non vengono toccati). Questo produce una parola in codice di 13 + 4 = 17 simboli.
  4. Mescola i simboli della parola in codice in un ordine predefinito e codificali 1-a-1 con un alfabeto di 32 caratteri, dividendoli in gruppi usando i trattini.