Forks e Ativação DCP 2&3 na Decred

Publicado em 2017-11-23

No momento em que estou escrevendo esse artigo, faltam menos de 3 dias para a ativação das DCPs 0002 e 0003 na rede Decred.

Mas em que exatamente implica essa ativação? Nesse artigo vou dar uma visão (bem geral) sobre o que é um fork em uma criptomoeda e o que vai começar a valer na rede Decred. Se você está com pressa ou já sabe como funciona um fork, pode pular até a parte sobre LN na Decred.

Consenso em uma Blockchain

Uma criptomoeda baseada em blockchain distribuída funciona porque todos os nós (ou pares / participantes / nodes / peers / mineradores) da rede concordam com as regras de validação que se aplicam a cada novo bloco.

Se algum participante tentar inserir um novo bloco que não segue essas regras e tentar distribuir esse bloco para outros participantes (inserindo, digamos uma transação que cria 1 milhão de novas moedas “do nada”), os outros nós da rede simplesmente rejeitam esse bloco, e a vida continua.

O fato de todos os participantes concordarem com as regras atuais é tecnicamente chamado de consenso (da rede).

Novas regras e Forks

Todo os mineradores que geram novos blocos concordam com as regras atuais da rede, ok. Mas e se os participantes querem que novas regras comecem a valer? Como um novo consenso é conseguido?

Simplificando bastante: no Bitcoin, acontecem os forks: uma parte dos mineradores começa a seguir um conjunto de regras, outra parte segue um segundo conjunto de regras e surgem duas novas moedas. Por questões de marketing, uma moeda fica se chamando “Bitcoin” e a outra adota um outro nome (Bitcoin Cash, Bitcoin Gold, etc).

Na Decred existe um mecanismo embutido para ativação de novas regras de consenso: a votação de agendas.

Simplificando bastante novamente: o time de desenvolvimento implementa a nova funcionalidade desejada (as novas regras de consenso) e libera uma versão do software com as regras implementadas, mas desativadas.

Então é iniciada uma votação. Qualquer portador de Decred pode votar comprando tickets e indicando sua opção pela ativação ou não das novas regras. Assumindo que a votação passe (as novas regras são aceitas pela comunidade), o novo código de consenso é automaticamente ativado.

DCPs 0002 e 0003 (Lightning Network)

Para implementar a Lightning Network, uma criptomoeda precisa suportar algumas operações com semântica bem específica. Em particular, ela precisa implementar a possibilidade de cálculo de hashes SHA256 e um recurso chamado Relative Lock Time que permite estabeler quando uma entrada pode ser gasta na rede.

O que as DCPs 0002 e 0003 propuseram foi a ativação dessas novas regras de consenso, de forma que todos os participantes (mineradores e outros full nodes da rede) rejeitem transações que não seguem as novas regras. Em outras palavras, essa votação determinou que a rede Decred tem as funcionalidades necessárias para participar da Lightning Network.

Essa votação foi aprovada e nesse momento a rede está em fase de transição, dando oportunidade a qualquer full node que ainda não migrou para a versão 1.1.0 o faça.

Pra ficar bem claro o ponto principal: o código das novas operações já está pronto e lançado (na versão 1.1.0 ou superior - veja na seção técnica abaixo mais detalhes sobre isso). Só falta esperar mais algumas horas para que os nós passem a validar essas novas operações.

Isso não significa que a LN vai entrar em funcionamento. Isso significa que a Decred vai poder participar da LN quando ela de fato existir em produção de forma disseminada.

Ainda faltam muitas coisas para que a LN comece a ser usada de fato. Dois exemplos: não existe uma GUI para participação em uma mainnet em produção e os protocolos para transmissões entre criptomoedas diferentes ainda estão sendo escritos.

Então, a ativação das novas regras não é o fim do caminho e nada particularmente excitante vai acontecer após o bloco 189567. Apenas a rede vai estar em posição para participar da LN.

O processo de fork via votação é significativo e um dos diferenciais da Decred. E ter novas regras valendo de acordo com a vontade da comunidade, conforme medido via votação on-chain, é muito legal. Mas ainda tem muito chão pela frente até termos os pagamentos instantâneos prometidos pela LN.

Bônus: O que mudou no código

Nessa seção vou mostrar de forma um pouquinho mais aprofundada o que exatamente mudou na versão 1.1.0 (relativo aos DCPs 0002 e 0003) e como é a ativação via votação.

Durante a validação de um bloco, o daemon dcrd verifica se a votação passou (se os recursos estão ativos):

Caso essas regras estejam ativas, a máquina virtual executora de scripts (que vai verificar se uma transação é válida) interpreta o antigo OP_NOP3 como OP_CHECKSEQUENCEVERIFY, que implementa a semântica de número relativo de blocos mínimo até que o input possa ser gasto:

Conclusão

Gostou? Tem mais dúvidas sobre Decred, Bitcoin e blockchain em geral? Me fala o que você quer saber aí nos comentários.