Loading

Module 1: Propriedades do Blockchain

Nota de Estudos
Study Reminders
Support
Text Version

Hash Pointers e Estruturas de Dados

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

A próxima coisa que a gente quer falar é hash poninters e estruturas de dados.  
(Consulte O Tempo De Deslizamento: 1:00:28)  
Então o que é um ponteiro de hash? Então mais cedo eu disse na última aula que um blockchain é  
na verdade uma lista vinculada. E aí eu disse que ao contrário da lista ligada que você vê em C, C + +  
programação, onde o ponteiro é, na verdade, um endereço de memória para a localização do  
próximo bloco de dados. Aqui o ponteiro não pode ser endereço de memória porque ele é replicado  
em muitas máquinas.  
E todas essas máquinas não são apenas os mesmos tipos de máquinas, elas são na verdade de  
vários ele pode ser um telefone ou pode ser uma máquina de memória muito grande, 64 bit máquina,  
poderia ser uma máquina de 32 bit. Portanto, não se pode dizer que eu aponarei entre  
blocos ou entre nós usando endereços de memória. Então o que você faz é ter que  
tenha algo chamado de hash pointer. Então o que é um ponteiro de hash?  
Então você tem um bloco de dados e deseja localizar esse bloco de dados, certo. Então você  
têm que de alguma forma apontar para isso e manter essa alça nesse ponteiro. Então o que você faz é  
você hash, computa o hash dos dados e então você diz que esta é a minha alça no  
dados. Agora supondo que para cada bloco o hash será diferente. Assim, esse valor hash  
dirá a quem você está apontando, porque a fim de pesquisar isso, tudo o que você tem a  
do é que você tem que hash todos os blocos.  
E veja cujo hash combina com aquele que você está segurando, então você está apontando para  
aquele bloco, certo? Então você está localizando um bloco conhecendo seu valor de hash. Então isso é  
por que ele é chamado de hash pointer. Por isso, ele aponta para algumas info que são armazenadas. E a forma como  
pontos é por manter o hash das informações. Então, tendo o hash, você pode localizar  
o bloco de dados, a quem você está apontando, verificando se o seu hash está correspondendo  
com o que você está segurando.  
E então você computa o hash. E, portanto, como dissemos que hash desses dados se  
estão segurando-o, e ele corresponde a isso significa que os dados não foram adulterados porque  
se ele foi adulterado, então ele não irá combinar com o hash. E de fato, se foi adulterado  
com, então, ele irá, você não encontrará os dados. Portanto, se você tiver encontrado os dados por  
combinando o hash isso significa que seus dados também não foram adulterados.  
Assim, a integridade e localização de dados podem ser encontradas usando o ponteiro hash. Portanto, embora chamemos  
it a pointer, mas não é realmente como um ponteiro no sentido de C, C + +.  
(Consulte O Tempo De Deslizamento: 1:03:12)  
No entanto, se você quiser pictorialmente representar quando mostramos um blockchain, como  
última vez também estávamos mostrando alguma representação de você sabe quando você criou um  
dinheiro com a função de criação de moedas, então nós demos para alguém e dissemos que  
há ponteiros. Por isso, temos que representar de alguma forma ponteiros. Assim, este hash poninters  
geralmente são representados por este H com este parêntese e, em seguida, este tipo de seta.  
E isso é uma representação pictórica muito útil para visualizar o blockchain. Então, como  
você constrói estruturas de dados com ponteiros de hash?  
(Consulte O Tempo De Deslizamento: 1:03:50)  
Então, suponha que você deseje criar uma lista de blocos e deseja que assim como uma lista vinculada,  
cada bloco deve ser apontado pelo próximo bloco, certo? Então o que você faz é levar  
os dados e guarde uma parte do espaço de dados para o hash do bloco anterior, seja quem  
qualquer que seja o seu bloco anterior. Então geralmente é o bloco temporariamente anterior que  
significa um bloco que foi criado antes.  
Então, quando você cria um novo bloco, você computa o hash do bloco anterior e  
mantenha-o dentro do seu espaço. Então, então, esse bloco, quando foi criado, ele já sabia  
o que foi criado antes dele. Por isso, mantém o hash disso aqui e desta forma, no final,  
haverá um bloco que é chamado de bloco Gênesis, que não é mostrado aqui. Então  
antes disso, não haverá ponteiro. Assim, esse ponteiro estará apontando para nada ou ele  
será basicamente zero.  
Então, desta forma, se você tem alça para isso, então você tem manejo para tudo porque  
primeiro você tem que encontrar isso. Então você tem que olhar para cima o ponteiro do hash para o   anterior
bloco. Você usa isso para encontrar isso e assim vai e etc. Então tudo o que você precisa lembrar é  
o hash do último bloco criado.  
E isso também é tampador evidente, o que significa que se alguém tiver adulterado qualquer parte  
da estrutura como se eles adulteraram aqui ou adulteraram aqui ou adulteraram aqui, ele  
deve ser facilmente revelado por qualquer pessoa que queira verificar. Como isso funciona?  
(Consulte O Tempo De Deslizamento: 1:05:29)  
Suponha que alguém vá e altere alguns dados aqui, adicire ou exclua ou altere alguns  
valor. Agora esse cara, este ponteiro está realmente apontando para ser na verdade o hash deste  
coisa inteira. Agora se você alterar esses dados, então este hash o hash desse bloco inteiro  
tem que mudar. E se ele está mudando, então será facilmente evidente para alguém que é  
verificando o hash disso contra isso.  
E se achar que isso não está combinando, então esses dados foram adulterados. Então  
Portanto, o criminoso, o cara que está atacando o sistema também tem que fazer isso aqui,  
altere-o aqui. Então ele vai ter que ir trocá-lo aqui. Assim que ele mudar  
aqui, já que isso faz parte desse grande bloco, então esse hash tem que ser mudado. Então então ele tem  
para ir e ir alterar o hash do próximo bloco ’ s também.  
Então, portanto, mais a fundo em direção ao bloco Gênesis, você faz mudar mais lugares você  
têm que fazer essas mudanças. E como veremos mais adiante, é que você simplesmente não pode willy  
nilly vá e mude o hash ou altere os dados. Você tem que realmente resolver um  
puzzle de hash computacional, que é muito caro para resolver em termos de computação  
a fim de alterar qualquer coisa em qualquer uma dessas estruturas de dados direito.  
Então, portanto, se ele tiver que mudar isso não só ele tem que resolver o quebra-cabeça da computação aqui  
uma vez que ele tem que computar resolve outro quebra-cabeça aqui e ele tem que resolver outro  
quebra-cabeça aqui e se esta coisa tem muito mais destes, então ele tem que continuar resolvendo aqueles  
problemas. Agora resolver até mesmo um desses quebra-cabeças é bem difícil. Assim resolver  
assim, muitos deles são computacionalmente, você sabe muito inviável.  
E que basicamente ele dá a você a resistência de tamper ou tamper log evidente de  
blockchain. Por isso, blockchains são basicamente blocos de dados que estão conectados a cada  
outras consecutivamente com ponteiros de hash. E o ponteiro hash dá duas propriedades.  
Ele informa quem é o seu bloco anterior e também ele informa que o bloqueio anterior tem  
não foi adulterado e isto vai transitivamente para todos os blocos anteriores, para todos os  
caminho através do bloco Gênesis.  
Então, mudar qualquer coisa é ir convidar muito problema. Portanto, portanto, uma vez os dados  
foi armazenado e amassado e os ponteiros de hash lembrados, você não pode realmente  
alterá-lo.  
(Consulte O Tempo De Deslizamento: 1:08:15)  
Agora os ponteiros hash também são úteis como qualquer ponteiro quando você provavelmente fez C, C + +  
programação você usa ponteiros para criar árvores binárias e você conhece vários tipos de  
árvores. Por isso aqui também podemos criar vários tipos de estruturas de dados. Assim, uma estrutura de dados  
isso é mais comum e, na verdade, há muita otimização feita agora neste data  
estrutura. Mas por enquanto vamos supor que a estrutura de dados é tão simples quanto esta, que  
é chamada de árvore Merkle.  
Se você tem um bloco de dados, você tem um hash apontado para ele. Agora se você tiver outro  
bloco de dados, você pode ter um hash apontado para ele. E então o que você faz é combinar  
estes dois ponteiros de hash como um bloco e computar o hash daqueles e criar um hash  
ponteiro para aqueles. Agora você tem mais dois blocos de dados. Então você tem hashes daqueles.  
Assim, uma vez que você tem dois hashes, o que você pode fazer é você pode criar o hash disso. Então  
agora você tem outro nó com dois hashes. Então você cria um hash daquele e do ponto  
para isso. Então agora se você tem esse hash, então você será capaz de descobrir este bloco e  
então você encontrará os dois hashes. Então, então você pode ir para este bloco e este bloco e  
então eventualmente pode ir para os dados e a mesma coisa acontece quando você tem mais  
blocos.  
Então e se você quiser balanceá-lo, então você faz isso em conformidade. Então isto é o que é chamado de  
Merkle tree. Por isso, Merkle tree, agora qual é a vantagem de fazer isso em vez de  
encadeando esses dados no blockchain, na estrutura de dados da cadeia.  
A vantagem é para localizar um bloco, se você tem uma corrente então você tem que fazer um  
pesquisa completamente linear como você tem que ver se você tem o hash apontado para isso, então  
você tem que computar hash dos blocos anteriores para ver qual deles é pouco antes dele.  
E então você tem que computar o hash antes que para saber qual deles é antes disso  
e assim sucessivem. Então isso é muito trabalho.  
Se em vez de chavê-los você tem na estrutura de árvore, e então você tem o hash  
para isso, então você sabe que este bloco não foi adulterado. Então e então você  
localize isso e, em seguida, você localiza isso, e você localiza isso, e então você localiza isso. Então ele  
é uma busca logarítmica por um bloco particular de dados.  
(Consulte O Tempo De Deslizamento: 1:10:39)  
Então, para localizar um bloco de dados, é necessário olhar para o log n número de itens. E enquanto  
em uma cadeia, é preciso olhar para o número linear de itens.  
(Consulte O Tempo De Deslizamento: 1:10:48)  
E então a vantagem da árvore Merkle é que você sabe com n níveis que você pode tratar  
2 aos n blocos de dados. E aí você só precisa de n profundidade, certo. Então o que significa  
profundidade logarítmica. Assim, você pode ter verificação de adesão. Então, suponha que você queira saber  
qual é a adesão a saber se este dado específico, parte de dados está presente. Então  
uma busca logarítmica para as árvores profundidade da raiz e então você estará encontrando isso.  
Agora há uma variante chamada árvore de Merkle classificadas onde os membros também são classificados. Em  
esse caso, verificar a não adesão também é fácil. Portanto, aqui verificando a não associação  
vai ser caro, enquanto aqui verificando a não adesão também vai ser  
log n, porque os dados são classificados. Portanto, se você não encontrar, você também pode encontrar o que é antes  
ele e o que está depois dele.  
Então esse tipo de estrutura é realmente usada em um caso em particular em um   bem sucedido  
implantação desta técnica de hash tree na Estônia. Assim na Estônia, o governo  
realmente mantém este hash árvores para todos os tipos de documentos do governo. E o que  
acontece é que quando os documentos são criados, eles são basicamente colocados nessa árvore  
estruturas através dos roteadores sob os quais esta rede pertence.  
E, em seguida, para o próximo roteador para o próximo roteador por todo o caminho. E então a cada, vamos dizer  
a cada 5 seconds minutos, qualquer que seja criado, qualquer que seja a informação criada é colocada em uma árvore  
em todo o país. E então a rota das árvores é então colocada em uma lista. E assim a lista  
contém, digamos, a cada 5 seconds minutos, o que quer que seja criado a raiz da árvore Merkle disso.  
Então, a próxima 5 second raiz da árvore de Merkle será aquela.  
E essas coisas também são hash conectadas. Em seguida, o governo publica o mais recente  
hash. Então você tem um então você tem uma estrutura de dados que se parece com isso. Portanto, isto é 5  
segundos. Então, é colocado aqui. Em seguida, outros 5 seconds dados a árvore por baixo dela serão  
coloque aqui. Mas estes também são hash conectados. Assim, este hash blocks conectado é chamado  
um blockchain de calendário.  
Então este blockchain de calendário para convencer as pessoas mais no governo o que eles  
fazer é que todo fim de semana eles publicam o valor mais recente hash. O valor de hash mais recente que  
tem sido do bloco que foi criado é publicado aqui em um jornal. Portanto, se  
alguém muda algo aqui algum funcionário do governo interno, então ele tem  
para alterar o próximo próximo um próximo e então eventualmente este hash mudará.  
Agora o público tem esse hash. Portanto, não será muito fácil se o público  
desafios que eu acredito que alguns dados foram alterados aqui. Portanto, este bloco  
foi alterado, portanto, este bloco foi alterado, este bloco foi alterado, este bloco ficou  
alterado. Em seguida, o governo estará em apuros porque público pode desafiar isso  
informações. Então, essa é a ideia de, você conhece a Merkle tree.  
(Consulte O Tempo De Deslizamento: 1:14:11)  
Assim, geralmente, qualquer estrutura de dados não cíclica pode ser criada usando ponteiros de hash. Portanto, este  
é uma coisa importante, então você pode ter estruturas de dados mais otimizadas do que mesmo  
Merkle tree.