Manipulação do tempo na Cardano, parte 1. Sobre Ouroboros e a importância do determinismo

Blog > 2022 > Dezembro > Manipulação do tempo em Cardano, parte 1. Sobre Ouroboros e a importância do determinismo

Manipulação do tempo na Cardano, parte 1. Sobre Ouroboros e a importância do determinismo

A cronometragem na cadeia é essencial para garantir o consenso global em uma configuração de blockchain. Este post explica como o tempo é tratado no Cardano

6 de dezembro de 2022 - Arnaud Bailly - 6 minutos de leitura

Imagem de Noor Younis.

Esta postagem no blog é um esforço colaborativo realizado por Arnaud Bailly, Michael Peyton Jones, Sebastian Nagel, Polina Vinogradova e Brian Bush.

O tempo é necessariamente relativo a todos os participantes do sistema blockchain e é extremamente importante para apoiar e manter as propriedades de segurança do protocolo de consenso Ouroboros. Espera-se que os blocos cunhados sejam propagados para todos os nós do sistema em tempo hábil, portanto, o tempo requer a construção de uma representação globalmente aceitável para que o consenso seja alcançado.

Manipulação do tempo com Ouroboros

Localmente, um nó calcula a passagem do tempo usando um sistema de ‘relógio de parede’. O código para esse relógio é complicado porque o comprimento do slot pode variar em um limite de hard fork, portanto, o tempo deve ser calculado com cuidado, levando isso em consideração.

O código executa quatro etapas para obter o currentSlot:

  1. Aguarda algum atraso correspondente ao tempo restante até o próximo slot ou um atraso arbitrário de 60 segundos se o slot atual for desconhecido, o que acontece durante a sincronização
  2. Obtém a hora atual do sistema e a converte em um número de slot de acordo com o tamanho do slot para a era atual
  3. Se o novo slot for maior que o anterior, ele ‘marca’ um novo slot atual
  4. Se o acima não for verdadeiro, ele espera um pouco mais ou relata um erro se o tempo atual retroceder muito.

O currentSlot local é comparado ao slot informado pela ponta do ledger do nó. Se o último for mais antigo, é ignorado porque isso significa que o nó está sincronizando.

Como o comprimento do slot pode mudar em um hard fork, o consenso só pode converter slots em tempo até um ponto fixo no futuro – a ‘janela de estabilidade’ – na qual nenhum hard fork pode acontecer. Na prática, a janela de estabilidade é essencial, pois fornece uma medida de tempo necessária para garantir a finalização da transação e a imutabilidade do estado da cadeia. Durante a janela de estabilidade, a rede deve produzir pelo menos k blocos, onde k é o número de blocos após os quais a cadeia se torna imutável. A janela de estabilidade pode levar até 3 k/f, que é de 36 horas com os parâmetros atuais, ou aproximadamente um dia.

Desafios atuais

Existe uma limitação física fundamental para a velocidade na qual a informação pode viajar: a velocidade da luz. Isso implica que sincronizar o tempo em uma rede de nós leva tempo.

Network Time Protocol (NTP) existe para fornecer um mecanismo de sincronização, que aborda limitações de tempo e diferenças de medição. Por outro lado, o NTP não garante um aumento monotônico: o tempo às vezes pode pular alguns segundos ou mesmo horas. Os sistemas existentes que fornecem relógios precisos, precisos e confiáveis ​​em escala global são centralizados, como o relógio global fornecido pelo Spanner, por exemplo.

Atualmente, na Cardano:

  1. Os parâmetros de rede são definidos de forma que a granularidade dos intervalos de tempo observáveis ​​(por exemplo, tempo de bloco) na cadeia seja 20s, que é igual ao comprimento do slot (1s) dividido pelo coeficiente de bloco f (a frequência esperada do bloco, 0,05 ). É improvável que esses parâmetros mudem no futuro de curto prazo.
  2. Esses 20 segundos foram determinados como o limite ideal para garantir a segurança do protocolo, dadas as restrições para replicar novas transações e blocos na rede (300 ms de atraso do TCP em todo o mundo, com milhares de nós). Embora a taxa de transferência do bloco possa ser aumentada no futuro, é improvável que isso reduza a granularidade do tempo on-chain observável.
  3. A finalização da transação pode ser alcançada em aproximadamente um dia e não pode acontecer em menos de um dia, de acordo com o projeto de consenso da Ouroboros. Observe que, embora um alto nível de confiança já seja alcançado em questão de minutos ou horas, a probabilidade de um bloco ser finalmente descartado diminui exponencialmente com sua profundidade e o número de nós que precisam adotar esse bloco.

Finalmente, a longo prazo, o atual protocolo Ouroboros está planejado para ser substituído pelo Ouroboros Chronos. O Ouroboros Chronos aborda os desafios de cronometragem, fornecendo a primeira fonte de tempo criptográfica de alta resiliência baseada na tecnologia blockchain.

A importância do determinismo em um ambiente blockchain

No contexto atual, o determinismo significa que uma determinada transação tem um ‘efeito fixo’ no estado do livro-razão. Mas é importante distinguir entre os conceitos de determinismo histórico e prospectivo.

As blockchains são baseadas no princípio de replicar uma sequência fixa de transações (agrupadas em blocos) para chegar a um consenso sobre o estado do mundo. Todos os blockchains têm determinismo histórico, o que significa que as transações na cadeia têm um efeito fixo, caso contrário, os resultados da validação da cadeia seriam não determinísticos, o que quebraria o consenso.

Mas poucos blockchains têm determinismo prospectivo, o que significa que uma transação que ainda não foi adicionada à cadeia tem um efeito fixo (ou não se aplica). Cardano apresenta determinismo prospectivo (com a exceção atual de endereços de ponteiro, que são propostos para serem removidos neste CIP ). Você também pode saber mais sobre o determinismo de custo de transação da Cardano aqui.

Em blockchains que não possuem determinismo prospectivo, os usuários não podem saber quantas taxas de gás eles precisam pagar pelas transações, o que resulta em tais usuários pagando a mais pelas transações. A falta de determinismo prospectivo também é o motivo pelo qual existe o risco de que uma transação em tais blockchains possa falhar enquanto também consome muito gás.

O poder do determinismo prospectivo

O determinismo prospectivo é uma característica muito poderosa da Cardano, por várias razões:

  • Os usuários sabem, com antecedência, o que uma transação fará, portanto, não há surpresas. Isso é particularmente relevante para scripts porque os usuários sabem exatamente:

    • como os scripts se comportarão e
    • quanto orçamento de execução é necessário.
  • As transações propostas podem ser processadas em paralelo com segurança. Esse paralelismo é um dos motivos da velocidade da Hydra.

  • Como os usuários sabem antecipadamente se uma transação falhará ou não, as falhas de script podem ser severamente punidas (porque nunca acontecerão com usuários não maliciosos)

  • Em termos gerais, torna a interação e a evolução da blockchain mais fácil e previsível.

O determinismo prospectivo das transações requer que cada parte da validação da transação, incluindo a execução do script, seja completamente determinística. Em última análise, é por isso que a Cardano não pode ter operações não determinísticas em scripts.

Uma das maneiras de obter determinismo prospectivo é fazer com que o efeito de uma transação seja inteiramente determinado pela própria transação e pelas saídas a que ela faz referência. No contexto de Cardano, isso é chamado de localidade. A localidade também é um grande benefício para os usuários, pois significa que qualquer pessoa pode saber o que uma transação faz apenas olhando para ela.

A segunda parte desta postagem no blog discutirá casos de uso de gerenciamento de tempo em Cardano com Plutus, Marlowe e Hydra.