Uma visão detalhada do blockchain não-blockchain
Com o passar do tempo, o mundo blockchain foi se separando em duas partes distintas. Por um lado, os blockchains públicos com suas criptomoedas associadas desfrutaram de um notável retorno recente, cunhando muitos multimilionários. Por outro lado, o uso de blockchains corporativos ou autorizados tem crescido silenciosamente, mas de forma constante, vendo seu primeiro implantações ao vivo em vários setores durante 2017.
Uma questão interessante a considerar é o nível apropriado de semelhança entre estes dois tipos de cadeia. Ambos implementam um banco de dados compartilhado usando redes peer-to-peer, criptografia de chave público-privada, regras de transação e mecanismos de consenso que podem sobreviver a atores mal-intencionados. Isso é um grande ponto em comum. No entanto, as blockchains públicas e privadas têm requisitos diferentes em termos de confidencialidade, escalabilidade e governação. Talvez estas diferenças apontem para a necessidade de designs radicalmente divergentes.
A Corda plataforma, desenvolvida pela R3 consórcio bancário, adopta uma posição clara sobre esta questão. Embora alguns aspectos tenham sido inspirados em blockchains públicos, o Corda foi projetado do zero com base nas necessidades dos membros do R3. Na verdade, embora R3 ainda use a palavra “blockchain” extensivamente para ajudar a comercializar seu produto, a Corda não possui nenhuma cadeia de blocos. Mais do que qualquer outra plataforma de “razão distribuída” que conheço, Corda se afasta radicalmente da arquitetura de blockchains convencionais.
Meu objetivo neste artigo é explicar essas diferenças e discutir suas implicações, para o bem e para o mal. Na verdade, bom e mau é a forma errada de colocar a questão, porque a questão mais interessante é “Bom e mau para quê?” Este artigo está longe de ser curto. Mas, ao final, espero que os leitores obtenham alguma compreensão das diferenças no Corda e suas consequentes compensações. Corda é importante porque suas decisões de design trazem muitos dos dilemas dos blockchains corporativos à tona.
Uma última coisa antes de começarmos. Como CEO da empresa por trás MultiChain, uma popular plataforma empresarial de blockchain, por que estou escrevendo com tanta profundidade sobre um produto supostamente concorrente? A razão padrão seria defender a superioridade do MultiChain, mas essa não é minha motivação aqui. Na verdade, não vejo Corda e MultiChain como concorrentes, porque são fundamentalmente diferentes em termos de design, arquitetura e público. Corda e MultiChain competem da mesma forma que navios de cruzeiro e jet skis – embora ambos transportem pessoas por mar, quase não há situações do mundo real em que ambos possam ser usados.
Numa nota mais pessoal, aprendi muito com a liderança técnica da Corda nos últimos anos, seja através de reuniões, correspondência ou escritos públicos, muitos dos quais ocorreram antes de ingressarem na R3. Parte do meu interesse no Corda vem do respeito que tenho por esta equipe e, por esse motivo, vale a pena estudar Corda para quem busca entender o campo do razão distribuído.
Apresentando blockchains
Para entender o Corda, é útil começar com blockchains convencionais. O objetivo de um blockchain é permitir que um banco de dados ou razão seja compartilhado direta e seguramente por partes não confiantes. Isto contrasta com os bancos de dados centralizados, que são armazenados e controlados por uma única organização. Uma blockchain possui vários “nós”, cada um dos quais armazena uma cópia do banco de dados e pode pertencer a uma organização diferente. Os nós se conectam uns aos outros de uma forma densa ponto a ponto, usando um “protocolo de fofoca” no qual cada nó está constantemente contando aos seus pares tudo o que aprende. Como resultado, qualquer nó pode transmitir rapidamente uma mensagem para toda a rede através de vários caminhos alternativos.
Um banco de dados, seja centralizado ou alimentado por blockchain, começa vazio e é atualizado por meio de “transações”. Uma transação é definida como um conjunto de alterações no banco de dados que são “atômicas”, o que significa que são bem-sucedidas ou falham como um todo. Imagine um banco de dados representando um livro-razão financeiro, com uma linha por conta. Uma transação na qual Alice paga US$ 10 a Bob tem três etapas: (1) verificar se a conta de Alice contém pelo menos US$ 10, (2) subtrair US$ 10 da conta de Alice e (3) adicionar US$ 10 à conta de Bob. Como requisito básico, qualquer plataforma de banco de dados deve garantir que nenhuma transação interfira em outra. Este “isolamento” é conseguido bloqueando as linhas de Alice e Bob enquanto o pagamento está em andamento. Qualquer outra transação envolvendo essas linhas deverá esperar até que esta seja concluída.
Em uma blockchain, cada nó processa independentemente cada transação em sua própria cópia do banco de dados. As transações são criadas em qualquer lugar da rede e propagadas automaticamente para todos os outros nós. Como as organizações que administram os nós podem ter interesses diferentes (ou até conflitantes), elas não podem confiar umas nas outras para realizar transações de forma justa. As blockchains, portanto, precisam de regras que definam se uma determinada transação é válida ou não. Em um livro-razão financeiro compartilhado, essas regras evitam que os usuários gastem o dinheiro uns dos outros ou conjurem fundos do nada.
Junto com as regras que determinam a validade das transações, os blockchains também devem definir como as transações serão ordenadas, já que em muitos casos essa ordenação é crítica. Se Alice tiver US$ 15 e tentar enviar US$ 10 para Bob e Charlie em duas transações separadas, apenas um desses pagamentos poderá ser bem-sucedido. Embora possamos gostar de dizer que a primeira transação tem precedência, uma rede peer-to-peer não tem uma definição objetiva de “primeira”, uma vez que as mensagens podem chegar a diferentes nós em diferentes ordens.
Regras de transação
De modo geral, as informações em qualquer banco de dados são separadas em registros ou “linhas”, e uma transação pode fazer três coisas diferentes: excluir linhas, criar linhas e/ou modificar linhas. Estes podem ser reduzidos para dois, uma vez que modificar uma linha equivale a excluí-la e criar uma nova em seu lugar. Para voltar ao pagamento de Alice a Bob, sua linha contendo US$ 15 é excluída e duas novas linhas são criadas – uma contendo US$ 10 para Bob e outra com US$ 5 em “troco” para Alice.
Seguindo a terminologia do Bitcoin e de Corda, denotamos as linhas excluídas por uma transação como suas “entradas” e aquelas criadas como suas “saídas”. Qualquer linha excluída por uma transação deve ter sido criada por uma transação anterior. Portanto, cada entrada de transação consome (ou “gasta”) a saída de uma transação anterior. O conteúdo atualizado do banco de dados é definido pelo conjunto de “saídas de transação não gastas” ou “UTXOs”.
Numa blockchain, uma transação é válida se cumprir as três condições seguintes:
- Correção. A transação deve representar uma transformação legítima de entradas em saídas. Por exemplo, num livro-razão financeiro, a quantidade total de fundos nas entradas deve corresponder ao total nas saídas, para evitar que o dinheiro apareça ou desapareça magicamente. As únicas excepções são as transacções especiais de “emissão” ou “retirada”, nas quais os fundos são explicitamente adicionados ou removidos.
- Autorização. A transação deve ser autorizada pelo proprietário de cada produto consumido por seus insumos. Num livro-razão financeiro, isso evita que os participantes gastem o dinheiro uns dos outros sem permissão. A autorização de transação é gerenciada usando criptografia assimétrica (ou chave pública-privada). Cada linha possui um proprietário, identificado por uma chave pública, cuja chave privada correspondente é mantida em segredo. Para ser autorizada, uma transação deve ser assinada digitalmente pelo proprietário de cada um de seus insumos. (Observe que as linhas também podem ter proprietários de “assinaturas múltiplas” mais complexos, por exemplo, onde duas em cada três partes podem autorizar seu uso.)
- Singularidade. Se uma transação consumir uma saída específica, nenhuma outra transação poderá consumir essa saída novamente. É assim que evitamos que Alice faça pagamentos conflitantes tanto para Bob quanto para Charlie. Embora as transações para ambos os pagamentos possam estar corretas e autorizadas, a regra de exclusividade garante que apenas um será processado pelo banco de dados.
Numa blockchain convencional, cada nó verifica cada transação de acordo com estas três regras. Mais adiante veremos como Corda divide essa responsabilidade de maneira diferente.
Blocos de construção
Uma blockchain é literalmente uma cadeia de blocos, na qual cada bloco se liga ao anterior através de um “hash” que identifica exclusivamente o seu conteúdo. Cada bloco contém um conjunto ordenado de transações que não devem entrar em conflito entre si ou com as dos blocos anteriores, bem como um carimbo de data/hora e algumas outras informações. Assim como as transações, os blocos se propagam rapidamente pela rede e são verificados de forma independente por cada nó. Assim que uma transação aparece em um bloco, ela é “confirmada”, levando os nós a rejeitarem qualquer transação conflitante.
Quem é responsável pela criação desses blocos e como podemos ter certeza de que todos os nós concordarão com a cadeia autoritativa? Esta questão de “algoritmos de consenso” é um assunto enorme por si só, repleto de siglas maravilhosas como PoW (Prova de Trabalho), PBFT (Tolerância Prática a Falhas Bizantinas) e DPoS (Prova de Participação Delegada). Não entraremos em tudo isso aqui. Basta dizer que os blockchains autorizados para empresas usam algum tipo de esquema de votação, onde os votos são concedidos a “nós validadores” que são coletivamente responsáveis. O esquema garante que, enquanto uma boa maioria dos nós validadores estiver funcionando correta e honestamente, as transações entrarão na cadeia em uma ordem (quase) justa, os carimbos de data e hora estarão (aproximadamente) corretos e as transações confirmadas não poderão ser posteriormente revertidas.
Antes de discutir alguns dos desafios das blockchains, gostaria de esclarecer três pontos adicionais. Primeiro, embora eu esteja usando um livro-razão financeiro como exemplo ao longo deste artigo, o modelo de entrada-saída de transações suporta uma variedade muito mais ampla de casos de uso. Cada linha pode conter um objeto de dados rico (pense em JSON) contendo muitos tipos diferentes de informações – na verdade, Corda usa a palavra “estado” em vez de “linha” por esse motivo. Os estados mais ricos não alteram nada de fundamental nas regras de transação: a correção ainda é definida em termos de entradas e saídas, a autorização ainda é necessária para cada entrada e a exclusividade garante que cada saída só possa ser gasta uma vez.
Em segundo lugar, existem muitos casos de uso de blockchain em que as linhas são apenas criadas no banco de dados e nunca excluídas. Essas aplicações estão relacionadas ao armazenamento geral de dados, registro de data e hora e reconhecimento de firma, em vez de manter algum tipo de livro-razão em constante mudança. Nessas aplicações somente de dados, as transações adicionam dados em suas saídas, mas não consomem nenhum em suas entradas, permitindo que as regras de correção, autorização e exclusividade sejam simplificadas. Embora os casos de uso somente de dados sejam um foco crescente de nosso próprio desenvolvimento na MultiChain, apenas os menciono aqui de passagem, uma vez que o Corda claramente não foi projetado com eles em mente.
Finalmente, vale a pena notar que algumas plataformas blockchain não utilizam um modelo de entrada-saída. Ethereum apresenta um paradigma alternativo, no qual a cadeia controla um computador virtual com estado global que é gerenciado por “contratos”, e as transações não se conectam explicitamente entre si. Uma discussão sobre o modelo Ethereum em blockchains permitidos está além do nosso escopo aqui, mas veja Este artigo para uma explicação detalhada e crítica. Uma vantagem importante do paradigma de entrada-saída é que a maioria das transações pode ser processada em paralelo e independentemente umas das outras. Esta propriedade é crucial para Corda, como veremos mais adiante.
Desafios de blockchain
Imaginemos que os bancos mundiais criaram um livro-razão partilhado para representar a propriedade, transferência e troca de uma variedade de activos financeiros. Em teoria, isso poderia ser implementado em uma blockchain normal, conforme descrito acima. Cada linha conteria três colunas – um identificador de ativo como GOOG ou USD, a quantidade possuída e a chave pública do proprietário. Cada transação transferiria um ou mais ativos de suas entradas para suas saídas, com casos especiais de emissão e baixa.
Cada banco da rede executaria um ou mais nós que se conectam aos demais, propagando e verificando as transações. Os membros seniores atuariam como validadores, com a responsabilidade coletiva de confirmar, solicitar e registrar a data e hora das transações. O mau comportamento de qualquer validador seria visível para todos os nós da rede, levando à censura, banimento e/ou processos judiciais. Com tudo isto implementado, qualquer activo financeiro poderia ser movimentado através do mundo em segundos, com as regras de correcção, autorização e unicidade garantindo a integridade do livro-razão.
O que está errado com esta imagem? Na verdade, existem três problemas: escalabilidade, confidencialidade e interoperabilidade. A questão da escalabilidade é bastante simples. Nossa blockchain interbancária proposta exigiria que cada membro verificasse, processasse e armazenasse todas as transações realizadas por todos os bancos do mundo. Mesmo que isto fosse tecnicamente viável para as maiores instituições financeiras, o custo da computação e do armazenamento criaria uma barreira significativa para muitas. Certamente preferiríamos um sistema em que os participantes só vissem as transações nas quais estivessem imediatamente envolvidos.
Mas deixemos a escalabilidade de lado, já que ela pode ser resolvida com computadores caros e engenharia inteligente. Uma questão mais fundamental é a confidencialidade. Embora possa parecer utópico que todas as transações sejam visíveis em todos os lugares, no mundo real essa transparência radical é um fracasso em termos de concorrência e regulamentação. Se o JP Morgan e o HSBC trocarem um par de activos, é pouco provável que queiram que o Citi e o Banco da China vejam o que fizeram. Se a transação fosse realizada em nome dos clientes destes bancos, poderia ser ilegal para eles expô-la desta forma.
Uma solução proposta para o problema da confidencialidade são os “canais”, conforme implementados no Hyperledger Fabric. Cada canal possui determinados membros, que são um subconjunto dos nós da rede como um todo. As transações de um canal são visíveis apenas para seus membros, de modo que cada canal atue efetivamente como uma blockchain separada. Embora isso ajude com a confidencialidade, também prejudica todo o objetivo do exercício. Os ativos não podem ser transferidos de um canal para outro sem a ajuda de um intermediário confiável que esteja ativo em ambos. A dificuldade desta abordagem foi recentemente destacada pelo relatório da SWIFT prova de conceito de reconciliação, que estimou que seriam necessários mais de 100,000 canais na produção. São 100,000 mil ilhas entre as quais os bens não podem ser transferidos diretamente.
Em casos de uso somente de dados, onde as transações não consomem dados nas entradas, o problema de confidencialidade pode ser evitado criptografando ou hashing os dados nas saídas e entregando a chave de descriptografia ou dados sem hash fora da cadeia. Mas para uma transação cujas entradas consomem as saídas de outras transações, cada nó precisa ver essas entradas e saídas para validar a transação. Embora técnicas criptográficas avançadas, como ativos confidenciais e zero provas de conhecimento foram desenvolvidos para resolver parcial ou completamente este problema para livros contábeis, estes impõem uma carga de desempenho significativa e/ou não podem ser generalizados para qualquer regra de correção.
Finalmente, vamos falar sobre interoperabilidade. Num mundo ideal, todos os bancos adeririam imediatamente à nossa blockchain global no dia em que fosse lançada. Na realidade, porém, vários blockchains seriam adotados por diferentes grupos de bancos, com base na geografia ou em relacionamentos pré-existentes. Com o tempo, um membro de um grupo pode querer começar a transacionar com um membro de outro, transferindo um ativo entre cadeias. Tal como acontece com os canais, isto só pode ser alcançado com a ajuda de um intermediário confiável, anulando o propósito do blockchain.
Corda pretende resolver estes problemas inter-relacionados de escalabilidade, confidencialidade e interoperabilidade através de uma reformulação radical de como funcionam os livros distribuídos.
Visão parcial de Corda
A diferença fundamental no Corda é fácil de explicar: cada nó vê apenas algumas, e não todas, as transações processadas na rede. Embora um único livro-razão lógico e conceitual seja definido por todas essas transações, nenhum nó individual vê esse livro-razão em sua totalidade. Para fazer uma comparação, em qualquer momento, cada nota de dólar do mundo está num determinado lugar, mas ninguém sabe onde estão todas.
Então, quais transações um nó Corda vê? Em primeiro lugar, aquelas em que está diretamente envolvida, porque é proprietária de um dos insumos ou produtos dessa transação. Em um livro-razão financeiro, isso inclui todas as transações nas quais um nó envia ou recebe fundos. Digamos que Alice crie uma transação que consuma seus US$ 15 em uma entrada e tenha duas saídas – uma com US$ 10 para mim e outra com US$ 5 em “troco” para ela. Depois que Alice me enviar esta transação, posso verificar se ela está correta e autorizada, verificando se as entradas e saídas estão equilibradas e se Alice assinou.
Contudo, esta transação por si só não é suficiente. Também preciso verificar se o estado de entrada $15 de Alice realmente existe e se ela não apenas o inventou. Isso significa que preciso ver a transação que criou esse estado e verificar também sua correção e autorização. Se esta transação anterior, que enviou US$ 15 para Alice, tiver uma entrada de US$ 10 pertencente a Denzel e outra entrada de US$ 5 de Eric, então também devo verificar as transações que as criaram. E assim por diante, até a transação de “emissão” original na qual o ativo foi criado. O número de transações que preciso verificar dependerá de quantas vezes os ativos mudaram de mãos e da extensão da ramificação retroativa.
Como os nós Corda não veem automaticamente todas as transações, como eles obtêm as que precisam? A resposta vem do remetente de cada nova transação. Antes de Alice criar uma transação consumindo seus US$ 15, ela já deve ter verificado a transação na qual a recebeu. E como Alice deve ter aplicado a técnica recursiva acima, ela terá uma cópia de cada transação necessária para esta verificação. Bob simplesmente solicita essas transações de Alice como parte de sua interação. Se Alice não responder adequadamente, Bob conclui que Alice está tentando enganá-lo e rejeita o pagamento recebido. No caso em que Bob recebe uma nova transação cujas entradas têm múltiplos proprietários, ele pode obter as provas necessárias de cada um.
Apresentando notários
Até agora explicamos como Bob pode verificar a exatidão e a autorização de uma transação recebida, incluindo recursivamente reconstituir as origens de suas entradas. Mas há mais uma regra na qual precisamos pensar: a singularidade. Digamos que Alice seja maliciosa. Ela pode gerar uma transação na qual paga US$ 10 a Bob e outra em que paga os mesmos US$ 10 a Charlie. Ela pode enviar essas transações para Bob e Charlie respectivamente, juntamente com uma prova completa de correção e autorização de cada um. Embora ambas as transações entrem em conflito por consumirem o mesmo estado, não há como Bob e Charlie saberem disso.
Os blockchains convencionais resolvem esse problema fazendo com que cada nó veja cada transação, tornando os conflitos fáceis de detectar e rejeitar. Então, como o Corda, com sua visibilidade parcial das transações, resolve o mesmo problema? A resposta é com a ajuda de um “notário”. Um notário é uma parte confiável (ou partes que trabalham em conjunto) que garante que um determinado estado seja consumido apenas uma vez. Cada estado possui um cartório específico, que deve assinar qualquer transação em que aquele estado seja consumido. Uma vez feito isso, o notário não deve assinar outra transação para o mesmo estado. Os notários são os guardiões da rede da singularidade das transações.
Embora cada estado possa ter um notário diferente, todos os estados consumidos por uma determinada transação devem ser atribuídos ao mesmo. Isso evita problemas relacionados a conflitos e sincronização, que devem ser familiares para aqueles com experiência em bancos de dados distribuídos. Digamos que Alice e Bob concordem em trocar os $ 10 de Alice pelos £ 7 de Bob. A transação para esta troca deve ser assinada pelos cartórios de ambos os estados, mas qual deles vai primeiro? Se o notário de Alice assinar, mas o de Bob falhar por algum motivo, então Alice ficará com uma transação incompleta e nunca mais poderá usar seus $ 10. Se os sinais de Bob forem os primeiros, ele será exposto de forma semelhante. Embora possamos gostar que os notários simplesmente trabalhem em conjunto, na prática isto requer confiança mútua e a utilização de um protocolo de consenso, complicações que os criadores do Corda optaram por evitar.
Se forem necessários estados com diferentes notários como entradas para uma única transacção, os seus proprietários executam primeiro transacções especiais de “mudança notarial”, que movem um estado de um notário para outro, sem alterar mais nada. Portanto, quando as partes estão construindo uma transação com múltiplas entradas, elas devem primeiro concordar com o notário a ser utilizado e, em seguida, realizar as alterações notariais necessárias. Embora o desenvolvedor em mim tenha sentido uma pequena pontada de dor ao ler sobre essa solução alternativa, não há razão para que ela não funcione enquanto os notários continuarem.
Deve também ser esclarecido que, embora cada notário seja um interveniente lógico único em termos de assinatura de transacções, não necessita de estar sob o controlo de uma única parte. Um grupo de organizações poderia administrar um notário coletivamente, usando um protocolo de consenso apropriado no qual a maioria dos participantes fosse necessária para gerar uma assinatura válida. Isso evitaria que qualquer parte mal-intencionada prejudicasse a exclusividade ao assinar transações conflitantes. Em teoria, poderíamos até permitir que cada nó da rede participasse desse tipo de reconhecimento de firma compartilhado, embora nesse caso estaríamos mais ou menos de volta a um blockchain convencional.
Tomando pontuação
Vamos recapitular as principais diferenças entre Corda e blockchains convencionais. No Corda, não existe um blockchain unificado que contenha todas as transações confirmadas. Os nós veem apenas as transações nas quais estão diretamente envolvidos ou das quais dependem historicamente. Os nós são responsáveis por verificar a exatidão e autorização da transação, mas contam com notários confiáveis para verificar a exclusividade.
É claro que Corda envolve muito mais do que isso: o uso de certificados digitais para autenticar identidade, “mapas de rede” para ajudar os nós a se encontrarem e confiarem uns nos outros, “contratos” por estado que definem a correção da perspectiva de cada estado, um versão determinística da Java Virtual Machine que executa esses contratos, “fluxos” que automatizam as negociações de transações, “janelas de tempo” que restringem as transações por tempo, “oráculos” que atestam fatos externos e “CorDapps” que agrupam muitas coisas para fácil distribuição . Embora cada um desses recursos seja interessante, equivalentes para todos podem ser encontrados em outras plataformas blockchain. Meu objetivo neste artigo é focar naquilo que torna o Corda único.
Então Corda cumpre sua promessa? Resolve os problemas de escalabilidade, confidencialidade e interoperabilidade dos blockchains? E ao fazer suas escolhas específicas, qual é o preço que Corda paga?
Mais escalável, às vezes
Vamos começar com escalabilidade. Aqui, a vantagem do Corda parece clara, já que os nós só veem algumas das transações em uma rede. Em uma blockchain regular, o rendimento máximo é limitado pela velocidade do nó mais lento no processamento de transações. Por outro lado, uma rede Corda poderia processar um milhão de transações por segundo, enquanto cada nó vê apenas uma pequena fração disso. A escalabilidade também se estende aos notários, uma vez que a tarefa de assinar transações para fins de exclusividade pode ser distribuída entre muitos notários diferentes, cada um dos quais é responsável por uma pequena proporção dos estados da rede.
Dito isto, há uma situação em que o Corda tem um desempenho muito pior do que um blockchain. Isto ocorre quando um nó recebe uma nova transação que depende de muitas outras transações que ele não viu antes. Imagine um ativo altamente líquido que foi emitido há 10 anos e muda de mãos a cada cinco minutos. O caminho desde qualquer nova transação até a emissão deste ativo será superior a um milhão de transações. Quando um nó recebe esse ativo pela primeira vez, ele deve recuperar esses milhões de transações do remetente e verificar cada uma delas. A uma taxa (bastante otimista) de 1000 transações por segundo, haveria um atraso de 17 minutos antes que o destinatário pudesse enviar o ativo – claramente muito tempo para algo tão líquido.
Por que os blockchains não sofrem com esse problema? Como os nós veem e verificam cada transação à medida que ela ocorre, eles atualizam constantemente o estado do livro-razão e sabem exatamente quem possui cada ativo no momento. Mesmo que um nó nunca tenha mantido um determinado ativo antes, ele pode verificar instantaneamente a transação na qual o recebeu e, em seguida, enviá-lo imediatamente. Em outras palavras, os nós do blockchain precisam verificar as transações que podem não ser relevantes para eles, mas, ao fazê-lo, pagam antecipadamente o custo de verificação de qualquer transação futura que possa ocorrer. Embora os nós Corda estejam menos ocupados no geral, eles executam o risco de precisar fazer uma enorme quantidade de trabalho a qualquer momento. Não há nada escalável nisso.
Um pouco mais confidencial
Vamos passar para a confidencialidade. No Corda, os nós veem apenas algumas transações da rede, o que inegavelmente significa melhor privacidade do que os blockchains convencionais. No entanto, Corda está longe de resolver o problema de confidencialidade, porque os nós ainda veem algumas transações que não são da sua conta. Para dar um exemplo simples, se Alice paga $ 10 a Bob, então Bob envia esses $ 10 para Charlie, o nó de Charlie deve ver a transação entre Alice e Bob, mesmo que não o envolva. No momento em que Alice pagou a Bob, ela não tinha como saber quem poderia ver essa transação no futuro, e qualquer pessoa poderia recebê-la a qualquer momento.
Para ser justo, os desenvolvedores do Corda estão cientes deste problema e discutem-no no capítulo 15 do seu White paper técnico. O artigo sugere estratégias simples, como o uso de múltiplas chaves públicas por entidade ou a redução da rastreabilidade, devolvendo ativos aos emissores para reemissão (semelhante aos “misturadores de moedas” de criptomoedas). Ele também menciona possibilidades futuras mais avançadas, como o uso de redes de anonimato do tipo Tor para ocultar os endereços IP dos participantes e o aproveitamento de provas de conhecimento zero ou da Intel. enclaves seguros validar transações sem revelar seu conteúdo. Embora todas essas sugestões sejam válidas, elas também podem ser aplicadas a blockchains regulares usando o modelo de entrada-saída e, de fato, têm sido aplicadas em criptomoedas como Dash, Zcash e Verge. Portanto, a única vantagem exclusiva do Corda em termos de confidencialidade continua sendo a reduzida visibilidade das transações – na melhor das hipóteses, uma solução incompleta.
Tudo na criação
Para entender melhor a vantagem de escalabilidade e confidencialidade do Corda, devemos observar como isso depende da densidade e da sobreposição das relações entre as transações. Imagine uma “árvore genealógica” das transações realizadas em rede, na qual os pais de cada transação são os anteriores dos quais ela depende imediatamente. Especificamente, quando a saída de uma transação é consumida pela entrada de outra, desenhamos uma seta representando o relacionamento entre pai e filho. As transações podem ter qualquer número de pais e filhos, embora na maioria dos casos esperaríamos apenas alguns.
Dada esta árvore genealógica, definimos os ancestrais de uma transação como seus pais, avós, bisavós e assim por diante. Os “Adão e Eva” da nossa árvore são as transações de emissão que criaram ativos e não têm pais próprios. Como nas árvores genealógicas normais, duas transações não podem ser ancestrais uma da outra. Em termos formais de ciência da computação, este é um gráfico acíclico direcionado ou DAG, em que ancestralidade é definida como o fechamento transitivo da relação parental.
Lembre-se de que quando um nó Corda processa uma transação, ele deve baixar e verificar todos os ancestrais dessa transação, exceto aqueles que já viu antes. Portanto, se a árvore genealógica for profunda, as novas transações recebidas poderão ter um grande número de ancestrais que precisam ser verificados, desencadeando o problema de escalabilidade do Corda. Além disso, se a árvore genealógica contiver um alto grau de cruzamento, os ancestrais de uma nova transação poderão incluir muitas ou a maioria das transações passadas na rede. Nesse caso, o Corda oferecerá poucas vantagens em termos de privacidade.
Por outro lado, se a árvore genealógica de transações for superficial e contiver muitas ilhas desconectadas que não interagem entre si, as vantagens do Corda vêm à tona. Os nós nunca precisarão verificar um grande número de transações de uma só vez e podem ser mantidos no escuro sobre a maioria das transações que não estão relacionadas às suas. Se for utilizado como um livro-razão financeiro, poderemos dizer que o Corda é ideal para mercados altamente fragmentados, cujos activos raramente mudam de mãos.
Interoperabilidade para a vitória
Aqui está uma área em que Corda realmente brilha. Imagine duas redes Corda separadas, com diferentes conjuntos de ativos e participantes. Em algum momento, um participante de uma rede deseja enviar um ativo para alguém da outra. Ao contrário dos blockchains convencionais, não há expectativa de que um nó tenha verificado todas as transações anteriores, portanto, o nó que recebe este novo ativo não experimentará nada de incomum. Quando a transação chega, ele simplesmente solicita e verifica o histórico relevante, sem saber que se trata de uma “rede separada”. Para esticar um clichê, poderíamos dizer que não há estranhos em Corda – apenas amigos que ainda não se conheceram.
Na realidade, as coisas não são tão simples. Qualquer nó Corda decide explicitamente em quais notários confiar, uma vez que um notário mal comportado pode causar problemas financeiros. Além disso, os nós precisam de um “certificado” concedido por um “porteiro” para se conectarem a outros nós de uma rede, uma vez que não podemos permitir que membros aleatórios do público comecem a se conectar aos nós e desperdiçar seus recursos. Portanto, antes que um nó em uma rede possa começar a solicitar e verificar transações de outra rede, ele precisará ser adicionado à sua lista de notários confiáveis e obter o certificado apropriado. Embora isto envolva alguma configuração e administração manuais, é o mínimo que se pode esperar de um sistema desta natureza. No geral, é justo concluir que a interoperabilidade é a grande vitória da Corda sobre as blockchains convencionais.
Reintermediação
É hora de falar sobre desintermediação, o elefante na sala de Corda. No contexto dos blockchains, a desintermediação significa que cada participante pode verificar cada transação por si mesmo, sem depender do bom comportamento de terceiros. Em minha visão, a desintermediação é a principal vantagem dos blockchains em relação aos bancos de dados centralizados, nos quais todos os participantes dependem totalmente do proprietário do banco de dados. Se os participantes de uma rede tiverem um intermediário em quem possam confiar, e não houver nenhum argumento comercial ou regulatório para a desintermediação, então há nenhum ponto no uso de um blockchain. Bancos de dados centralizados são mais rápidos e eficientes e evitam o problema de confidencialidade das transações.
Então, os participantes de uma rede Corda conseguem a desintermediação? Bem, sim, sim e sim, mas não. Para entrega de transações, Corda marca a caixa, pois os nós envolvidos em uma transação conversam diretamente entre si. Em termos de correção e autorização, também está em boa forma, pois cada nó é capaz de verificar essas propriedades por si mesmo. No entanto, quando se trata de verificar a exclusividade da transação, Corda falha no teste de desintermediação. Os nós não podem confirmar a exclusividade por si próprios, uma vez que não veem todas as transações na rede e a tarefa é terceirizada para notários confiáveis.
Os participantes do Corda estão à mercê dos notários de diversas maneiras. Primeiro, um notário pode recusar-se a assinar uma transação, mesmo que os seus insumos consumam resultados que nunca tenham sido utilizados antes. Num livro razão financeiro, isto impede que alguém envie ou troque os seus activos. Em segundo lugar, um notário poderia assinar duas transacções contraditórias que consumissem a mesma produção, levando duas partes a acreditar que receberam a mesma coisa. À medida que ambos os destinatários do activo duplicado o enviam ou trocam em transacções posteriores, o contágio espalha-se e a integridade de todo o livro-razão poderá em breve ser prejudicada. Finalmente, um notário pode recusar-se a assinar uma transacção de “mudança notarial” para transferir um estado para um concorrente, mantendo efectivamente o proprietário do activo como refém. Para uma transação envolvendo estados com notários diferentes, é difícil dizer que Corda introduz mais intermediação do que um banco de dados centralizado, porque vários terceiros estão no controle.
Para colocar este risco em perspectiva, vale lembrar que os notários Corda não precisam ser controlados por uma única organização. Eles também podem consistir em um grupo de nós executando um algoritmo de consenso que pode tolerar maus atores. Nesse caso, um notário funcionará bem, desde que a maioria de seus nós membros siga as regras. Superficialmente, isso soa mais como um blockchain, que depende do bom comportamento da maioria dos validadores. No entanto, em Corda os riscos são significativamente maiores. O pior que uma conspiração de validadores de blockchain pode fazer é impedir que algumas transações sejam confirmadas. Um notário Corda malicioso também pode assinar transações conflitantes, enviando o livro-razão para um abismo inconsistente.
Um animal estranho
Juntando escalabilidade, confidencialidade, interoperabilidade e desintermediação, é difícil chegar a um veredicto simples sobre a alternativa Corda. No geral, da perspectiva deste desenvolvedor de plataforma blockchain, parece, bem… atraente, mas estranho. Projetadas para resolver os principais problemas de escalabilidade e confidencialidade, as soluções da Corda são incompletas e dependem muito do formato da “árvore genealógica” da transação. No entanto, para alcançar estas vitórias parciais, Corda perde uma propriedade central das blockchains – a remoção de intermediários de transação. Embora o Corda seja, sem dúvida, excelente em interoperabilidade, isso é realmente suficiente?
Se quiséssemos ser céticos, poderíamos dizer que a equipe de Corda recebeu uma tarefa impossível – projetar um tipo de blockchain que se adequasse aos bancos que financiam o R3. Mas o principal benefício dos blockchains em relação aos bancos de dados centralizados é a desintermediação, que tem o preço da redução da confidencialidade. Como poderia este compromisso fazer sentido para as instituições financeiras que ganham dinheiro agindo como intermediárias e são altamente sensíveis em relação à privacidade? Visto sob esta luz, pode-se elogiar o Corda como um compromisso heróico, mas em última análise insatisfatório, entre o desejo dos membros do R3 de fazer algo blockchain e as restrições comerciais e regulatórias sob as quais eles existem.
Depositário 2.0
Mas prefiro adotar uma abordagem mais positiva. Em vez de nos concentrarmos na comparação com blockchains, podemos ver o Corda como uma grande atualização técnica para o status quo financeiro. Basta substituir a palavra “notário” por “custodiante” e tudo se encaixará perfeitamente. (A custodiante é uma instituição financeira que detém activos em nome de terceiros.) Sim, os notários são intermediários, que podem bloquear transacções e permitir a ocorrência de conflitos, mas isto também se aplica aos depositários de hoje. Uma “transação de mudança notarial” pode ser vista como a transferência de ativos de um custodiante para outro. E as transações Corda são assinadas por apenas um notário pela mesma razão que gostamos que as trocas de ativos ocorram num só lugar – para evitar que qualquer uma das partes fique sem dinheiro.
Olhando para Corda desta forma, podemos ver como ele melhora o modelo tradicional de custódia:
- Define um paradigma computacional padrão e um formato para expressar ativos financeiros e outros compromissos contratuais.
- Fornece software de código aberto para interpretar e executar esses compromissos, garantindo que as partes envolvidas na transação e os custodiantes concordem com o resultado de cada transação.
- Custodiantes multipartidários complexos que protegem contra abusos podem ser criados (usando apenas software!) aproveitando algoritmos de consenso tolerantes a falhas.
- Um processo padrão (“mudança notarial”) é definido para a transferência de ativos entre custodiantes, e nenhum custodiante pode recusar.
- Os custodiantes não podem utilizar um ativo sob sua custódia sem o consentimento do proprietário, uma vez que as transações também devem ser assinadas pelos proprietários dos seus insumos.
Estou longe de ser banqueiro, mas para mim tudo isso parece bastante promissor. E talvez o Corda pudesse igualmente ser aplicado a outros setores com estruturas de custódia complexas, como seguros ou transporte marítimo. Embora o design de Corda possa não proporcionar a desintermediação total de uma blockchain, ele propõe uma transformação poderosa para indústrias nas quais os intermediários desempenham um papel essencial.
Uma vez que seguimos esta linha de pensamento, surge inevitavelmente uma questão: se já confiamos aos notários a tarefa de vida ou morte de verificar a unicidade, porque não confiar neles também para a correcção e autorização? Corda já possui a noção de “notário validador”, que verifica integralmente as transações antes de adicionar sua assinatura. Em vez de nós regulares do Corda baixarem e verificarem os ancestrais de suas transações, por que não perguntar a um notário? Isso poderia ajudar na escalabilidade e na confidencialidade, uma vez que a maioria dos nós não veria nenhuma transação além das suas. Poderíamos até sugerir que os notários de uma rede confiem plenamente uns nos outros, portanto não há necessidade de se preocupar com os antepassados. O notário de cada estado poderia atestar a sua validade, verificando apenas a transação que o criou com a ajuda de outros notários.
Deixe Corda ser Corda
Tudo isso nos leva de volta ao ponto de partida: Corda não é realmente um concorrente dos blockchains convencionais, incluindo o MultiChain. Corda é Corda – um novo tipo interessante de livro-razão distribuído, que foi otimizado para as necessidades de quem o financia. Não tenho ideia se o Corda acabará por ter sucesso ou fracassar, porque não conheço os seus custos e benefícios no mundo real em comparação com a forma atual de fazer as coisas. Mas não importa o que aconteça no futuro, certamente vale a pena estudar em termos de filosofia e design.
Quanto ao MultiChain, estamos adotando uma abordagem diferente. Para roubar uma linha de The West Wing, estamos determinados a “deixar o blockchain ser blockchain”. Blockchains são o que são e não temos planos de transformá-los em algo diferente. Como infraestrutura de dados para uma aplicação partilhada, uma blockchain representa uma compensação específica quando comparada com uma base de dados centralizada – um ganho na desintermediação ao custo de uma confidencialidade reduzida. E estamos trabalhando duro para tornar o MultiChain 2.0 o melhor possível blockchain plataforma para desenvolvedores de aplicativos usarem.
Por favor, poste comentários no LinkedIn.
Fonte: https://www.multichain.com/blog/2018/05/r3-corda-deep-dive-and-technical-review/
- Conta
- Siglas
- ativo
- Adicional
- Vantagem
- algoritmo
- algoritmos
- Aplicação
- aplicações
- arquitetura
- ÁREA
- artigo
- ativo
- Ativos
- público
- autorização
- Bank
- Banco da China
- Bancário
- bancos
- MELHOR
- Projeto de lei
- blockchain
- Caixa
- Prédio
- Pacote
- negócio
- casos
- Causar
- Chefe executivo
- certificado
- certificados
- alterar
- canais
- a verificação
- Cheques
- criança
- Crianças
- China
- Citi
- encerramento
- comentários
- comercial
- comum
- Empresa
- competição
- concorrentes
- Ciência da Computação
- computadores
- conflito
- Consenso
- consentimento
- consumir
- conteúdo
- conteúdo
- contratos
- Corda
- custos
- Criar
- cruzeiro
- criptomoedas
- criptomoedas
- criptografia
- Atual
- Custódia
- Clientes
- DAG
- Dash
- dados,
- armazenamento de dados
- banco de dados
- bases de dados
- dia
- acordo
- atraso
- entregando
- Entrega
- Design
- Developer
- desenvolvedores
- Desenvolvimento
- DID
- digital
- Ledger distribuído
- Dólar
- elefante
- Engenharia
- Empreendimento
- ethereum
- exchange
- Trocas
- Exercício
- tecidos
- feira
- família
- Moda
- Funcionalidades
- Finalmente
- financeiro
- Instituições financeiras
- final
- Primeiro nome
- primeira vez
- Foco
- formato
- cheio
- financiamento
- fundos
- futuro
- Geral
- Global
- blockchain global
- Bom estado, com sinais de uso
- governo
- ótimo
- Grupo
- Crescente
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Esconder
- Alta
- Destaque
- história
- Como funciona o dobrador de carta de canal
- HTTPS
- enorme
- idéia
- Dados de identificação:
- Ilegal
- Incluindo
- indústrias
- INFORMAÇÕES
- Infraestrutura
- Instituição
- instituições
- com seguro
- interação
- interesse
- Interoperabilidade
- envolvido
- IP
- emissão
- questões
- IT
- Java
- Trabalho
- juntar
- Chave
- chaves
- Conhecimento
- grande
- conduzir
- Liderança
- principal
- aprendido
- Ledger
- Legal
- Nível
- leve
- Line
- Líquido
- Lista
- longo
- principal
- Maioria
- Fazendo
- mercado
- Mercados
- Match
- reuniões
- Membros
- menções
- milhão
- modelo
- dinheiro
- mover
- multicadeia
- rede
- networking
- redes
- nós
- Noção
- aberto
- open source
- ordem
- ordens
- Outros
- Outros
- proprietário
- proprietários
- Dor
- Papel
- paradigma
- pais
- Pagar
- pagamento
- pagamentos
- Pessoas
- atuação
- perspectiva
- filosofia
- fotografia
- plataforma
- Plataformas
- Popular
- presente
- preço
- política de privacidade
- privado
- Produto
- Produção
- prova
- propriedade
- proteger
- público
- R3
- leitores
- Leitura
- Realidade
- recapitulação
- registros
- Regulamento
- Relacionamentos
- alívio
- Requisitos
- Recursos
- aposentadoria
- rever
- Risco
- regras
- Execute
- corrida
- AMPLIAR
- Ciência
- SEA
- vê
- sentido
- conjunto
- compartilhado
- Envios
- Baixo
- Sinais
- simples
- pequeno
- So
- Software
- Soluções
- RESOLVER
- velocidade
- Passar
- propagação
- estaca
- começo
- começado
- Estado
- Unidos
- Status
- armazenamento
- loja
- lojas
- suportes
- superfície
- .
- Dados Técnicos:
- teste
- O Futuro
- Pensando
- terceiro
- tempo
- tolerância
- Rastreabilidade
- transação
- Transações
- Transformação
- Transparência
- transporte
- Confiança
- Sem hash
- us
- USD
- usuários
- Beira
- Verificação
- Ver
- Virtual
- máquina virtual
- visibilidade
- Votação
- esperar
- Ocidente
- QUEM
- Wikipedia
- ganhar
- Atividades:
- mundo
- Equivalente há
- escrita
- anos
- Zcash
- zero