PIVX Zerocoin (zPIV) Documento Técnico

Revisão 0.9

Ultima actualização 16 de Outubro de 2017

Introdução geral ao PIVX

 

PIVX é uma criptomoeda baseada em Bitcoin focada na comunidade, descentralização, privacidade e uso no mundo real. PIVX usa Proof of Stake como um protocolo de mining amigável para o planeta e um segundo composto por uma rede de Masternodes para permitir governança e auto-financiamento da moeda liderada pela comunidade de modo a garantir a sustentabilidade de todo o ecossistema.

 

PIVX está continuamente a trabalhar para melhorar o sistema de governança, as transações instantâneas e privadas e fungibilidade para garantir que estamos a falar de um sistema de última geração.

Em termos leigos, PIVX é basicamente uma forma de dinheiro digital que pode ser transferido facilmente por todo o mundo num piscar de olhos com comissões virtualmente inexistentes. Pode converter o seu dinheiro em PIVX em várias bolsas de mercado e manter um saldo activo para obter recompensas semelhantes a juros de poupança, fazer trocas de câmbio, comprar outras moedas digitais ou comprar bens e serviços online onde PIVX é aceite.

 

PIVX não é de propriedade de nenhuma entidade e não é governado por uma instituição ou governo central. A sua rede é mantida em segurança via milhares de nós geridos pelos utilizadores da própria moeda.

 

O objectivo de PIVX é ser uma moeda digital avançada que é rápida, segura, descentralizada e privada.

 

TRANSAÇÃO PRIVADA DE CRIPTOMOEDAS

 

A maioria das criptomoedas como Bitcoin tem um registo digital público (blockchain) on as transações são visíveis e fáceis de pesquisar com assistência de exploradores. Isto resulta num sistema em que toda a gente pode ver as transações, balanços mas mais importante os endereços origem e destino.

 

Isto significa que quando faz uma transação está a ligar o seu endereço ao endereço do dono anterior das moedas, ligando os dois e criando uma associação entre ambos até ao ínicio da história da blockchain. Um endereço pode parecer completamente anónimo mas se fizer uma transação entre um endereço seu e uma bola ou uma companhia, então essencialmente associou este endereço a uma terceira parte que provavelmente sabe a sua identidade. Na maior parte dos cenários, essa transparência pode não ser um problema. Mas há situações em que na história de transações o seu endereço pode ficar associado com endereços mal vistos (usadas para operações ilegais) ou simplesmente alvo de ladrões que tencionam obter o seu saldo de Bitcoin. Por exemplo, imagine que recebeu Bitcoin de um endereço que está a ser monitorizado pelas autoridades. Neste momento poderia ser implicado em questões legais pelas quais não tem responsabilidade nenhuma.

 

A NOSSA SOLUÇÃO = PROTOCOLO ZEROCOIN (zPIV)

 

Para solucionar este problema, a começar com a carteira v3.0.0 lançada a 7 de Outubro de 2017, PIVX implementou o protocolo bastante conhecido e imensamente validado de nome Zerocoin.

 

Chamamos a isto zPIV, onde PIV é a unidade de PIVX e o z, prefixo de Zerocoin. zPiv fornece um serviço de coin-mixing ao nível do protocolo usando provas de conhecimento nuno para quebrar a associação entre remetente e recipiente. Isto significa que cada moeda enviada usando zPiv é agora 100% fungível e não tem qualquer histórico de transações associado.

O uso de zPIV também significa que o seu balanço pode ser escondido de tal forma a evitar ataques por parte de potenciais ladrões. Esta funcionalidade é bastante única e muito poucas criptomoedas no mercado possuem algum do gênero.

 

Acumuladores PIVX zPIV são encriptados usado chaves geradas com RSA-2048[1] o que nega qualquer necessidade de um setup inicial, o que significa que nenhum indivíduo tem as chaves do cofre para zPIV. A privacidade de todos nós está assim protegida pelo uso do zPIV.

 

DIFERENCIADOR ÚNICO.

 

A quando da escrita deste artigo (Setembro 2017) PIVX é a única criptomoeda Proof of Stake que implementou a totalidade das ideologias e práticas do protocolo Zerocoin. Embora baseado na livraria de código original (libzerocoin) que foi criada por criptógrafos acadêmicos, a maioria do código PIVX zPIV é customizado, fazendo com que zPIV seja único. A dissertação original de Zerocoin pode ser consultada em: https://isi.jhu.edu/~mgreen/ZerocoinOakland.pdf.

 

Contrariamente à maior parte das outras criptomoedas que actualmente utilizam protocolos baseados em Zerocoin, PIVX zPIV utiliza um sistema bastante eficiente que requer consumo mínimo de recursos e faz com que também seja uma das transações mais rápidas do mercado neste momento.

 

ESPECIFICAÇÕES TÉCNICAS PIVX zPIV

  1. Tamanho (bytes) da média das transações é 25% menor do que em qualquer outra implementação num ambiente de produção. Mais otimizações estão a caminho.
  2. Pagamento direto de zPIV para um endereço PIV
  3. Possibilidade de gastar múltiplas denominações Zerocoin numa única transação
  4. Possibilidade de enviar quantias exatas e retornar o restante troco para um endereço PIVX ou criar restante zPIV.

 

VANTAGENS TÉCNICAS PIVX zPIV TECHNICAL ADVANTAGES

  1. Tamanho (bytes) da média das transações é 25% menor do que em qualquer outra implementação num ambiente de produção. Mais otimizações estão a caminho.
  2. Verificação rápida assim como rápido sincronismo de rede
  3. Pagamento direto de zPIV para um endereço PIV
  4. Possibilidade de gastar múltiplas denominações Zerocoin numa única transação
  5. Possibilidade de enviar quantias exatas e retornar o restante troco para um endereço PIVX ou criar restante zPIV.

 

BENEFICIOS NA VIDA REAL AO USAR zPIV

  1. zPIV pode esconder o seu balanço. Isto é importante para manter indivíduos com intenções criminosas longe desta informação.
    • Portanto o seu balanço zPIV não está associado com nenhum endereço.
  2. zPIV consegue esconder o histórico de transações enviadas.
    • Endereços de remetente e destinatário não são visíveis, tornando o sistema privado, seguro e fungível. safe & fungible.
  3. Transações anônimas zPIV são extremamente rápidas.
    • Dura tão pouco com 0.5s a criar zPIV e tão pouco como 2.5s a gastá-lo.
  4. Conversão automática para zPIV está activa por defeito, mas transferência transparente de PIV ainda é possível.
    • Isto significa que se assim quiser ou for pedido pode enviar uma transação PIV completamente transparente.

 

COMO FUNCIONA A ANONIMIDADE

  1. Cunhar (converter) o seu PIV em zPIV. A carteira faz auto-cunhagem até um certo valor.
  2. Gaste (envie) o seu zPIV como se fosse PIV para qualquer endereço PIVX.

 

O protocolo Zerocoin essencialmente junta e combina todo o zPIV criado pelos utilizadores de forma a criar a desassociação necessária para a anonimidade. Quando um utilizador envia zPIV isto acontece de forma a que o utilizador consiga usar valor a que tem direito desse conjunto global, daí tornando anônima a origem da transferência. Tome nota que quando falamos em combinar zPIV não estamos a falar de um sistema centralizado, queremos dizer que a blockchain toma conta do zPIV criado por toda a gente.

 

Quando um utilizador envia zPIV para um endereço PIVX, a sua carteira envia uma prova de zero conhecimento para a blockchain que permite que o zPIV seja convertido para PIV e enviado para o destinatário num único passo.

 

Para terminar fica aqui uma simples analogia: imagine que zPIV são fichas de casino. Você compra 100 Euros de fichas com uma nota (zPIV) e recebe 1x10EUR, 2x20EUR, 1x50EUR . Isto significa que não há uma associação entre a nota de 100 euros, mas tem em seu poder uma prova (em formato de fichas) que lhe dá direito a reclamar 100 euros. Se precisar de 50 euros pode trocar algumas fichas por uma nota de 50 euros, no entanto não há qualquer relação entres as fichas e as notas que foram compradas ou vendidas para negociar as fichas.

 

Cunhagem e pagamento zPIV

 

Neste exemplo, o Kirby quer enviar PIV para a Heidi usando o protocolo zerocoin para manter a transação anonima.

Processo de cunhagem:

  1. Kirby iniciar uma pedido à rede para cunhar 960 zPIV
  2. O Protocolo Zerocoin converte 960 PIV do Kirby para a quantia equivalente em zPIV, usando as maiores denominações possíveis.
  3. Nos bastidores, o Kirby obteve uma prova secreta que é dono desta cunhagem (um número de série único que é usado pelo protocolo para controlar quem é dono de um certo valor em zPIV).
  4. O balanço do Kirby’s é actualizado:
    1. Menos 960 PIV e mais 960 zPIV.
    2. Kirby também consegue ver que os 960 zPIV são compostos pelas seguintes denominações: 1x 500 zPIV, 4x 100 zPIV, 1x 50 zPIV, 1x 10 zPIV.

 

Processo de envio/gasto:

  1. Kirby inicia o envio de 960 zPIV para o endereço PIVX da Heidi.
  2. O Protocolo Zerocoin recebe e valida a prova secreta do Kirby que prova que ele é dono desses 960 zPIV. Quando usados, o balanço zPIV não pode ser gasto novamente.
  3. O Protocolo Zerocoin creates cria 960 PIV e deposita no endereço da Heidi
    1. Heidi recebe 960 PIV do um remetente anonimo.
    2. O balanço do Kirby é actualizado (menos 960 zPIV)

 

Explicação de denominações

 

Para melhorar a eficácia das transações mantendo um elevado nível de complexidade, PIVX implementou um conjunto de denominações PIV que são convertidas para uma pool de moedas em forma de zPIV (semelhante ao exemplo das fichas de casino). As denominações usadas por zPIV são: 1, 5, 10, 50, 100, 500, 1000, e 5000. O objectivo destas denominações é fornecer um bom balanço entre simplicidade, usabilidade e segurança. A maneira mais drástica de reduzir associação de fundos seria usar uma única denominação (por exemplo 1 zPIV), mas não seria a forma mais prática de o fazer, sendo que para volumes maiores de transações seria necessário usar muitas dessas moedas de 1 unidade. Por outro lado, usando um conjunto muito grande de denominações poderia funcionar contra a anonimidade, de forma que a equipa decidiu fixar estas 8 denominações. Este conjunto é visto como o ponto chave sendo que não inclui moedas ou muito baixa ou muito altas. Tendo em conta que o valor de PIV pode mudar no tempo, é concebível que as denominações também sofram alterações.

 

Logíca de denominação

 

Ao cunhar (converter) or gastar (enviar) zPIV, o respectivo algoritmo vai determinar automaticamente que denominações usar. Por exemplo:

  1. Se tem a quantidade exata, então começar pela maior denominação e descer até atingir o total no menor número possível de moedas.
  2. Se não, minimizar as moedas utilizadas (a) ao encontrar a próxima denominação superior ao valor em falta e usar essa denominação se disponível ou (b) se não disponível, começar com denominações maiores e descer até chegar ao valor necessário.
  3. Ou finalmente, se não há combinações para denominações exactas, encontrar a melhor combinação possível para receber o menos troco possível.

 

Cunhagem automática

 

A privacidade de zPIV torna-se mais eficiente quanto mais denominações zPIV existirem na pool partilhada. Dessa forma, para garantir anonimidade, as carteiras PIVX por defeito iniciam um processo de auto-cunhagem de PIV para zPIV. Este valor é configurável e pode ser desativado completamente se o utilizador não quiser cunhagem automática.

 

A auto-cunhagem começa quando a carteira/processo é lançado, desbloqueada e em sintonia com a blockchain. Isto significa que se a carteira está trancada, o processo de auto-cunhagem não será iniciado. Algumas configurações de auto-cunhagem são:

 

– Percentagem de cunhagem: Por defeito 10%, pode ser alterado via o GUI ou via linha de comandos com a opção: `-zeromintpercentage=<n>` ou no ficheiro de configuração pivx.conf `zeromintpercentage=<n>`, em que <n> nao pode ser inferior a 10%.

 

– Estado: Ativado por defeito, pode ser desactivado via linha de comandos com a opção `-enablezeromint=0` ou no ficheiro de configuração pivx.conf com `enablezeromint=0`

 

– Denominação preferida: Os utilizadores podem configurar a denominação preferida via linha de comandos com a opção `-preferredDenom=<n>` ou no ficheiro de configuração pivx.conf com `preferredDenom=<n>`  onde <n> é uma das denominações disponíveis `1/5/10/50/100/500/1000/5000` ou `0` (para escolha automática de denominação).

 

Se não existem moedas disponíveis para usar a denominação preferida, o processo de auto-cunhagem espera até que haja PIV disponível para o fazer. A cada novo block, o algoritmo:

  1. Apura quantas moedas para cunhagem estão disponíveis (isto exclui moedas imaturas ou bloqueadas)
  2. Apura quanto zPIV está disponível
  3. Apura se a percentagem é menor que a percentagem alvo. Se a percentagem é menor que a percentagem alvo, então:
  1. É calculado quanto PIV precisa de ser convertido para zPIV, por exemplo 2015.
  2. Usar a denominação mais pequena para esta caso (1000 PIV) e cunhar 1000 zPIV.
  3. Repetir até se ter cunhado o total dos 1500 zPIV em falta.

 

A razão para usar a denominação seguinte mais próxima é a performance. Denominações exatas não precisam de ser divididas e um simples processo de cunhagem pode ser feito em tempo eficiente. A excepção é se o volume de zPIV que precisa de ser cunhado é maior que a maior denominação, por exemplo, se precisarmos de 6666 zPIV só podemos cunhar denominações máximas de 5000, por exemplo: (6666 = 5000 + 1000 + 500 + 100 + 50 + 10 + 5 + 1) que são as nossas 8 denominações possíveis.

Processo de auto-cunhagem zPIV

(baseados nas configurações defeito)

    1. O Kirby, antes do lançamento do protocolo zerocoin, tem um balanço de 17900 PIV. Ele é dono de um masternode, sendo que 10000 PIV estão dedicados e trancados ao masternode. Kirby não decidiu trancar os restantes 7900 PIV.
    2. O Protocolo Zerocoin é implementado.
    3. O Protocolo Zerocoin processa cada cada endereço individualmente desta forma:
      1. Determina se as moedas estão trancadas
      2. Se não estão trancadas, converte 10% de PIV para zPIV
      3. Se estão trancadas, fazer nada
    4. O Kirby vê que o seu balanço desce 790 PIV (10%) das moedas não trancadas.
    5. O Kirby vê que o seu balanço aumentou 790 zPIV. Sendo que não foi especificada uma denominação preferida, o processo de auto-minting escolheu:
    • 1x 500 zPIV
    • 2x 100 zPIV
    • 1x 50 zPIV
    • 4x 10 zPIV

    Nível de segurança de envio/gasto

    Ao gastar denominações zPIV, um utilizador é questionado sobre o Nível de Segurança desejado de 1 a 100. De uma maneira indirecta, isto permite ao utilizador escolher quantas moedas quer ofuscar no processo de transação.

    Um nível de segurança de 1, por exemplo, pegaria em todas moedas cunhadas na blockchain antes de cunhagem do utilizador ser adicionada, e depois usaria também qualquer moeda cunhada nos próximos 10 blocos. Um nível de segurança de 2, faria a mesma coisa mas usaria os próximos 20 blocos de cunhagem. Um nível de segurança de 100, usaria os próximos 100. Quanto maior o nível de segurança, maior o custo computacional e tempo associado para enviar uma quantia. Embora possa demorar mais tempo, um nível de 100 é recomendado para transações que necessitem de anonimidade máxima.

    Funcionamento de troco

    Como zPIV é composto de denominações fixas, irá haver alturas em que a quantia a enviar não pode ser feita com moedas exactas. Por exemplo, se tem 1x 1000 zPIV e quer enviar 985 PIV para um endereço, precisará de receber 15 PIV de troco. Este troco poderia eventualmente revelar o endereço PIV do remetente, se por engano misturasse o endereço de troco com os seus outros endereços PIVX, no entanto há duas opções para lidar com este cenário. A primeira opção é usar a funcionalidade integrada na carteira que converte o troco PIV novamente para zPIV na conta do remetente. Esta é a opção mais conveniente mas de notar que não será enviado troco inferior a denominação mais pequena, ou seja, 1 PIV, que será convertido em taxa.

    A segunda opção é enviar o troco para um endereço PIVX, o que deixa em suas mãos a responsabilidade de segregar esse endereço dos seus outros. Esta opção pode criar uma associação entre os seus endereços e não é recomendada quando total privacidade é desejada.

    Integridade de dados zPIV

    Todo zPIV cunhado está associado a um único número de série que é guardado na carteira local em wallet.dat e não na blockchain. Isto significa que sempre que novos zPIV são cunhados, os utilizadores deverão fazer backup da carteira novamente para guardar os novos números de série em caso de incidentes.

    Especificações técnicas (v1.0)

    Funcionalidades chave: Custom accumulator checkpointing system

    Accumulator Encryption: RSA-2048

    Denominações zPIV: 1, 5, 10, 50, 100, 500, 1000, 5000

    Tempo de cunhagem >= 0.5 seconds

    Tempo de envio: >= 2.5 seconds

    Limite máximo de envio: 35,000 PIV

    Limite máximo de denominações únicas usadas: 7

    Tamanho de bloco: 2 MB (era 1 MB antes da v3.0.0)

    Taxa (cunhagem): 0.01 PIV por denominação de zPIV cunhada.

    Taxa (envio): Não há taxa para gastar zPIV para PIV.

    Numero minimo de confirmações PIV para cunhar zPIV: 6

    Numero minimo de confirmações zPIV para garantir envio: 20

    Requisitos adicionais necessários antes de zPIV poder ser gasto: 3 cunhagens adicionadas ao acumulador depois da sua cunhagem ser adicionada.

    Autores

    Escrito por: jakiman, 4ml

    Aconselhamento técnico por: spock, presstab, fuzzbawls, mrs-x

    Translated: Vitor Monteiro

    REFERENCIAS

    [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.