Documento Tecnico Zerocoin (zPIV) PIVX

Revisione 0.9

Ultimo aggiornamento 16 ottobre 2017

PIVX – INFORMAZIONI GENERALI

PIVX è una criptovaluta basata su Bitcoin, sulla sua community e particolarmente focalizzata su decentralizzazione, privacy e utilizzo nel mondo reale. PIVX è un protocollo Proof of Stake ad alta efficienza energetica, con un network di Masternode di secondo livello per una governance inclusiva, la cui sostenibilità è garantita da un sistema di autofinanziamento basato su blockchain.

PIVX è impegnato per implementare costantemente il sistema di governance, le transazioni private istantanee e la fungibilità, per rimanere la principale criptovaluta di nuova generazione.

In altre parole, PIVX è una moneta digitale online che può essere trasferita velocemente e con facilità in tutto il mondo, con commissioni di transazione quasi inesistenti. È possibile convertire il proprio denaro in PIVX in vari exchange e attendere di guadagnare, come succede per gli interessi; vendere su un exchange per acquistare altre valute digitali; oppure acquistare beni o servizi online e offline, dove questo tipo di transazioni sono accettate.

Non è di proprietà o gestito da una singola persona o organizzazione ed è un network protetto da migliaia di nodi in tutto il mondo.

L’obiettivo di PIVX è di essere una valuta digitale innovativa: veloce, sicura, decentralizzata e privata.

PRIVACY NELLE TRANSAZIONI DELLA CRIPTOVALUTA

Gran parte delle criptovalute più comuni, come il Bitcoin, utilizzano il noto sistema di public ledger, in cui tutte le transazioni sono visibili e tracciabili tramite il block explorer. Di conseguenza, chiunque ha la possibilità di vedere non solo tutte le transazioni e i saldi, ma addirittura gli indirizzi associati a tali transazioni. Ciò significa che la cronologia del proprietario dell’indirizzo precedente è visibile una volta che le monete hanno passato la blockchain e arrivano nel wallet.

Un indirizzo può sembrare totalmente anonimo, ma se si effettua una transazione con un indirizzo generato dagli exchange e/o da altri servizi commerciali, fondamentalmente lo collega con un indirizzo che potrebbe rivelare la propria identità.

Nella maggior parte dei casi, questa trasparenza potrebbe non essere un problema; potrebbe invece diventarlo  se la moneta che si ha in mano è stata associata a un evento poco gradevole o se il proprio indirizzo è stato preso di mira e quindi soggetto a potenziali furti.

Per esempio, se il pagamento ricevuto proviene da un indirizzo di proprietà di una persona o organizzazione che ha svolto attività illegali e quindi monitorato dalle autorità governative, potrebbero sorgere dubbi su eventuali rapporti con il proprietario precedente, pur avendo ricevuto il denaro legittimamente e all’oscuro di tali attività. Ciò potrebbe anche significare che le monete che hanno questi precedenti possano avere un valore inferiore rispetto a quelle “pulite”, acquisendo una ridotta fungibilità.

LA NOSTRA SOLUZIONE: IL PROTOCOLLO ZEROCOIN (zPIV)

Per risolvere questo problema, a partire dall’aggiornamento del core wallet v3.0.0 pubblicato il 7 ottobre 2017, PIVX ha sviluppato Zerocoin, un protocollo altamente controllato con molti miglioramenti personalizzati e che consente anonimato e non tracciabilità delle transazioni a livello di blockchain.

Ed ecco lo zPIV, dove PIV è un’unità di PIVX e il prefisso z sta per Zerocoin.

zPIV fornisce un servizio di mixing sul protocollo, che utilizza il sistema zero knowledge proof (prova a conoscenza zero) per scollegare mittente e destinatario, in totale anonimato e non tracciabilità. Ciò significa che ogni moneta inviata usando zPIV è ora fungibile al 100%, poiché non può essere collegata a transazioni precedenti.

Con zPIV è inoltre possibile oscurare il saldo, per evitare di essere oggetto di potenziali furti: una caratteristica unica, che quasi nessun’altra criptovaluta offre attualmente sul mercato.

Gli accumulatori PIVX zPIV sono crittografati utilizzando chiavi generate con RSA-2048 [1]; per questo non è necessario alcun setup iniziale e nessuno sarà a conoscenza delle chiavi di accesso. zPIV garantisce a tutti la massima privacy.

FATTORE UNICO

Al settembre 2017, PIVX era ancora l’unica criptovaluta Proof of Stake ad aver implementato e messo in pratica il protocollo Zerocoin. Pur basandosi sul codice pubblico originale libzerocoin, creato dai crittografi accademici, gran parte del codice PIVX zPIV è personalizzata, rendendo ZPIV davvero unico.

Il White Paper originale di Zerocoin si trova al seguente link: https://isi.jhu.edu/~mgreen/ZerocoinOakland.pdf

A differenza di gran parte delle altre criptovalute che attualmente utilizzano un protocollo Zerocoin, PIVX zPIV utilizza un sistema di accumulo molto efficiente: usa infatti dei checkpoint che contengono tutte le monete prodotte prima del pagamento in zPiv, oltre a un importo di zPiv selezionato dall’utente. L’accumulatore potrà quindi contenere un gran numero di monete, pur con basse azioni di calcolo. Il PIVX zPIV comporta un consumo minimo di risorse e fa in modo che le transazioni zPIV siano tra le più veloci tra quelle attualmente disponibili sul mercato.

VANTAGGI TECNICI DI PIVX zPIV

  1. Le dimensioni delle transazioni sono più piccole del 25% rispetto a qualunque altra implementazione in un ambiente di produzione. Stiamo lavorando a ulteriori miglioramenti.
  2. Verifica rapida e veloce sincronizzazione della rete
  3. Pagamento diretto in zPIV verso un indirizzo PIVX
  4. Possibilità di utilizzare denominazioni Zerocoin multiple in una singola transazione
  5. Possibilità di pagare importi esatti e inviare il resto a un indirizzo PIVX o convertirlo in zPiv.

VANTAGGI DELL’USO DI zPIV

  1. zPIV può nascondere i saldi da occhi indiscreti, proteggendo da eventuali tentativi di furto.

○      Il saldo zPIV, infatti, non è collegato ad alcun indirizzo specifico.

  1. zPIV può nascondere la cronologia dei pagamenti inviati.

○      Gli indirizzi di invio e ricezione non sono visibili e rimangono quindi privati, sicuri e fungibili.

  1. Le transazioni anonime zPIV sono estremamente veloci.

○      Bastano 0,5 secondi per generare e 2,5 secondi per pagare in zPIV.

  1. La conversione automatica in zPIV è attivata di default, pur rimanendo a disposizione l’opzione di trasferimento trasparente.

○      Sarà quindi possibile effettuare transazioni in modo trasparente, se necessario.

COME FUNZIONA L’ANONIMATO

  1. Genera (converti) i tuoi PIV in denominazioni zPIV. (Il wallet ne convertirà automaticamente alcuni di default)
  2. Spendi (invia) i tuoi zPIV come PIV a qualsiasi indirizzo di Wallet PIVX interno o esterno.

Il protocollo Zerocoin raggruppa, o combina, tutti gli zPIV che gli utenti hanno convertito (coniato) dal loro saldo PIV in determinate denominazioni, e li usa nella transazione quando ha inizio un pagamento. Si tenga presente che combinare zPIV non significa utilizzare un sistema centralizzato: piuttosto, il public ledger (blockchain decentralizzata) tiene traccia del numero di zPIV creati.

Quando si desidera inviare (spendere) un importo zPIV a un indirizzo PIVX, il wallet invia una zero knowledge proof alla blockchain, che consente ai zPIV di essere riconvertiti in PIV e inviati all’indirizzo di destinazione in un unico passaggio.

Nel caso in cui un utente fornisca una zero knowledge proof dimostrando di avere monete nell’accumulatore, zPiv crea monete nuove e la cronologia delle transazioni dai suoi indirizzi precedentemente associati viene scollegata: la transazione quindi non è tracciabile.

Infine, una semplice analogia: è sufficiente pensare a zPIV come a fiches del casinò. Consegni la tua banconota da 100 dollari (cioè PIV) al cassiere, che ti restituisce un gettone da 10, due da 20 e uno da 50 dollari (cioè zPIV). Quindi non possiedi più quella banconota da 100 dollari; hai invece “prova” di possedere ancora un valore pari a 100 dollari. Ora, se hai nuovamente bisogno di una banconota da 50 dollari (PIV), restituisci le tue fiches (zPIV) al cassiere, e il cassiere consegna a un destinatario di tua scelta una nuova banconota da 50 dollari, appena messa in circolazione.

Processo di generazione e di pagamenti zPIV

Facciamo un esempio. Kirby desidera inviare PIV a Heidi utilizzando il protocollo Zerocoin per rendere anonima la transazione.

Processo di creazione (minting)

  1. Kirby invia una richiesta per generare 960 zPIV.
  2. Il protocollo Zerocoin converte i 980 PIV di Kirby nella quantità equivalente di zPIV, usando le maggiori denominazioni zPIV disponibili.
    1. Nel frattempo, Kirby ha ricevuto la prova del possesso di tale moneta (un numero di serie univoco utilizzato dal protocollo Zerocoin per tracciare la proprietà di importi specifici zPIV).
  3. Il saldo di Kirby viene quindi aggiornato:
    1. Meno 960 PIV e più 960 zPIV.
    2. Kirby vede anche che i 960 zPIV sono composti dalle seguenti denominazioni: 1x 500 zPIV, 4x 100 zPIV, 1x 50 zPIV, 1x 10 zPIV.

Processo dei pagamenti

  1. Kirby invia un pagamento di 960 zPIV all’indirizzo PIVX di Heidi.
  2. Il protocollo Zerocoin riceve e convalida la prova segreta di Kirby, cosa che dimostra la provenienza dell’importo. Una volta usato, l’importo originale generato non potrà essere speso nuovamente.
  3. Il protocollo Zerocoin crea 960 PIV sull’indirizzo PIVX di Heidi.
    1. Heidi riceve 960 PIV da un mittente anonimo.
    2. Il saldo di Kirby viene quindi aggiornato, decurtato cioè di 960 zPIV.

Spiegazione delle denominazioni

Per migliorare l’efficienza delle transazioni, pur mantenendo un alto livello di complessità, PIVX ha sviluppato un sistema di denominatori comuni per i PIV che vengono convertiti in un pool di zPIV (in modo molto simile all’esempio del casinò).

I denominatori utilizzati da zPIV sono: 1, 5, 10, 50, 100, 500, 1000 e 5000. L’utilizzo di queste denominazioni assicura un buon equilibrio tra semplicità, fruibilità e sicurezza. Il modo migliore per ridurre la tracciabilità sarebbe quello di utilizzare solo una denominazione (cioè 1 zPIV). Tuttavia non sarebbe pratico, poiché le transazioni richiederebbero un’enorme quantità di monete.

L’uso di molte denominazioni, invece, potrebbe potenzialmente aumentare la tracciabilità diminuendo la sicurezza: per questo si è stabilito di usare 8 possibili denominazioni. Ecco il perché di questo numero chiave, che rappresenta il numero perfetto di denominazioni per effettuare il processo delle transazioni in sicurezza. Poiché il valore di PIV cambia, è ipotizzabile estendere o modificare questo numero per soddisfare le esigenze degli utenti.

Durante un pagamento in zPIV, semplicemente si avrà prova di avere una moneta con una certa denominazione che include anche altri zPIV con la stessa denominazione.

Ciò significa che tutti gli incassi in zPIV avverranno in numeri interi (il resto sarà conteggiato con importi decimali); sarà quindi impossibile collegare importi zPIV provenienti 2 indirizzi diversi mentre avvengono molte altre transazioni identiche da zPIV a PIV.

Logica di denominazione

Mentre si coniano (convertono) o spendono (inviano) zPIV, ogni algoritmo determinerà in automatico le denominazioni utilizzate.

Mentre si inviano (spendono) zPIV a un indirizzo PIVX, l’algoritmo seguente determinerà automaticamente le denominazioni utilizzate dall’utente:

1) Se si dispone dell’importo esatto, iniziare dalla denominazione più grande, per poi diminuire fino a ottenere il totale;

2) Altrimenti, ridurre le monete utilizzate (a) fino a trovare la denominazione più alta e più vicina a quella da spendere e usare quella, se disponibile, oppure (b) se non disponibile, iniziare con le denominazioni più grandi e diminuire fino a raggiungere l’importo poco più alto del valore necessario;

3) Oppure: riduci al minimo il resto. Se non si ottengono le denominazioni esatte, provare a trovare l’importo superiore a quello necessario, in modo da ridurre al minimo il numero di monete di resto.

Automint

La privacy di zPIV diventa più efficace quante più sono le denominazioni generate da molte fonti diverse. Per garantirne l’efficacia, il wallet PIVX può generare automaticamente (convertire) una quantità configurabile di PIV contenuti nel wallet in zPIV, senza dover convertire manualmente.

L’Automint si avvia all’avvio del wallet, con il wallet sbloccato (completamente o in staking) e con la blockchain sincronizzata. Quindi se il wallet è crittografato e bloccato, la funzione di automint non verrà attivata. Quando il wallet è sbloccato, non intaccherà gli UTXO precedentemente vincolati, come quelli usati a garanzia per i masternode.

– percentuale predefinita: 10%. Può essere modificata tramite interfaccia grafica o inserendo da linea di comando l’opzione `-zeromintpercentage=<n>` oppure inserendo nel file di configurazione pivx.conf  l’opzione `zeromintpercentage=<n>`, dove <n> non deve essere inferiore al 10%.

– stato predefinito: attivato. Può essere disattivato (per esempio per gli exchange) inserendo da linea di comando l’opzione `-enablezeromint=0` o sul file pivx.conf l’opzione  ‘enablezeromint=0`

L’utente può ora configurare una denominazione preferita per l’Automint tramite l’interfaccia utente, con inserendo da linea di comando l’opzione `-preferredDenom=<n>` o nel file pivx.conf `preferredDenom = <n>`, dove <n> è una delle denominazioni disponibili `1/5/10/50/100/500/1000/5000` oppure `0` (in questo modo, non si indica alcuna preferenza, lasciando che l’Automint agisca in automatico).

Se non ci sono abbastanza monete disponibili per la denominazione preferita, l’Automint attende finché non ce ne sono a sufficienza.

Ad ogni nuovo blocco:

  1. Controlla quante monete si possono generare.
    1. Sono escluse le monete in attesa e quelle bloccate (per esempio, dai masternode)
  2. Controlla la disponibilità di Zerocoin/zPIV
  3. Controlla se la percentuale è inferiore alla percentuale target

Se la percentuale è inferiore alla percentuale target:

  1. Calcola quanti PIV devono essere convertiti in zPIV, per esempio 2.015
  2. Usa la denominazione più piccola più vicina (in questo caso 1.000 PIV) e genera 1.000 zPIV
  3. Ricomincia da capo fino a quando non saranno stati generati zPIV in numero sufficiente.

Nell’esempio, il primo blocco implicherebbe la creazione di 1.000 zPIV, il successivo altri 1.000 zPIV, il terzo 10 zPIV e il quarto 5 zPIV (supponendo che nessun nuovo PIV in entrata modifichi la quantità di partenza di PIV disponibili).

Si utilizza la denominazione più piccola più vicina e solo una denominazione per blocco per una questione di performance: in questo modo non è necessario che le denominazioni esatte siano a loro volta scomposte in denominazioni esatte, ed è possibile effettuare una coniazione singola in un tempo ragionevole.

Eccezione: se è necessario generare una grande quantità di PIV, NON si userà la denominazione più alta di 5.000 PIV, ma 6.666 PIV per ottenere una distribuzione più uniforme delle denominazioni (6.666 = 5.000 + 1.000 + 500 + 100 + 50 + 10 + 5 + 1, che sono le nostre 8 denominazioni disponibili).

Processo di Automint zPIV

(basato su impostazioni predefinite)

      1. Kirby, prima del lancio del protocollo Zerocoin, aveva un saldo di 17.900 PIV. Possiede un masternode, quindi 10.000 dei suoi PIV sono conservati all’indirizzo del masternode e bloccati come garanzia. Kirby non ha usato il Coin Control per bloccare i rimanenti 7.900 PIV.
      2. Il protocollo Zerocoin è implementato.
      3. Il protocollo Zerocoin elabora individualmente ogni indirizzo come segue:
        1. Determina se le monete sono bloccate.
        2. Se le monete non sono bloccate, converte il ​​10% di PIV in zPIV.
        3. Se le monete sono bloccate, non esegue alcuna azione.
      4. Kirby vede che il suo saldo è diminuito di 790 PIV, che equivale al 10% delle sue monete non bloccate.
      5. Kirby vede anche che il suo saldo è aumentato di 790 zPIV. Dal momento che non aveva specificato alcuna preferenza di denominazione zPIV, ora ha le seguenti denominazioni disponibili da spendere:
      •      1x 500 zPIV
      •      2x 100 zPIV
      •      1x 50 zPIV
      •      4x 10 zPIV

      Livello di sicurezza della spesa

      Quando si spendono denominazioni zPIV, all’utente viene richiesto di inserire un Livello di sicurezza scegliendo tra 1 e 100. In modo indiretto, il parametro del livello di sicurezza consente all’utente di scegliere il numero di monete con cui oscurare la transazione.

      Per esempio, un livello di sicurezza pari a 1 permetterebbe l’utilizzo di tutte le monete generate nella blockchain prima che le monete siano aggiunte alla blockchain stessa, aggiungendo poi tutte le altre generate nei successivi 10 blocchi. Un Livello di sicurezza di 2 farebbe la stessa cosa, oltre ad aggiungere le monete generate nei 20 blocchi successivi. Un livello di sicurezza pari a 100 aggiungerà la quantità massima di monete fino alla fine della blockchain.

      Maggiore è il livello di sicurezza, maggiori sono il calcolo e il tempo necessari per la transazione. Sebbene richieda più tempo, è consigliabile un livello di 100 per le transazioni che richiedono il totale anonimato.

      Gestione dei resti

      Poiché zPIV è costituito da denominazioni fisse, ci saranno momenti in cui l’importo da spendere non potrà essere composto da denominazioni esistenti. Per esempio, se si ha una singola denominazione 1000 zPIV ma si desidera inviare 985 PIV a un indirizzo, ci sarà una differenza di 15 PIV che verrà restituita come resto. Questo resto può compromettere la privacy della transazione, in quanto può ricondurre al proprio indirizzo se, per esempio, il resto viene inserito in altri indirizzi PIVX personali.

      A questo riguardo, ci sono 2 possibilità. La prima opzione è quella di usare la funzione integrata che converte automaticamente il resto in zPIV. In questo modo, gli zPIV verranno spesi come PIV sull’indirizzo di destinazione, e il resto verrà generato in zPIV. Questo è il metodo più comodo. Tuttavia, l’importo del resto che non è convertibile in una denominazione (la più bassa denominazione disponibile è 1) sarà convertito in commissione.

      La seconda opzione è quella di inviare il resto a un indirizzo PIVX standard, che permetterà di gestire la suddivisione di quel Piv dal tuo saldo PIV. Questa opzione, più complessa, può indurre a errore e non è raccomandata se è importante che la transazione sia anonima.

      Integrità dei dati zPIV

      Ogni denominazione zPIV generata è associata a un numero di serie univoco memorizzato nel wallet.dat locale e non nella blockchain. Ciò significa che prima di generare una nuova denominazione zPIV, è necessario effettuare un backup del wallet.dat, in quanto il backup precedente non avrà i numeri seriali per le denominazioni zPIV appena create.

      Il numero di serie e altri dati zPIV fondamentali vengono inviati al database (wallet.dat) prima che la transazione sia completata e inviata alla rete. Questo riduce al minimo il rischio di perdere le denominazioni zPIV appena generate a causa imprevisti nella fase di creazione zPIV, come un blocco del computer o problemi di connettività Internet.

      Essendo un database locale, è assolutamente necessario eseguire un backup del wallet ogni volta che si generano nuovi zPIV, per garantire che i numeri di serie della denominazione siano aggiornati.

      Specifiche tecniche (v1.0)

      Caratteristiche principali: Sistema personalizzato di checkpoint dell’accumulatore

      Crittografia dell’accumulatore: RSA-2048

      Denominatori zPIV:1, 5, 10, 50, 100, 500, 1000, 5000

      Tempo di generazione: > = 0,5 secondi

      Tempo di spesa: > = 2,5 secondi

      Limite massimo spesa singola: 35.000 PIV

      Limite massimo di spesa denominatore: 7

      Dimensione del blocco: 2 MB (era 1 MB prima del wallet zPIV v3.0.0)

      Commissioni (creazione): 0,01 PIV per denominazione zPIV generata.

      Commissioni (spesa): Nessun costo per convertire zPIV in PIV.

      Numero minimo di conferme PIV richiesto per generare zPIV: 6

      Numero minimo di conferme zPIV richiesto prima della spesa: 20

      Requisiti aggiuntivi prima di un pagamento in zPiv: 3 monete da aggiungere all’accumulatore.

      Autori

      Scritto da: jakiman, 4ml

      Contributo tecnico di: spock, presstab, fuzzbawls, mrs-x

      REFERENZE

      [1] https://en.wikipedia.org/wiki/RSA-2048

FAQ

1. So is zPIV a new coin? Is this effectively a coin swap?

No. zPIV is not a new coin. It is a protocol-level pooling of existing PIV using zero-knowledge proofs.

2. Will I lose or affect my coins?

No. You will not lose your coins whatsoever (except for any fees associated with minting). However, as part of the zPIV pooling using everyone’s wallet to increase its complexity, it will convert 10% of your PIV into zPIV within your own wallet. You are free to spend that zPIV back to your PIV address to keep it in PIV if desired. No. You will not lose your coins whatsoever. However, as part of the zPIV pooling using everyone’s wallet to increase its complexity, it will convert 10% of your PIV into zPIV within your own wallet. You are free to spend that zPIV back to your PIV address to keep it in PIV if desired.

3. How does it work with exchanges such as Bittrex?

As zPIV is sent only as PIV when sending to an address, there is zero incompatibility with any existing exchanges. zPIV is used within your own desktop wallet only to increase transaction privacy. The actual coin transfers and PIV balance will always be under your control.

4. Can I stake my zPIV balance?

Unfortunately, zPIV staking is not available currently but it is under consideration for future revisions.

5. Do I have to use zPIV?

No. You can use your PIV balance and transfers just like now without using zPIV.

6. Why are zPIV minted in different denominations?

Denominations are used to help keep things more anonymous. Imagine if you created 6543.123456 zerocoins and then soon after someone else received 6543.123456 PIV. It’s very likely that you are the one paying the amount. By using a limited number of zerocoin denominations (currently 8), you’ll never see amounts like that and thus less likely be identified. For maximum anonymity, only 1 zerocoin denomination would be used – say equivalent to 1 PIV for example. However, that would make transactions very difficult since you’d have to pack up 20 separate 1 zPIV codes into a transaction if you wanted to pay 20 zPIV, versus simply using 2 codes of 10 zPIV denominations. As the amounts get larger it becomes even more useful to use larger denominations. It is similar to buying a new car using $1 bills – which would be pretty crazy for everyone involved.

 

For the best anonymity it is better to have a number of zerocoins at each of the denominations handy and ready for spends. For the above example (in our case rounded up to integer number of zPIVs), it would be better to Mint something like 7000 zPIV (i.e. 1 5000 zPIV and 2 1000 zPIVs) so that you could later pay out 6543 to someone, rather than minting exactly that amount.  That way it is much less likely that someone could link the transactions. This is also while it is important to create a large pool of denominations both overall and at least some spread for each user ahead of any actual transactions.

7. Are there any fees for using zPIV?

Yes and No. It costs 0.01 piv per minted denomination but is free to spend zPIV (convert/send zPIV back to PIV address)

 

E.g. Converting 7 PIV into 7 zPIV will involve minting 3 denominations of 1,1,5 zPIV. So this will cost 0.03 PIV in fees.

8. Do the developers have the private key to decrypt zPIV transactions?

No. RSA-2048 challenge was used to setup the encryption so no individual knows the factors.

9. Whenever I get new stake rewards, my wallet initiates the auto-mint and mints some extra zPIV coins. Why is this so & can it be disabled?

This is due to the auto mint algorithm detecting that your zPIV balance is below 10% as a result of the extra stake reward. You can prevent dust auto-minting by modifying the `Preferred zPIV Denomination` in `Options`. When you change this to a larger denomination amount, Auto-mint will only mint when your wallet balance increases enough to be able to satisfy the minimum denomination value.