ūüáĶūüáĻ Combinador torna f√°cil o trabalho da bifurca√ß√£o de Shelley

Um olhar por tr√°s das cenas com o Duncan Coutts e Edsko de Vries

ACombinator

Desde o lan√ßamento da rede de testes incentivada que marcou o in√≠cio da era Shelley no ano passado, a plataforma Cardano entrou num per√≠odo de r√°pido desenvolvimento. O protocolo de consenso Ouroboros Classic que tem servido de base √† era Byron e √† criptomoeda ada nos √ļltimos 30 meses e em breve ir√° mudar para Ouroboros Praos. Esta √© a vers√£o do nosso protocolo √† prova de participa√ß√£o (PoS) que ir√° capacitar Shelley √† medida que Cardano se descentraliza. Tem inerente o processo de comprometer participa√ß√£o com recompensas monet√°rias para detentores de ada e detentores de agrupamentos de participa√ß√£o.

Atualizamos Cardano a 20 de fevereiro com uma bifurca√ß√£o que mudou a rede principal do protocolo de consenso original, Ouroboros Classic, para uma vers√£o atualizada, Ouroboros BFT. Esta bifurca√ß√£o BFT iniciou um per√≠odo de transi√ß√£o com Ouroboros BFT, uma vers√£o mais leve do protocolo concebido para nos ajudar a mudar para Praos, enquanto isso continua a prevenir comportamentos maliciosos. Muitos nem sequer notaram. Para utilizadores da carteira Daedalus, significou uma atualiza√ß√£o do software. C√Ęmbios tiveram que atualizar manualmente, mas tiveram v√°rias semanas para assim o fazer e estivemos l√° para os ajudar.

O próximo evento foi o reinício de Byron a 30 de março. Este lançamento de código totalmente novo para muitos componentes de Cardano, incluindo o novo nó para apoiar a delegação e a descentralização além de futuras características de Shelley. Uma grande vantagem deste novo código de base é que foi concebido para ser modular, assim, muitos componentes podem ser alterados sem que afete os outros.

Por sua vez, BFT age como uma plataforma de partida para a bifurca√ß√£o de Shelley, que acontecer√° uma vez satisfeitos com a rede de testes de Haskell. A segunda bifurca√ß√£o ter√° um processo semelhante ao de fevereiro para os c√Ęmbios, detentores de ada e utilizadores da carteira esperan√ßados que seja nada mais do que um n√£o evento.

Contudo, enquanto tudo parece correr sobre rodas à superfície, ainda hã muita atividade oculta. Tal como um pato que nada serenamente pelo lago - enquanto os pés estão a pedalar furiosamente por baixo das águas calmas - os nossos engenheiros blockchain estão no duro.

Assim, sent√°mo-nos com dois engenheiros l√≠deres do projeto Cardano, Duncan Coutts e Edsko de Vries, para sabermos como √© que eles o fizeram. Duncan tem liderado a parte da arquitetura nos √ļltimos tr√™s anos e entre eles Duncan e Edsko usaram durante 35 anos Haskell, a linguagem de programa√ß√£o usado para desenvolver Cardano.

Duncan, como é que fizeste?

Conforme descrito no roteiro de Cardano, os engenheiros blockchain da IOHK acreditam em atualiza√ß√Ķes suaves ao c√≥digo. Em vez de tentar saltar de Ouroboros Classic a Praos numa s√≥ atualiza√ß√£o - que seria uma tarefa incrivelmente complexa - foi faseado em duas etapas usando Ouroboros BFT como intermedi√°rio (Figura 1). O c√≥digo BFT √© compat√≠vel com quer os n√≥s federados da era Byron quer com os n√≥s do estilo Shelley lan√ßados no rein√≠cio de Byron. √Č como uma corrida de estafetas: um corredor (no nosso caso, correr um protocolo) entra na zona de entrega onde o outro corredor aguarda; eles sincronizam as velocidades (para estarem perfeitamente compat√≠veis um com o outro) e depois entregam o bast√£o (operar a rede principal) e depois o novo corredor com o bast√£o continua a corrida para a pr√≥xima volta.

AFig1
Figura 1. Roteiro da rede principal de Byron para Shelley

O processo de Daedalus Flight ajudou-nos a desenvolver rapidamente e testar uma nova carteira e quando estiverem todos a correr na rede principal e uma vez acabada a troca dos nós, o código antigo é redundante. Estamos neste momento nessa fase de transição, com a carteira Daedalus da rede principal lançado no dia 24 de abril.

O nosso objetivo é termos uma entrada graciosa na era Shelley, conforme o chefe da IOHK, Charles Hoskinson descreveu na sua apresentação sobre a bifurcação. Uma ferramenta vital para tornar isto possível foi a criação do combinador de bifurcação.

Isso parece uma máquina agrícola. O que é isso?

Um combinador √© apenas um nome t√©cnico para algo que combina outras coisas. Por exemplo, a adi√ß√£o √© um combinador de n√ļmeros. Uma bifurca√ß√£o combina dois protocolos num √ļnico protocolo. Chamamos a isto uma combina√ß√£o sequencial dos dois protocolos porque corre o primeiro protocolo durante um per√≠odo e a certa altura muda para o segundo protocolo. No nosso caso, estas s√£o as duas vers√Ķes de Ouroboros √† medida que mudamos de BFT para Praos.

A parte habilidosa de tudo isto tem sido o uso de m√≥dulos discretos que executa o seu trabalho, enquanto sabem o m√≠nimo poss√≠vel sobre cada um e da blockchain. Aqui a simplicidade √© a chave e este processo de retirar detalhes n√≥s chamamos de ‚Äúabstrair‚ÄĚ. A maior parte dos m√≥dulos do protocolo de consenso nem sequer t√™m que saber que est√£o a lidar com uma criptomoeda e podem estar a colocar qualquer coisa na blockchain. Por exemplo, fizemos semin√°rios usando o exemplo do raz√£o do Pok√©mon na blockchain Ouroboros. A √ļnica coisa que √© diferente s√£o as regras do raz√£o; o consenso √© todo igual. Apenas configura-se - instanciar no cal√£o de programa√ß√£o - com as regras de jogo de Pok√©mon em vez das regras de contabilidade do UTXO. [Para os leitores com interesse t√©cnico, aten√ß√£o ao Edsko que ir√° ao detalhe do processo de abstra√ß√£o e combinadores numa publica√ß√£o futura do blog.]

Fazes parecer t√£o simples.

Na verdade, é complicado porque Cardano corre a criptomoeda ada e uma data de outras coisas ao mesmo tempo. Pensa nisto como estar a mudar as rodas do carro enquanto estás a conduzir o mesmo e a rebocar uma caravana. Assim, temos que ter a certeza de que estamos a fazer isto de uma maneira com total confiança.

Pod√≠amos ter encarado esta tarefa como uma √ļnica, mas fazia sentido realiz√°-la de forma gen√©rica usando um combinador de protocolo. Escolhemos este caminho porque conseguimos um melhor resultado e testar, que √© vital para assegurar que o c√≥digo funciona, torna-se muito mais f√°cil. Em cima disso, haver√° mais bifurca√ß√Ķes no futuro, o que tornou a escolha ainda mais clara. Por exemplo, √† medida que nos aproximamos do culminar do desenvolvimento de Cardano e nos movemos para as eras Goguen, Basho e Voltaire, haver√° pelo menos uma bifurca√ß√£o em cada etapa.

Então como é que lidastes com as partes complicadas?

Bem, em primeiro lugar, tivemos que realiz√°-lo sem que existisse investiga√ß√£o para onde nos vir√°ssemos. Investigadores descrevem um √ļnico protocolo independente e perfeitamente isolado. Mas n√£o √© a√≠ que n√≥s estamos. Estamos a tentar executar Praos depois de ter come√ßado com uma blockchain que estava a usar outra coisa qualquer. O que o Edsko est√° a desenvolver, ir de um protocolo para outro de uma forma gen√©rica, n√£o est√° coberto em termos de investiga√ß√£o. E √© dif√≠cil, √© complicado. Todos os detalhes precisam de muita reflex√£o e co√ßar muito a cabe√ßa. Mas alternar entre c√≥digos de base de Cardano n√£o √© o tipo de atividade sobre a qual se espera que acad√©micos publiquem. N√£o tem um aspeto inovador e √© encarado como apenas um desafio de implementa√ß√£o.

Edsko, podes-nos dar um exemplo?

Conforme diz o Duncan, para os investigadores, estas quest√Ķes de implementa√ß√£o s√£o triviais, mas lidar com elas √© 99% do que n√≥s fazemos. Toma como exemplo o problema de tempo para a blockchain. √Č sobre o qual tenho dado voltas √† cabe√ßa nas √ļltimas semanas. Tempo √© dividido em slots onde a blockchain pode conter no m√°ximo um bloco por slot. Por vezes precisamos de converter entre n√ļmero de slot e tempo no mundo real, por exemplo quando um n√≥ precisa de saber ‚Äú√Č a minha vez?‚ÄĚ para gerar o pr√≥ximo bloco. Isto √© fundamental para Cardano, mas o comprimento de um slot muda depois de uma bifurca√ß√£o. Para Byron, um slot √© de 20 segundos, para Shelley ser√° dois segundos ou talvez um. Para realmente complicar as coisas, o momento exato de tempo quando a bifurca√ß√£o se realiza √© decidido pela pr√≥pria blockchain. No entanto, preciso de saber qual o momento de transi√ß√£o. √Č um dilema: para fazer convers√Ķes de slots preciso de saber o estado da blockchain, mas para saber o estado da blockchain preciso de saber fazer convers√Ķes de slots.

Trata-se de um problema da galinha e do ovo com muitas coisas complexas para desembaraçar. Temos de ser bastante precisos na forma como fazemos as coisas. Em teoria pode ser trivial, mas é muito difícil desembaraçar coisas e garantir que não se trata de um problema circular.

Não podemos permitir que corra mal, por isso como é que sabes que está correto?

Duncan: Essa é uma excelente pergunta. A minha resposta é que alcanças a resposta a dois níveis. A primeira é intelectual: analisas o problema, fazes os cálculos, falas com colegas e lutas com o problema até conseguires ver como todas as peças se encaixam todas juntas. Segundo, fazemos todos os nossos testes no QuickCheck para nos dar a confiança que isto faz o que concebemos que faça. Fazemos muitos testes que realmente leva-nos a casos muitos particulares que nunca imaginaríamos, incluindo esta mudança entre protocolos. Podemos fazer 100000 testes de todas as vezes mudamos uma linha de código. [Lars escreveu sobre John Hughes, um dos criadores de Haskell, e que ajudou a IOHK com estratégias de testes.]

Edsko: Sim, concordo com ambos os pontos. Em termos de combinador eu resolvo estas coisas ao pensar nas garantias que o c√≥digo que escrevo preciso para fornecer e que garantias que por sua vez precisa do raz√£o. Esqui√ßo uma evid√™ncia matem√°tica que este racioc√≠nio ‚Äúse-ent√£o‚ÄĚ √© na verdade justificado e depois viro-me para as equipas de m√©todos formais. Na equipa de m√©todos formais est√£o pessoas que montam regras matem√°ticas que descrevem a blockchain e eles conseguem ajustar as regras de tal forma que fornecem as garantias necess√°rias.

No que se refere ao segundo ponto do Duncan, sei que o t√≥pico do tempo que referi atr√°s, est√° correto por pensar em termos matem√°ticos e por testar. Decis√Ķes sobre o tempo s√£o mais f√°ceis quando temos a blockchain toda, mas s√£o mais dif√≠ceis quando temos que fazer previs√Ķes sobre o futuro. Felizmente, a forma como montamos as coisas significa que posso criar blockchain de teste. Assim, posso criar uma blockchain completa e depois cortar a meio. Posso usar a primeira metade e consider√°-la sendo o presente e determinar que a outra metade seja o futuro. Depois posso usar o ‚Äúpresente‚ÄĚ (primeira metade) para fazer previs√Ķes sobre o ‚Äúfuturo‚ÄĚ (segunda metade) e verific√°-las contra toda a blockchain inteira (sobre a qual os c√°lculos s√£o simples). Se coincidirem, ent√£o sei que est√° tudo OK.

Quando é que começaram com isto?

Logo depois do Duncan ter aparecido com a ideal genial do OBFT. Por isso, tenho estado a pensar sobre o combinador alternado com outras coisas há 18 meses. Era um objetivo de conceção desde o início da nossa conceção de Ouroboros em outubro de 2018, com o meu primeiro commit no repositório GitHub. Fizemos um protótipo de demonstração com OBFT e Praos logo depois em dezembro 2018.

E quantas pessoas tiveram envolvidas?

Duncan: Muitas pessoas estiveram a trabalhar no código do consenso, mas sempre que temos algo complexo e difícil, entregámos ao Edsko: ele é o nosso engenheiro de software extraordinaire! Trata-se de programação Haskell em escalada livre, em vez de escalada com corda conforme os métodos formais nos apoiam.

Algum coment√°rio final?

Duncan: O código que estava a correr está a ser descontinuado e em breve o código que estava a correr Cardano a mais de um mês deixará de existir. Uma vez que toda a gente corra o novo código na rede principal e uma vez acabados de trocar os nós principais, o código antigo será redundante. Estamos neste momento na fase de transição e ninguém está a gritar que os céus estão a cair. Ninguém notou nada.

Edsko: Isto é uma grande realização em si. A ideia do OBFT foi crucial na realização da transição, mas deixa de ser relevante uma vez que façamos a transição para Shelley. Isto foi uma forma genial de nos livrarmos de código legado, que por vezes é muito difícil de fazer, conforme os bancos sabem a seu grande custo.

Duncan: E se tudo correr bem, nem sequer notas.

Duncan e Edsko, agradecemos o vosso tempo. Penso que é melhor deixá-los voltar.