TON: Rede Aberta de Telegramas. Parte 2: Blockchains, fragmentação

TON: Rede Aberta de Telegramas. Parte 2: Blockchains, fragmentação

Este texto é a continuação de uma série de artigos nos quais examino a estrutura da rede (presumivelmente) distribuída Telegram Open Network (TON), que está sendo preparada para lançamento este ano. EM parte anterior Descrevi seu nível mais básico - a maneira como os nós interagem entre si.

Por precaução, deixe-me lembrá-lo de que não tenho nada a ver com o desenvolvimento desta rede e todo o material foi obtido de uma fonte aberta (embora não verificada) - documento (há também um acompanhamento brochura, descrevendo brevemente os pontos principais), que surgiu no final do ano passado. A quantidade de informação contida neste documento, na minha opinião, indica a sua autenticidade, embora não haja confirmação oficial disso.

Hoje veremos o principal componente do TON – o blockchain.

Conceitos básicos

Conta (conta). Um conjunto de dados identificado por um número de 256 bits conta_id (na maioria das vezes esta é a chave pública do proprietário da conta). No caso base (veja abaixo cadeia de trabalho zero), esses dados referem-se ao saldo do usuário. "Ocupar" específico conta_id qualquer um pode, mas seu valor só pode ser alterado de acordo com certas regras.

Contrato inteligente (contrato inteligente). Em essência, é um caso especial de conta, complementado com código de contrato inteligente e armazenamento de suas variáveis. Se no caso de uma “carteira” você pode depositar e sacar dinheiro dela de acordo com regras relativamente simples e predeterminadas, então no caso de um contrato inteligente essas regras são escritas na forma de seu código (em um certo Turing-completo linguagem de programação).

Estado Blockchain (estado da blockchain). O conjunto de estados de todas as contas/contratos inteligentes (em um sentido abstrato, uma tabela hash, onde as chaves são os identificadores das contas e os valores são os dados armazenados nas contas).

mensagem (mensagem). Acima usei a expressão “dinheiro de crédito e débito” - este é um exemplo particular de mensagem (“transferência N gramas da conta conta_1 por conta conta_2"). Obviamente, apenas o nó que possui a chave privada da conta pode enviar tal mensagem conta_1 - e capaz de confirmar isso com uma assinatura. O resultado da entrega dessas mensagens para uma conta normal é o aumento do seu saldo, e o resultado do contrato inteligente é a execução do seu código (que processará o recebimento da mensagem). É claro que outras mensagens também são possíveis (transferência não de quantias monetárias, mas de dados arbitrários entre contratos inteligentes).

Transação (transação). O fato de uma mensagem ser entregue é chamado de transação. As transações alteram o estado do blockchain. São as transações (registros de entrega de mensagens) que compõem os blocos do blockchain. Nesse sentido, você pode pensar no estado do blockchain como um banco de dados incremental – todos os blocos são “diffs” que precisam ser aplicados sequencialmente para obter o estado atual do banco de dados. As especificidades do empacotamento dessas “diffs” (e da restauração do estado completo delas) serão discutidas no próximo artigo.

Blockchain em TON: o que é e por quê?

Como mencionado no artigo anterior, blockchain é uma estrutura de dados cujos elementos (blocos) são ordenados em uma “cadeia”, e cada bloco subsequente da cadeia contém um hash do anterior. Os comentários fizeram a pergunta: por que precisamos de tal estrutura de dados quando já temos um DHT - uma tabela hash distribuída? Obviamente, alguns dados podem ser armazenados em DHT, mas isso só é adequado para informações não muito “sensíveis”. Os saldos de criptomoeda não podem ser armazenados em DHT - principalmente devido à falta de verificações integridade. Na verdade, toda a complexidade da estrutura do blockchain cresce para evitar interferências nos dados nele armazenados.

No entanto, o blockchain no TON parece ainda mais complexo do que na maioria dos outros sistemas distribuídos – e por dois motivos. O primeiro é o desejo de minimizar a necessidade de garfos. Nas criptomoedas tradicionais, todos os parâmetros são definidos no estágio inicial e qualquer tentativa de alterá-los realmente leva ao surgimento de um “universo alternativo de criptomoedas”. A segunda razão é o suporte para britagem (fragmentação, fragmentação) blockchain. Blockchain é uma estrutura que não pode diminuir com o tempo; e normalmente cada nó responsável pela operação da rede é forçado a armazená-lo completamente. Em sistemas tradicionais (centralizados), o sharding é usado para resolver esses problemas: alguns registros do banco de dados estão localizados em um servidor, outros em outro, etc. No caso das criptomoedas, tal funcionalidade ainda é bastante rara – em particular, devido ao fato de ser difícil adicionar sharding a um sistema onde não foi originalmente planejado.

Como a TON planeja resolver ambos os problemas acima?

Conteúdo Blockchain. Cadeias de trabalho.

TON: Rede Aberta de Telegramas. Parte 2: Blockchains, fragmentação

Em primeiro lugar, vamos falar sobre o que está planejado para ser armazenado no blockchain. Os estados das contas (“carteiras” no caso base) e dos contratos inteligentes serão armazenados lá (para simplificar, assumiremos que é o mesmo que contas). Em essência, esta será uma tabela hash normal - as chaves nela serão identificadores conta_id, e valores são estruturas de dados que contêm coisas como:

  • Saldo;
  • código de contrato inteligente (apenas para contratos inteligentes);
  • armazenamento de dados de contratos inteligentes (somente para contratos inteligentes);
  • Estatisticas;
  • (opcional) chave pública para transferências da conta, por padrão account_id;
  • fila de mensagens enviadas (aqui são inseridas para encaminhamento ao destinatário);
  • uma lista das últimas mensagens entregues a esta conta.

Conforme mencionado acima, os próprios blocos consistem em transações – mensagens entregues a várias contas account_id. No entanto, além de account_id, as mensagens também contêm um campo de 32 bits workchain_id - o chamado identificador cadeia de trabalho (cadeia de trabalho, blockchain funcionando). Isso permite que você tenha vários blockchains independentes entre si com configurações diferentes. Neste caso, workchain_id = 0 é considerado um caso especial, cadeia de trabalho zero — são os saldos que corresponderão à criptomoeda TON (Grams). Muito provavelmente, a princípio, outras cadeias de trabalho não existirão.

Fragmentos. Paradigma de fragmentação infinita.

Mas o crescimento do número de blockchains não para por aí. Vamos lidar com a fragmentação. Vamos imaginar que cada conta (account_id) recebe seu próprio blockchain - ele contém todas as mensagens que chegam até ela - e os estados de todos esses blockchains são armazenados em nós separados.

É claro que isto é um grande desperdício: muito provavelmente, em cada um destes shardchains (cadeia de fragmentos, blockchain de fragmentos) as transações chegarão muito raramente e serão necessários muitos nós poderosos (olhando para o futuro, observo que não estamos falando apenas de clientes em telefones celulares - mas de servidores sérios).

Portanto, os shardchains combinam contas pelos prefixos binários de seus identificadores: se um shardchain tiver o prefixo 0110, ele incluirá transações de todos os account_ids que começam com esses números. Esse shard_prefix pode ter comprimento de 0 a 60 bits - e o principal é que pode mudar dinamicamente.

TON: Rede Aberta de Telegramas. Parte 2: Blockchains, fragmentação

Assim que um dos shardchains começa a receber muitas transações, os nós que trabalham nele, de acordo com regras pré-determinadas, o “dividem” em dois filhos - seus prefixos serão um pouco mais longos (e para um deles esse bit será igual a 0, e para o outro - 1). Por exemplo, shard_prefix = 0110b será dividido em 01100b e 01101b. Por sua vez, se dois shardchains “vizinhos” começarem a se sentir suficientemente à vontade (por algum tempo), eles se fundirão novamente.

Assim, o sharding é feito “de baixo para cima” – assumimos que cada conta tem seu próprio shard, mas por enquanto eles estão “colados” por prefixos. Isto é o que significa Paradigma de fragmentação infinita (paradigma de fragmentação infinita).

Separadamente, gostaria de enfatizar que as cadeias de trabalho existem apenas virtualmente - na verdade, workchain_id faz parte do identificador de um shardchain específico. Em termos formais, cada shardchain é definido por um par de números (workchain_id, shard_prefix).

Correção de erros. Blockchains verticais.

Tradicionalmente, qualquer transação em um blockchain é considerada “gravada em pedra”. Porém, no caso da TON, é possível “reescrever a história” - caso alguém (os chamados. nó de pescador) provará que um dos blocos foi assinado incorretamente. Neste caso, um bloco de correção especial é adicionado ao shardchain correspondente, contendo o hash do próprio bloco que está sendo corrigido (e não o último bloco do shardchain). Pensando no shardchain como uma cadeia de blocos dispostos horizontalmente, podemos dizer que o bloco corretivo é anexado ao bloco errado não à direita, mas de cima - por isso considera-se que ele passa a fazer parte de um pequeno “blockchain vertical” . Assim, podemos dizer que shardchains são blockchains bidimensionais.

TON: Rede Aberta de Telegramas. Parte 2: Blockchains, fragmentação

Se, após um bloco errado, as alterações feitas por ele foram referenciadas pelos blocos subsequentes (ou seja, novas transações foram feitas com base nas inválidas), corretivas também são adicionadas a esses blocos “em cima”. Se os bloqueios não afetaram as informações “afetadas”, essas “ondas corretivas” não se aplicam a elas. Por exemplo, na ilustração acima, a transação do primeiro bloco, aumentando o saldo da conta C, foi reconhecida como incorreta - portanto, a transação diminuindo o saldo desta conta no terceiro bloco também deve ser cancelada, e um bloco corretivo deve ser confirmado no topo do próprio bloco.

Deve-se notar que embora os blocos corretivos sejam representados como localizados “acima” dos originais, na verdade eles serão adicionados ao final da blockchain correspondente (onde deveriam estar cronologicamente). A localização bidimensional mostra apenas a que ponto da blockchain eles estarão “ligados” (através do hash do bloco original localizado neles).

Você pode filosofar separadamente sobre quão boa é a decisão de “mudar o passado”. Parece que se admitirmos a possibilidade de aparecimento de um bloco incorreto no shardchain, não podemos evitar a possibilidade de aparecimento de um bloco corretivo errôneo. Aqui, pelo que posso dizer, a diferença está no número de nós que devem chegar a um consenso sobre novos blocos – haverá um número relativamente pequeno de pessoas trabalhando em cada shardchain.”grupo de trabalho» nós (que mudam de composição com bastante frequência), e a introdução de blocos corretivos exigirá o consentimento de todos nós validadores. Falarei mais sobre validadores, grupos de trabalho e outras funções de nós no próximo artigo.

Um blockchain para governar todos eles

Há muitas informações listadas acima sobre os diferentes tipos de blockchains, que também devem ser armazenados em algum lugar. Em particular, estamos falando das seguintes informações:

  • sobre o número e configurações das cadeias de trabalho;
  • sobre o número de shardchains e seus prefixos;
  • sobre quais nós são atualmente responsáveis ​​por quais shardchains;
  • hashes dos últimos blocos adicionados a todos os shardchains.

Como você deve ter adivinhado, todas essas coisas são registradas em outro armazenamento blockchain - cadeia mestre (cadeia principal, blockchain mestre). Devido à presença de hashes dos blocos de todos os shardchains em seus blocos, torna o sistema altamente conectado. Isso significa, entre outras coisas, que a geração de um novo bloco na masterchain ocorrerá imediatamente após a geração dos blocos nas shardchains - espera-se que os blocos nas shardchains apareçam quase simultaneamente, aproximadamente a cada 5 segundos, e o próximo bloco no masterchain - um segundo depois disso.

Mas quem será o responsável pela implementação de todo esse trabalho titânico - pelo envio de mensagens, execução de contratos inteligentes, formação de blocos em shardchains e masterchain, e até mesmo verificação de erros nos blocos? Tudo isso será feito secretamente pelos telefones de milhões de usuários com o cliente Telegram instalado? Ou, talvez, a equipe de Durov abandonará as ideias de descentralização e seus servidores farão isso à moda antiga?

Na verdade, nem uma nem outra resposta está correta. Mas as margens deste artigo estão se esgotando rapidamente, então falaremos sobre as diversas funções dos nós (você já deve ter notado menções a alguns deles), bem como a mecânica de seu trabalho, na próxima parte.

Fonte: habr.com

Adicionar um comentário