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 um 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 redeDecred 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, é muitolegal. 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):
decred/dcrd/blob/v1.1.0/blockchain/validate.go#L2327:L2334
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:
decred/dcrd/blob/v1.1.0/txscript/opcode.go#L1110:L1119
*Texto escrito por Matheus Degiovani