Construindo um Blockchain: The Gray Paper

Background

O trem de excitação do blockchain está em um alto histórico! Existem inúmeros artigos e notícias que o chamam de maior invenção desde a internet. Por outro lado, há um acampamento igualmente grande dizendo que, embora a tecnologia seja ótima, não existe um caso de uso real .

Até recentemente, estive em algum lugar do meio. Intrigado por blockchain comecei a pesquisá-lo. Depois de ler vários artigos e white papers, senti-me confortável com alguns dos termos e conceitos. No entanto, eu ainda não tinha esse momento “aha” O conteúdo que eu estava lendo era um nível muito alto e não transmitia claramente o poder eo potencial de construção de aplicativos distribuídos e descentralizados.

Há duas semanas Blockchain Academy TLV iniciou sua sessão inaugural. A premissa da Academia Blockchain é promover uma discussão técnica ativa e produtiva sobre blocos.

Meu objetivo é explicar o que eu aprendi até agora na minha jornada de blocos de bloco, e acompanhar você através de uma implementação de bloqueio inspirado Ethereum, eu tenho trabalhado nas últimas 2 semanas.

O que não posso criar, não entendo

Durante o primeiro encontro do Blockchain TLV, Leonid Beder discutiu os conceitos básicos do blockchain, e codificou uma implementação de bloqueio básico em formato simples. A implementação incluiu a seguinte funcionalidade:

Blockchain: uma lista crescentemente crescente de registros , denominados blocos , que são vinculados e protegidos usando criptografia . Cada bloco geralmente contém um ponteiro hash como um link para um bloco anterior, um carimbo de data e hora e dados de transação. Definimos uma classe inicial com a seguinte interface:

  • Nós armazenamos todos os blocos na cadeia de blocos.
  • Nós armazenamos o conjunto de todas as transações que esperam ser processadas.
  • Método para criar novos blocos
  • Método para envio de novas transações no pool.

Blocos: Todo bloco da nossa cadeia conterá

  • Número do bloco (ou seja, “3º bloco na cadeia”)
  • transações
  • Timestamp – tempo de criação do bloco
  • Número não-arbitrário que só pode ser usado uma vez
  • O hash do bloco anterior – usando o hash anterior, tornamos a cadeia de blocos imutável

Transações: definimos uma classe de transações que continha

  • O endereço público do remetente
  • O endereço público do destinatário
  • O valor da transação.

Enviar um nó : um bloco é um banco de dados distribuído e descentralizado, onde cada nó da rede possui uma cópia completa do histórico de transações Uma vez que estamos desenvolvendo uma cadeia de bloqueio sem permissões, todos podem participar. Este método nos permite adicionar nós à rede.

Enviar uma transação : um bloco de cadeias serve como registro do histórico de transações. Embora uma transação possa ser definida de forma ampla, o caso de uso mais popular é uma transferência de fundos do usuário A para o usuário B. Esse método nos permite criar transações, esperando ser minado.

Mine a Block : as transações não são refletidas na rede imediatamente. Precisamos investir o poder computacional na validação de transações. Isso é chamado de Prova de Trabalho. Minar um bloco é a ação de executar “Prova de Trabalho” em todas as transações que foram recentemente emitidas, mas ainda não foram validadas. Não há almoços gratuitos em criptografia;)

Consenso : Consenso é o processo de todos os nós que chegam a acordo sobre o estado atual da rede. Escolhemos a abordagem da “Cadeia mais longa” (Greedy Maior Observado Subtree). Esta abordagem afirma que todos os nós aceitarão o bloqueio do nó com a maioria dos blocos. O raciocínio por trás disso, é que a cadeia de blocos mais longa possui o poder mais computacional investido nele (lembre-se, exigimos que os blocos sejam validados via PoW) e, portanto, é o mais confiável / credível.

Confira o código fonte das oficinas aqui.

Embora fosse um monte de material novo para processar em uma hora, fiquei preso 🙂 Para o final da oficina, Leonid anunciou uma surpresa!

                                                            Eu gosto de surpresas

Haveria uma competição para ver quem poderia fazer o pedido de atração mais criativo e “incrível” para o bloco de bloco básico que acabamos de construir.

Meu trabalho nas últimas 2 semanas

Eu estava com vontade de aprender mais sobre blockchain, e acredito que construir um é a melhor maneira de fazer isso. Comecei a criar uma cadeia de blocos inspirada na implementação Ethereum com as seguintes características:

  • Sistema de contabilidade – os usuários poderão registrar contas (contas externas) com um saldo e iniciar transferências de fundos. Além disso, os usuários podem registrar contas de contrato e implantar contratos inteligentes em toda a rede
  • Máquina de estado baseada em transações
  • Transações garantidas e validadas e transições de estados
  • Permita que os usuários escrevam contratos inteligentes e aplicativos descentralizados onde eles podem criar suas próprias regras arbitrárias para propriedade, formatos de transação e funções de transição do estado.

Contas

O estado compartilhado global de nós na rede é composto por contas. As contas detêm informações importantes, como

  • endereço: isso servirá como o nome da conta, semelhante ao que fizemos na oficina.
  • saldo: montante dos fundos de propriedade da conta
  • nonce : se a conta é uma conta de propriedade externa, esse número representa o número de transações enviadas pelo endereço da conta.

Minha implementação de bloqueio tem dois tipos diferentes de contas:

  • Contas externas, que são controladas por chaves privadas (via criptografia RSA)
  • Contas contratuais, que são controladas pelo código do contrato.

Estado compartilhado único em toda a rede

As contas são públicas, e você pode ver qualquer conta, dado seu endereço, e o nó foi registrado. Eu criei contas “globais” informando todos os nós da criação de uma conta na rede. Então, quando as transações da conta são despachadas para um nó, eu propagar essa transação para todos os nós na rede. Desta forma, o bloco é verdadeiramente descentralizado, e não dependemos de nós simples para informações valiosas, como existência de conta ou saldos de contas. Essencialmente, criamos um singular “estado compartilhado” entre os nós.

Registramos cada conta em cada nó, de modo que seja “global”

Diferenças entre contas externas e de contrato

A principal diferença entre os dois tipos de contas está enraizada na forma como eles podem se comunicar com outras contas na rede. Uma conta externa pode se comunicar de duas maneiras

  1. Mensagens de outras contas externas (ou seja, uma transação que move fundos da conta A para B).
  2. Invocando a execução do método em contas contratuais. Esses métodos variam, pois dependem apenas do autor do contrato e do contrato que ele / ela criou.

É importante esclarecer que as contas do contrato, em contraste com as contas externas, não podem enviar despachos explícitos para a rede. Em vez disso, as contas de contrato só podem emitir transações em resposta a outras transações que receberam.

Contas Externas

A autenticação de contas é feita via criptografia RSA. Após a inicialização da conta, um par privado de chave pública é criado e gravado no disco.

Teclas criadas no construtor ExternalAccounts. À direita, vemos a chave pública

Essas chaves são usadas para assinar digitalmente pedidos de transações de saída com as credenciais da conta. Uma implementação mais robusta sempre pede uma conta, quer ele quer ou não assinar o pedido antes de enviá-lo. Você pode ver uma implementação rudimentar deste em requestAuthForTransaction.sh.

requestAuthForTransaction.sh

Um pressuposto que fiz para esta implementação é que todas as contas concordam em assinar todos os pedidos de transações com suas credenciais.

Contas de Contrato

As contas do contrato são controladas pelo seu código. Eles simplesmente executam um código específico quando invocados e têm controle direto sobre o equilíbrio.

Um dos desafios aqui foi descobrir como suportar isso em uma maneira dinâmica, distribuída, descentralizada e de confiança. O Ethereum usa uma máquina virtual acessível a nível mundial (dado um ponteiro para o código de byte do contrato) para executar o código do contrato. Mas JS não tem uma VM globalmente acessível fora da caixa para todos os nós a serem consultados. Inicialmente, tentei implantar um contrato para todos os nós na rede como um objeto JSON com stringência, de modo que a execução do contrato poderia ser invocada de forma independente em cada nó, analisando o objeto recebido. Infelizmente, o JSON.stringify ignora métodos e funções, portanto, eliminando contratos inteligentes de suas funcionalidades em gravações. A minha solução alternativa para o envio de contratos de forma dinâmica (não codificada em cada instância de nó) em toda a rede foi a seguinte:

Implantando um Contrato

  1. Escreva um contrato inteligente como um objeto JS simples.

2. Envolva-o com parênteses para torná-lo uma string e remova todas as novas linhas para que possa ser processado através do método JS eval incorporado quando outros nós a recebem.

3. Envie a string como dados para todos os nós na rede.

Implantando um contrato em toda a rede

Isso permite que os nós criem contratos on-line e os implante na rede. Agora, um nó pode receber um contrato que não conheceu antes e executar seu código! 😀😀😀

Escrevendo atualizações do contrato

Inicialmente, podemos analisar o contrato stringificado usando o método JS eval incorporado, que leva uma seqüência de caracteres e o avalia como uma declaração JS.

Depois de executar um método que altera o estado do contrato (ou seja, altera o saldo do contrato), queremos armazenar o contrato na íntegra, sem perder o acesso aos nossos métodos.

Portanto, usaremos o método de stringis JSON e passamos uma função “substituição” personalizada , instruindo-o sobre como seqüenciar as funções.

No futuro, para ler a versão especialmente rigorosa do contrato, passaremos um “reviver” personalizado para o método JSON.parse.

Emitir transações através da execução do contrato

Algumas mutações contratuais só podem atualizar o estado interno do contrato. Outras execuções de contrato podem “emitir” transações que efetuam o estado da rede. Por exemplo, um contrato que detém fundos (os contratos regem seus próprios fundos) pode enviá-los a um usuário específico após uma determinada condição ser cumprida. Essas transações emitidas são ouvidas e colocadas na fila de mineração, de forma semelhante a outras transações na rede. Eles devem ser validados antes de serem gravados no bloco. O fluxo parece assim:

Uma transação emitida por meio de um pedido de mutação do contrato, anexado ao mempool

Contratos inteligentes com permissões

Chamar um contrato inteligente simplesmente invoca um método que resulta em uma emissão de transação. Os contratos são implantados globalmente e gostaríamos de uma maneira fácil de controlar quem pode invocar métodos de contrato. Gostaríamos de permitir que os usuários criem contratos que suportem permissões de usuários. Por exemplo, em uma eleição, nós só queremos que os usuários elegíveis possam votar (podemos determinar a elegibilidade, no entanto, achamos adequado). Como todas as transações solicitadas são assinadas digitalmente via criptografia RSA pelo solicitante, podemos verificar com segurança o usuário que solicitou a execução do contrato e decidir se ele está ou não autorizado a fazê-lo.

Exemplo DAOVotingContract.ts com permissões

Validação de transação

Durante a primeira oficina, implementamos uma versão bruta das transações. Porque não tínhamos contas, nenhuma forma de identificação e nenhum saldo para atualizar, não tinham significado. Depois de implementar o acima, agora podemos verificar a legalidade, ou “correção” de uma transação solicitada

Função de transição estatal

O white paper da Ethereum descreve um cronograma de cryptocurrency como um sistema de transição do estado, onde o estado é composto pelo status de propriedade da moeda dentro do sistema. Na minha implementação, cada nó possui contas que possuem um saldo específico. Mas como o estado (equilíbrio) muda ao longo do tempo? Ethereum especifica uma Função de Transição de Estado da seguinte forma:

Ilustração do Livro Branco Ethereum

Em nossa implementação, tomaremos uma abordagem semelhante para validar transições de estado. Nós vamos:

  1. Verifique se uma transação adere à estrutura solicitada e possui todos os valores necessários.
  2. Todas as transações têm um SenderNodeId e um SenderAddress. Embora esta seja uma hipótese insegura, para a implementação atual e para a falta de um cliente de usuário apropriado, assumiremos que todas as contas concordam e assinam digitalmente todos os pedidos de transações de saída com suas credenciais. Antes de ser submetido à fila de mineração, verificaremos essa assinatura digital .
  3. Verifique se o nonce corresponde ao nonce na conta do remetente .
blockchain.ts

Depois de verificar a transação através do método stateTransitionValidation , podemos adicionar a transação para a fila de mineração e a minha. É importante notar que essas transações ainda não modificaram o estado da rede . Após o consenso, se essas transações pertencem à cadeia mais longa, e é uma transação que move fundos, validaremos que o remetente tenha um saldo de conta adequado. Um exemplo de filtragem de transações ilegais (o remetente A que envia mais fundos, ele possui) pode ser visto em apropriadoFunds.sh.

apropriadoFunds.sh

Para visualizar este processo:

Exemplo de Contratos

Agora que nosso bloco possui contas, transações validadas e uma maneira de criar e propagar contratos em toda a rede, podemos observar alguns contratos reais. Esses contratos são bastante legais e mostram a flexibilidade e o potencial de criar contratos inteligentes na cadeia de blocos.

Contra-contrato

Para começar as coisas, vejamos um contrato simples que atua como um contador. Toda vez que o método incrementValue do contrato é chamado, incrementaremos o contador. Observe que qualquer pessoa pode invocar este código de contrato.

const CounterContract = {
balance: 0,
counter: 0,
incrementValue: function() {
this.counter++;
},
id: 1,
fromAddress: Alice,
call: function() {
return {
getBalance: this.balance,
getFromAddress: this.fromAddress
};
},
send: function() {
return {
incrementValue: this.incrementValue
};
},
abi: function() {
return {
sendables: this.incrementValue.toString()
};
}
};

Invocamos o código do contrato enviando uma solicitação mutateContract /: CounterContract PUT . Este contrato tem seu próprio estado interno que governa. Quando o incrementValue é chamado, o estado do contrato emite uma transação, solicitando a mutação do estado do contrato. Depois de ser minado, a mutação é escrita na cadeia de blocos, de modo que tenhamos um registro de quem usou o contrato (iniciou o pedido de mutação) e como o contrato foi usado.

Este contrato pode ser executado através do cliente Postman ou executando o script counter_contract.sh no diretório shell-scripts.

Transferir fundos após a data arbitrária Contrato

Um cenário mais realista para um contrato inteligente é transferir fundos da conta A para a conta B. O contrato a seguir é baseado no cenário em que Bob quer transferir 400 moedas para Alice, após uma data arbitrária ter passado. Em vez de usar um serviço de terceiros, ou sistema de custódia, ele pode criar um contrato inteligente que verifica quando a data passou, e iniciar uma transferência de fundos.

const MoveFundsAfterDateContract = {
balance: 400,
expirationDate: new Date(October 13, 2016 11:13:00),
id: 2,
fromAddress: Bob,
call: function() {
return { getBalance: this.balance, getFromAddress: this.fromAddress };
},
send: function() {
return { changeBalance: this.changeBalance };
},
abi: function() {
return { callables: this.call(), sendables: this.send() };
},
moveFunds: function() {
var currentDate = new Date();
if (currentDate > this.expirationDate) {
return {
senderNodeId: B,
senderAddress: Bob,
recipientNodeId: A,
recipientAddress: Alice,
value: 20,
action: TRANSACTION_EXTERNAL_ACCOUNT
};
}
return null;
}
};

Quando o método moveFunds do contrato é invocado, ele verificará a data, verá que passou e transferiu fundos para Alice.

Este contrato pode ser executado através do cliente Postman ou executando o script move_funds_after_data_contract.sh no diretório shell-scripts.

DAO Vote para o contrato de bônus

Este cenário envolve um DAO (organização autônoma descentralizada) que quer dar um bônus a um de seus funcionários. Como este DAO é uma organização completamente justa 😀😀😀, devemos votar em quem é merecedor do bônus.

Mas lembre-se, o blockchain é um livro público! Portanto, no momento em que carregamos para contratar a rede, qualquer pessoa pode vê-lo e fazer chamadas para o código do contrato. Nós gostaríamos de restringir a votação somente aos funcionários da DAO. Como mencionei anteriormente, cada solicitação com credenciais de contas, é assinada digitalmente por essa conta, com sua chave privada. Desta forma, é fácil verificar a verdadeira origem dos eleitores. Então, este contrato tem um campo “autorizadoVoters” que verificaremos contra, sempre que uma conta tentar votar.

const DAOVotingContract = {
balance: 400,
id: 3,
authorizedVoters: [
{ nodeId: A, address: Alice },
{ nodeId: B, address: Eve },
{ nodeId: A, address: Gal Gadot }
],
votes: [
{
nodeId: C,
address: Gal Gadot,
votes: 0
},
{
nodeId: C,
address: Ben Affleck,
votes: 0
}
],
fromAddress: Bob,
candidateA: {
nodeId: C,
address: Gal Gadot
},
candidateB: {
nodeId: A,
address: Selena Gomez
},
call: function() {
return {
getBalance: this.balance,
getFromAddress: this.fromAddress
};
},
send: function() {
return {
moveFunds: this.changeBalance
};
},
moveFunds: function(userData, vote) {
// Check if vote requester is authorized
const authorizedVoterIdx = this.authorizedVoters.findIndex(
user =>
user.nodeId === userData.nodeId && user.address === userData.address
);
if (authorizedVoterIdx === 1) return null;
// Check if candidate requester is voting for exists
const candidateIndex = this.votes.findIndex(
candidate => candidate.address === vote
);
if (candidateIndex === 1) return null;
// Cast Vote and verify users can’t vote twice
this.votes[candidateIndex].votes++;
this.authorizedVoters.splice(authorizedVoterIdx, 1);
// Users still need to cast vote
if (this.authorizedVoters.length > 0) return;
this.votes.sort((voteA, voteB) => voteB.votes voteA.votes);
return {
senderNodeId: B,
senderAddress: Bob,
recipientNodeId: this.votes[0].nodeId,
recipientAddress: this.votes[0].address,
value: 400,
action: TRANSACTION_EXTERNAL_ACCOUNT
};
}
};

Este contrato pode ser executado através do cliente Postman ou executando o script vote_permissions_contract.sh no diretório shell-scripts.

Estes são apenas vários exemplos de contratos inteligentes. A estrutura atual permite que qualquer pessoa faça o upload de qualquer contrato (desde que adira ao formato analisável que estou usando), implante-o na rede em sessão e comece a executá-lo. Podemos criar contratos para eleições, armazenamento de arquivos distribuídos e muito mais.

Conclusão

A programação dessa cadeia de bloqueio de prova de conceito foi um desafio! É apenas a ponta do iceberg em termos de formas de melhorar e garantir. Fui um excelente momento pesquisando os conceitos e aprendendo sobre implementações e mecanismos de cadeias de blocos.

Um grande agradecimento a Leonid Beder pela graciosa introdução do blockchain e aos colaboradores da Kin , Orbs e Samsung Next para organizar a Academia Blockchain .

Você pode verificar minha implementação completa aqui.

Se você quiser continuar a discussão do blockchain, sinta-se à vontade para alcançar o Linkedin .

Por último, se você chegou até aqui, obrigado por ficar com isso 🤗🤗🙌🙌🖖🏼

 

Fonte:  https://hackernoon.com/building-a-blockchain-the-grey-paper-5be456018040

Anúncios

Hyperledger

 

Hyperledger (ou o “Projeto Hyperledger”) é um projeto colaborativo envolvendo várias indústrias, iniciado em dezembro de 2015 pela Linux Foundation,[1] seu objetivo é suportar livros razão distribuídos com base na Blockchain. O seu foco é livros razão feitos para suportar transações de indústrias globais, incluindo as principais empresas de tecnologia, financeiras e logísticas, com o objetivo de melhorar vários aspectos da performance e robustez.[2] O projeto aspira unir um número de tentativas independentes para desenvolver protocolos e padrões abertos, provendo um framework modular que suporta componentes diferentes para usuários diferentes. Isso inclui uma variedade de blockchains, cada uma com seu consenso, modelos de persistência, e serviços para identidade, controle de acesso e contratos.

Histórico

Em Dezembro de 2015, a Linux Foundation anunciou a criação do projeto Hyperledger. Os primeiros fundadores do projeto foram anunciados em Fevereiro de 2016, e mais 10 membros que compõem o conselho de administração foram anunciados em 29 de Março.[3] Em 19 de Maio, Brian Behlendorf foi apontado como diretor executivo do projeto.[4]

No inicio de 2016, o projeto começou a aceitar propostas para bases de código e outras tecnologias a serem incubadas, para potencial inclusão como componentes centrais do Hyperledger. Uma das primeiras propostas foi para uma base de código que combina trabalhos prévios feitos pela Digital Asset Holdings (Blockstream’s libconsensus) e a OpenBlockchain da IBM.[5]Posteriormente, esse projeto foi renomeado para Fabric.[6] Em maio, o livro razão distribuído da Intel (Sawtooth) também foi incubado.[7]

Membros

Os primeiros membros da iniciativa incluem empresas que trabalham com blockchain (Blockchain, ConsenSysR3), outras empresas tecnológicas (CiscoDigital Asset HoldingsFujitsuHitachiIBMIntelNECNTT DATARed HatVMware), empresas financeiras (ABN AMROANZ BankBNY MellonCLS Group, CME GroupThe Depository Trust & Clearing Corporation (DTCC), Deutsche Börse GroupJ.P. MorganState StreetSWIFTWells Fargo), e outras (AccentureCalastone, Credits, GuardtimeIntellectEUSymbiont).

Motivação do projeto

Os primeiros membros da iniciativa incluem empresas que trabalham com blockchain (Blockchain, ConsenSysR3), outras empresas tecnológicas (CiscoDigital Asset HoldingsFujitsuHitachiIBMIntelNECNTT DATARed HatVMware), empresas financeiras (ABN AMROANZ BankBNY MellonCLS Group, CME GroupThe Depository Trust & Clearing Corporation (DTCC), Deutsche Börse GroupJ.P. MorganState StreetSWIFTWells Fargo), e outras (AccentureCalastone, Credits, GuardtimeIntellectEUSymbiont).

Motivação do projeto

De acordo com o Whitepaper do Hyperledger [8]:

As a fledgling technology, existing blockchain implementations have fallen short of meeting the multitude of requirements inherent in the complex world of business transactions. Scalability challenges, and the lack of support for confidential and private transactions, among other limitations, make its use unworkable for many business-critical applications. […] To meet the varied demands of the modern marketplace, Hyperledger has been designed for a broad array of industry-focused use cases, thereby extending the work of the pioneers in the field by addressing the existing shortcomings.

Em outras palavras, baseado no cenário atual de requisitos da indústria, foi identificado que as implementações atuais de blockchain não são suficientes. Problemas de escalabilidade, falta de suporte para transações privadas e outras limitações são citados como os principais culpados. A proposta do Hyperledger é justamente suprir esses requisitos a partir de uma série de casos de uso. A ideia também consiste de estender trabalhos existentes com o objetivo de mitigar as suas limitações. Vale destacar que o Hyperledger tem o foco na indústria, mais especificamente nas relações B2B e B2C.[8]

Objetivos

O objetivo principal do Hyperledger é criar uma plataforma útil, fácil de usar e robusta onde qualquer individuo interessado em construir um software baseado em blockchain pode usa-lá como base. Por motivos práticos, o Hyperledger pode nunca alcançar esse ideal que cobre todos os casos possíveis, mas o objetivo do time é chegar o mais perto possível.[8]

De maneira mais tangível, o projeto também define objetivos mais específicos como: modularidade, extensibilidade, facilidade de uso, variedade de métodos criptográficos. Cada um desses objetivos contribui para a visão geral do Hyperledger. Por exemplo, a modularidade contribui para a interoperabilidade entre sistemas que, por sua vez, potencializa a flexibilidade do projeto, e aumenta a cobertura de casos. A extensibilidade também contribui para aumentar a cobertura de novos casos, já que funcionalidades novas podem ser adicionadas.[8]

A conceito da modularidade é importante porque incentiva o desenvolvimento externo. Uma empresa não relacionada pode desenvolver novos módulos e contribuir para a melhora de módulos existentes. Generalizando, deve ser possível construir uma blockchain que não usa nenhum componente central do Hyperledger, mas ainda assim, se encaixar no seu framework. A troca de componentes a fim de satisfazer requisitos específicos também é um conceito central do Hyperledger. Por exemplo, alguns casos pedem um algoritmo rápido de consenso que requer alguma confiança, enquanto outros casos podem pedir menos velocidade com mais confiança.[8]

A extensibilidade e modularidade se provam como requisito central do projeto porque é inviável prever todos os usos futuros do Hyperledger e de tecnologias blockchain de uma maneira geral. Facilitar as contribuições externas pode incentivar o envolvimento de pessoas que contribuirão e usarão o Hyperledger.[8]

Requisitos propostos

Transações privadas e contratos confidenciais

O Hyperledger pretende suportar uma variedade de ferramentas criptográficas que devem garantir a presença de confidencialidade e privacidade. Essas ferramentas não devem prejudicar as propriedades de privacidade. Alguns casos de uso requerem confidencialidade mais básicas e otimizadas para performance que não são adequadas para o uso financeiro. O objetivo é suportar tanto o caso otimizado par performance quanto os casos mais sofisticados que pedem algoritmos criptográficos mais complexos.[8]

Identidade e auditabilidade

Em adição as transações privadas e confidenciais, o conceito de identidade baseado numa infraestrutura de chave pública completa os algoritmos criptográficos provendo a confidenciabilidade do Hyperledger. Além da infraestrutura de chave pública, o Hyperledger também deve prover suporte a uma documentação compreensível e imutável sobre essas identidades – incluindo os requisitos de confidenciabilidade associada a elas. O objetivo da documentação é suportar os casos que envolvem troca de identidade e auditoria. É importante notar que sempre deverá ser respeito o contrato inicial sobre a anonimidade da identidade. Por exemplo, se é previso que certa entidade é totalmente anonima, a documentação não incluirá nada que quebre esse acordo.[8]

Interoperabilidade

Como o Hyperledger propõe a utilização de vários componentes independentes, a interoperabilidade é proposta para que a interação entre esses elementos ocorra apesar de possíveis implementações fundamentalmente diferentes. Por exemplo, é esperado que haja a cooperação entre mais de um tipo de blockchain. Dessa forma, é dito que existe interação quando informação é trocada e utilizada por esses componentes. Para prover esse caso de uso, é definido um protocolo que permite a comunicação entre 2 ou mais blockchains.[8]

Portabilidade

A portabilidade em um nível de infraestrutura garante que o projeto Hyperledger funcione da mesma maneira em ambientes computacionais heterogêneos. O valor da portabilidade é explicitado ao ressaltar que o projeto deverá rodar com base numa grande combinação de blockchains, falhar em prover a portabilidade fere um principio geral do Hyperledger. A portabilidade em um nível de arquitetura tem significado parecido com o de modularidade: significa abstrair as interfaces dos componentes centrais para que não haja acoplamento de ambientes. Por exemplo, o componente de contratos inteligentes pode ser movido para uma unidade diferente de produção sem que haja necessidade de mudança a esse componente. [8]

Arquitetura

A arquitetura geral do Hyperledger consiste de 4 categorias:

  • Identidade (Identity)
  • Política (Policy)
  • Blockchain e contratos inteligentes (Smart Contracts)

De uma forma geral, essas categorias possuem responsabilidades específicas: a identidade é responsável por identificar as entidades participantes, a policy é responsável por regular o acesso e responsabilidades dessas entidades e o blockchain provê o serviço p2p que guarda o estado do sistema. Vale destacar que essas categorias são divisões lógicas do software e não necessariamente significam serviços fisicamente separados.[8]

Serviços de identidade

O requisito deste componente é identificar os componentes participantes da rede. Esses componentes incluem organizações participantes, validadores e transactors; Objetos contidos no livro razão e componentes mais tangíveis como: redes, servidores e ambiente de execuções.[8]

Serviços de política 

Os serviços de política permitem o gerenciamento das políticas de acesso ao sistema. Algumas dessas políticas incluem o gerenciamento do registro de novos membros e o controle de suas entradas e saídas. Esse serviço também é responsável pelo níveis de privacidade e as políticas de confiabilidade, responsabilidade e consenso. [8]

Blockchain

Os serviços de blockchain consistem de 3 partes:

  • Protocolo P2P.
  • Livro razão distribuído.
  • Gerenciador de Consenso.

O protocolo P2P funciona em cima da infraestrutura atual da internet e provê as capacidades de intercomunicação do sistema. O livro razão distribuído é a parte central do sistema e tem características parecidas com a de outros sistemas de criptomoedas. Por exemplo, o livro razão é responsável por manter e processar o estado do sistema e isso também é comum a bitcoin. Outras responsabilidades do livro razão distribuído sob o contexto do Hyperledger incluem: validar transações; calcular o hash de toda a base de dados de forma eficiente após cada bloco; minimizar a quantidade de dados necessários necessários para uma participante operar.[8]

Por fim, o gerenciador de consenso provê uma abstração para que outras partes do sistema utilizem os algoritmos de consenso de forma transparente. A ideia central é facilitar o uso e ao mesmo tempo prover um sistema flexível o suficiente para que novos procedimentos de consenso também possam ser adicionados.[8]

Incubação de projetos

Como um dos objetivos do Hyperledger é agregar contribuições externas, é adotada uma política de incubação para o gerenciamento dessas contribuições. Unidades de trabalhos são chamados de Projetos, e esses Projetos possuem um ciclo de vida [9]:

  • Proposta
  • Incubação
  • Maturidade
  • Depreciado
  • Fim de vida

Metodologias de gerenciamento similares são comuns a outros projetos open source, como o eclispe,[10] apache [11] e o OSGEO.[12] Até Julho de 2016, o Hyperledger possui dois projetos em fase de incubação, o Fabric e o Sawtooth.[13]

Sawtooth

O projeto Sawtooth, consiste na implementação de uma plataforma para construir e rodar livros razões distribuídos. O seu objetivo de modularidade é alinhado ao Hyperledger e é um dos motivos pela sua incubação. Diferente do Bitcoin, a proposta do Sawtooth é oferecer flexibilidade, desde transferências internacionais até aplicações de internet das coisas.[14]

Fabric

O fabric também é um projeto de tecnologias blockchain que oferece a possibilidade de encaixar várias implementações para certas funcionalidades. A versão de preview disponível em Julho de 2016 possui as seguintes features[15]:

  • Blockchain permissiva com finalidade imediata
  • Ambientes para a execução de contratos inteligentes
  • Módulos de consenso PBFT, NOOPS e SIEVE
  • Framework de eventos que suporta eventos predefinidos e customizados
  • SDK Client e API REST Básicas e Ferramentas CLI

Nessa mesma versão, estão presentes alguns BUGs e limitações, como [15]:

  • Alto tempo de resposta depois de testes de estresse.
  • Não possui eventos para peers no SDK.
  • Atributos no TCert não estão encriptados.

Referências

  1.  «Linux Foundation Unites Industry Leaders to Advance Blockchain Technology». 17 de dezembro de 2015
  2. Ir para cima «Linux Foundation’s Hyperledger Project Announces 30 Founding Members and Code Proposals To Advance Blockchain Technology». 9 de fevereiro de 2016. Consultado em 17 de fevereiro de 2016
  3. Ir para cima «Open Source Blockchain Effort for the Enterprise Elects Leadership Positions and Gains New Investments». 29 de março de 2016
  4. Ir para cima «Founder of the Apache Software Foundation Joins Linux Foundation to Lead Hyperledger Project». 19 de maio de 2016
  5. Ir para cima «Incubating Project Proposal: Joint DAH/IBM proposal». Tamas Blummer, Christopher Ferris. 29 de março de 2016. Consultado em 21 de junho de 2016
  6. Ir para cima «hyperledger/fabric»GitHub. Consultado em 23 de junho de 2016
  7. Ir para cima «Sawtooth Lake Hyperledger Incubation Proposal». Mic Bowman, Richard Brown. 14 de abril de 2016. Consultado em 21 de junho de 2016
  8. ↑ Ir para:a b c d e f g h i j k l m n o «Hyperledger Whitepaper». Consultado em 5 de julho de 2016
  9. Ir para cima «Hyperledger Project Lifecicle». Consultado em 6 de julho de 2016
  10. Ir para cima «Eclipse Development Process 2015». Consultado em 6 de julho de 2016
  11. Ir para cima «Apache Incubator». Consultado em 6 de julho de 2016
  12. Ir para cima «OSGEO Incubation Process». Consultado em 6 de julho de 2016
  13. Ir para cima «Hyperledger github». Consultado em 6 de julho de 2016
  14. Ir para cima «Sawtooth introduction». Consultado em 6 de julho de 2016
  15. ↑ Ir para:a b «Fabric Releases». Consultado em 6 de julho de 2016

Bitcoin e Blockchain para leigos

O ativo financeiro digital mais famoso da internet é o BitcoinQue funciona em cima de uma tecnologia chamada “Blockchain”, que registra todas as transações envolvendo bitcoins, eletronicamente numa espécie de livro-razão imutável e criptografado.

Uma das característica do Bitcoin é mecanismo é que o registro dos negócios não é centralizado ou administrado por uma única instituição. O histórico das transações é armazenado em blocos que somente se encaixam se for utilizada certo tipo de assinatura digital.

E para haver a efetiva liquidação das operações, a cadeia de transações deve ser validada pelos demais participantes do mercado(mineradores, que emprestam sua força computacional para validar transações e criar novos bitcoins na rede, com isso ganham frações de bitcoins), para isso precisam confirmar a veracidade da chave pública divulgada. O desenvolvimento dessa intrincada engrenagem é atribuído a uma pessoa – ou a um grupo – que usou o pseudônimo de SatoshiNakamoto. Tecnologia criada em 2008, que seu autor até hoje permanece no anonimato.

Na prática a tecnologia do “Blockchain” implica mudança significativa na forma como a internet pode ser utilizada. Como distribuir e compartilhar informações, passa ser possível a transferência eletrônica da propriedade de ativos.

Por essa razão, a expectativa é que, no futuro próximo, será construída uma internet dos valores. Nesse novo ambiente, ao enviar um arquivo contendo determinado código, a propriedade do bem será automaticamente transferida.

Com o Blockchain já é possível imaginar diversos usos para a tecnologia, tais como contratos inteligentes onde se encerram e automaticamente, operações no mercado financeiro onde você poderá custodiar suas ações e trocá-las, transações de comércio internacional e a compra e venda de imóveis, registros de casamentos, nascimento e falecimento.

Hoje já existem 16,5 milhões de bitcoins no mercado. Por definição, o estoque máximo de bitcoins emitidos será de 21 milhões de unidades.

Nota: “Um” bitcoin é dividido em oito casas decimais (1.00000000), fracionando o seu valor, sendo assim você pode comprar frações de bitcoins, que no momento que foi escrito esse texto, a cotação atual comprando R$ 50,00 reais daria por volta de 0,00600000 bitcoins.

Os verificadores das transações, chamados no jargão do mercado de mineradores, podem criar bitcoins conforme o volume de cálculos executados, a rede dificulta a quantidade de bitcoins criados, pela quantidade de mineradores trabalhando nela e com tempo pelo seu processo deflacionário, escassez. A rede de mineradores é que garante o processamento das transações e a segurança do mercado(mineradores, são quaisquer pessoas que emprestam sua força computacional para validar e registrar as transações).

Leia também  Novo regulamento de criptomoedas da Coréia do Sul proíbe completamente Marketing Multinível

À prova de balas e transparente

Ninguém foi capaz, pelo menos por enquanto, de invadir o sistema para criar bitcoins falsos. Isso tem garantido a confiança na segurança da estrutura e atraído novos participantes.

Nas operações bancárias tradicionais, o Banco é a instituição responsável pelo controle do livro caixa das transações. E cobra altas tarifas por esse serviço, e sem contar que a qualquer momento pode “confiscar a sua poupança”, como já vimos há tempos atrás.

Por exemplo, para enviar um TED ou DOC, o Banco exige o pagamento de determinada remuneração. O mesmo acontece para manter a conta corrente ativa e emitir extratos, já o Bitcoin, você não precisa pagar taxas de custódia, manutenção, extratos, apenas paga pela sua transferência, uma taxa irrisória.

As operadoras de cartão de crédito também cobram para processar as transações entre lojistas e consumidores e também taxas de anuidade. O mesmo acontece com as bolsas de valores e de mercadorias para administrar a posição de cada investidor cobrando taxa de custódia e corretagens.

Em algumas transações os custos podem ser tão altos a ponto de inviabilizar as operações de pequeno montante, como no caso das transferências internacionais de valores financeiros, onde são inseridas novas taxas e ainda pode demorar dias para se concretizar, se concretizar… Onde pode aumentar o prazo, dependendo de finais de semanas e feriados.

Aceitação do Bitcoin no mundo

Uma das ideias do Bitcoin, portanto, é baratear os custos das transações, com valores irrisórios comparados a Bancos. A consequência pode ser o aumento no volume de negócios.

Por exemplo, um desenvolvedor de softwares no Brasil pode contratar os serviços de um programador na Ucrânia e pagar pelo trabalho por meio da transferência de bitcoins. Nessa situação o Bitcoin é usado como um meio de troca.

Considerando que a atual estrutura da internet já viabiliza a troca de arquivos sem barreiras geográficas, o uso em larga escala do bitcoin teria o efeito de estimular o comércio global de bens e serviços, com transferência de bitcoin para qualquer parte do mundo, com tempo médio de 10 minutos..

Leia também  Coreia do Sul prepara-se para taxar o uso do Bitcoin

Dado que o bitcoin possui cotação tanto em dólares quanto nas demais moedas mundiais, o programador ucraniano do exemplo poderia optar por manter parte de sua remuneração recebida do desenvolvedor brasileiro em bitcoins, como uma poupança.

Por fim, a decisão do programador ucraniano poderia ser a de gastar parte dos bitcoins na compra de produtos e serviços para serem consumidos, ou comprar produtos para o aperfeiçoamento do seu trabalho, tal como computadores e eletrônicos. A empresa americana Dell Computer, que fabrica computadores e notebooks, é um das lojas que aceitam bitcoin, na compra de seus produtos. Existe também um site brasileiro, chamado “Classificados BTC“, onde é possível comprar e vender produtos e serviços, com bitcoin.

Mesmo o Bitcoin não sendo considerado uma “moeda” (meio de troca, unidade de conta e reserva de valor; baseado no conceito econômico), pelos economistas, ainda sim é um excelente meio de troca, universalmente aceito, ainda que galgando.

O Bitcoin possui um valor especulativo. A cotação de um bitcoin saltou de pouco menos de US$ 300 em julho de 2015 para mais de US$ 2 mil em julho de 2017.

Para negociar Bitcoin, vale o alerta: como em todo investimento especulativo, é fundamental conhecer os riscos envolvidos, mas ao mesmo tempo o Bitcoin não é definido pelo preço, e sim sua tecnologia disruptiva que vamos descrever abaixo:

Bitcoin

  • 24h – Bitcoin funciona 24 horas por dia, 365 dias no ano, nunca para e as transações podem acontecer a qualquer hora do dia ou da noite, independente de finais de semanas e feriados.
  • Rápido – simples como enviar um e-mail ou sms, de um telefone móvel.
  • Descentralizado – não tem um controlador central, podemos transacionar com qualquer pessoa sem depender de um intermediador, uma rede ponto-a-ponto ou peer-to-peer, parecida com a rede do BitTorrent. BTC, também conhecido como Bitcoin, é um sistema livre, que não pode ser confiscado, como já aconteceu com a poupança nos anos 90.
  • Deflacionário – ao contrário do dinheiro emitido a esmo pelos Bancos Centrais, que geram inflação, o bitcoin é deflacionário e poderá ser criado somente 21 milhões, onde são criados em uma ordem decrescente.
  • Sistema de pagamento – O bitcoin é um ativo ao portadorvocê pode ser seu próprio Banco, transacionando e custodiando seus BTCs (a sigla de bitcoin).
  • Meio de troca – uma das maiores construtoras  do Brasil, a Tecnisa, aceita bitcoin como meio de pagamento em seus imóveis e várias pessoas no Brasil já entenderam as vantagens de aceitar Bitcoin e estão vendendo desde eletrônicos, até carros e casas de luxo, no Classificados BTC.
  • Privacidade – você pode ter milhões em Bitcoins, sem ter sua vida exposta pela FORBES, pois o seu nome não será divulgado na rede, você será identificado na rede com uma chave pública(parecida com essa: 1hlY78hOwe46VCd90oNuRX2j80se43WZ).
  • Segurança – a rede conjuntamente faz com que as regras sejam cumpridas, e acompanhada de uma resposta rápida dos seus usuários se alguém tentar fraldar o sistema, e também o custo benefício não compensa
  • Barato – custo irrisório, seja para enviar bitcoin para seu vizinho ou para o Japão, o custo é o mesmo.
  • Transparência – Bitcoin é um sistema de código aberto e as transações estão totalmente disponíveis para auditoria de qualquer pessoa, em tempo real, elas ficão registradas no Blockchain, o livro razão imutável com todas as transações da história do software Bitcoin registradas.
  • Inclusão social – metade da população brasileira não tem acesso a contas bancárias, por “N” motivos, mas o Bitcoin veio para mudar essa situação, onde quem quiser transferir dinheiro para qualquer parte do mundo, seja para se incluir no sistema financeiro ou ajudar em uma catástrofe mundial, você só precisa de um telefone móvel, acesso a internet e baixar o software do Bitcoin para transferir recursos para qualquer parte do mundo ou mesmo se incluir nele.
Com o Blockchain, Bitcoin é apenas o começo!

 

Fonte: https://guiadobitcoin.com.br/bitcoin-e-blockchain-para-leigos/

A segurança do bitcoin pela força computacional

 

A segurança no bitcoin é alcançada pela descentralização e pela força computacional. Este não é um vídeo técnico, mas sim uma visão geral do funcionamento da tecnologia.

Para fontes mais técnicas e detalhas, ver artigos abaixo.

Para saber mais:

Artigo “A grande inovação tecnológica do bitcoin Parte 1/2” http://www.infomoney.com.br/blogs/cam… Mining Bitcoin Wiki: https://en.bitcoin.it/wiki/Mining

Beginners’ Guide to Mining: https://99bitcoins.com/beginners-guid…

Bitcoin Mining Explained: https://chrispacia.wordpress.com/2013…

Everything you need to know about BTC mining: https://www.bitcoinmining.com/

How the bitcoin protocol actually works: http://www.michaelnielsen.org/ddi/how…

“Bitcoin – a Moeda na Era Digital”, livro publicado pelo Instituto Mises Brasil em 2014. http://www.mises.org.br/Ebook.aspx?id=99

Blog “Moeda na Era Digital” no portal InfoMoney http://www.infomoney.com.br/blogs/cam…

Está pensando em usar ou comprar bitcoin? Leia aqui antes: http://www.infomoney.com.br/blogs/cam…

Apoie este canal! Bitcoin: 1C6qa2DctPUcyAasDkgdBTJjhgpXaVjcUE

Contatos: Email: ulrich@mises.org.br

Facebook: https://www.facebook.com/fernando.ulrich

Twitter: https://twitter.com/fernandoulrich