Loading

Module 1: Propriedades do Blockchain

Nota de Estudos
Study Reminders
Support
Text Version

Como Criar um Ledger de Transações

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

    +

Então, vamos ver algum código então em C++ temos essa noção de uma classe é basicamente uma estrutura e  
esta classe chamará transação sublinhado T. E esta classe é basicamente tem 3 elementos na classe  
3 itens de dados. Uma é a informação da conta do remetente. Uma é a informação da conta do  
receptor e outro é uma quantia de número inteiro não assinada de 64 bit porque não vamos lidar com  
quantias negativas em transações estamos fazendo transações monetárias aqui.  
Então, esta é uma classe, qualquer instância desta classe que é um objeto criado neste protótipo desta classe  
será meio que representando uma transação assim, toda vez que uma transação acontecer, seremos  
considerando isso, tipo de estrutura de informação que terá o receptor de informações do emissor  
informações de informações e transações. Então, Bob dá a Carol 100 moedas. Então, isso é informação  
que queremos colocar para essa forma as classes 3 elementos.  
Agora, temos que representar também blocos. Então o que é um bloco é na verdade uma coleção de transações  
e então ele tem que ter um ponteiro para ligar o bloco anterior. Então ele tem 2 elementos, 1 é vetor de  
transação. Por isso, o vetor é basicamente tipo de você pode pensar é uma matriz de transações, embora ela  
tem propriedades muito mais interessantes do que as matrizes, mas é uma transação. Portanto, é um, é na verdade um  
lista de ponteiros para transações deste tipo.  
Então, você terá um vetor de transações, que serão as todas as transações que você deseja  
colocar no bloco. E aí você tem um ponteiro para o bloco anterior. Então é assim que o bloco é  
definido. E então a lista vinculada então será uma lista de blocos, ou neste caso, uma lista de ponteiros para  
os blocos. Por isso, mantemos ponteiros para os blocos, e o blockchain será uma lista de blocos. De modo que  
é o conceito aqui.  
(Consulte O Tempo De Deslizamento: 19 :44)  
Agora, vamos olhar para essas estruturas de dados da Biblioteca C++ padrão. Por isso, o vetor é na verdade um  
modelo. Assim, ele pode levar qualquer tipo T e ele vai criar vetores desse tipo e se você quiser adicionar  
elementos para este vetor, então você usa esta função push de volta e o que quer que você esteja tentando empurrar  
into esse vetor. Então, esse elem ou elemento deve ser do tipo, seja qual for o tipo T que você tiver  
definido. Da mesma forma, é possível verificar o tamanho do vetor com a função de tamanho.  
Você também pode acessar, digamos i th elemento deste vetor usando um indexante, como uma matriz, so vetor de i  
iguala-se algo que colocaria aquela coisa nos vetores se posicionar. E se você quiser extrair o  
matriz de informações dentro do vetor, então você pode chamar a função de dados e ela irá dar  
acesso a essa matriz dentro do vetor. Agora, às vezes quando você adiciina coisas no vetor, então, deixe  
nós dizemos inicialmente você define o vetor de um certo tamanho.  
E então você quer adicionar mais coisas no vetor nesse caso porque você percebe que  
saiba, tamanho inicial que você pensou que não é suficiente, então você pode chamar uma função de redimensionamento. E então  
ele irá redimensioná-lo para ter outro em número de elementos no vetor. Você também pode limpar um  
vetor com uma função clara ou excluir todos os elementos e configurar o tamanho para 0. E então finalmente, se  
você deseja iterar, se você passar pela lista para fazer alguma ação sobre os elementos do vetor.  
Por exemplo, lendo-os, ou alterando-os ou jogando uma função sobre eles, então este é o novo  
maneira de fazê-lo nos padrões recentes C++ que você basicamente diz que elem é o elemento de um  
vetor. E o que isso significa é que você faz iteração automaticamente através do elemento Zeroth do vetor,  
primeiro elemento, segundo elemento, terceiro elemento, todo aquele material dentro deste laço. Então isso para loop  
basicamente permite que você vá através de todos os elementos do vetor e faça algo com o  
elemento.  
(Consulte O Tempo De Deslizamento: 21 :57)  
Agora a outra estrutura que você viu so vetor foi realmente usada para armazenar transações. E então  
nós outra coisa que vimos é uma lista vinculada de blocos. Por isso, estrutura de lista foi usada para fazer isso. Então lista  
tem, novamente, certas manipulações. Então em caso de, você quer adicionar um elemento na lista no final,  
então você basicamente faz uma função de push back. Se você quiser saber o tamanho da lista, você pode chamar  
a função tamanho, você pode excluir todos os elementos da lista por função clara, você também pode iterar  
por vários métodos.  
Então um é que você faz como se soubesse i = 0; i0 = n, i + tipo de coisa. Então, aqui, é um ponteiro  
iteração. Então, você pega o primeiro ponteiro, e então você iterava sobre ele, e então até chegar ao  
último ponteiro na lista, então, essa é uma maneira de fazer isso. E o outro está fazendo como você foi  
fazendo isso no vetor. Você faz como se faz vetor e faz algo com os elementos. Então para você  
para entender o que está acontecendo aqui novamente.  
Se você não soubesse C + +, você pode pensar nos blocos. Olhemos para isso, assim, você pode pensar em um  
transação tem 3 elementos o receptor emissor e quantidade e eles são colocados o ponteiro para eles é  
colocar em um vetor direito assim um vetor que tem primeiro local, segundo local, aqui é outro  
transação, terceiro, localização aqui é outra transação e assim por diante. Portanto, este é um vetor de ponteiros para  
transações. Assim, cada uma dessas transações tem 3 elementos agora é que essa coisa toda junto com  
o ponteiro é um bloco.  
Então, quando o próximo bloco vier, um novo bloco é criado, este ponteiro é configurado para o   anterior  
repouso de memória deste bloco. Então, é assim que isso é feito. Então e depois mais um aqui. E então  
esta é uma lista. Então esta é a lista de. Então, isso, estes são os ponteiros para os blocos. E lembre-se disto  
pointer, e este ponteiro está apontando para a mesma coisa, este ponteiro e este ponteiro está apontando para  
a mesma coisa, mas esta é uma lista de ponteiros a blocos e que é a sua Lista Linked de blocos. Então,  
é assim que estamos representando o blockchain inteiro.  
(Consulte O Tempo De Deslizamento: 24 :29)  
Agora, outra coisa que o C++ moderno dá a você agora apontou gerenciamento para que aqueles de você  
Quem sabe C++ sabe que a gestão de pontas é uma grande dor de cabeça. Por exemplo, se você definir um  
pointer, e então você alocar alguma memória para ser apontada por esse ponteiro, como usar um malloc,  
ou uma função ou um novo em caso de C + +, então você é pointer agora está apontando para um chunk de  
memória dependendo do que você colocou aqui como tamanho e tudo.  
Agora, se você parar de usar esse determinado chunk de memória mais tarde em seu programa, então você será  
supostamente para desalocar. Então, você tem que desalocar essa quantidade de memória senão o seu  
programa começará a ficar sem memória. Agora, essa desalocação é muito preocupada, porque  
muitas vezes as pessoas se esquecem de fazer alocação, e então temos esse problema de vazamento de memória. Assim o  
memória que é alocada para ser apontada por um ponteiro, ela já foi usada por um tempo.  
E então depois de um tempo, não adianta nada, mas o usuário, o programador, esqueceu de dizer dealloc ou o,  
você sabe, destruir ou algo assim. E, portanto, a memória permanece eles estão sentados ali com  
ninguém usando eles. E se isso acontecer em um monte de tais ponteiros, por exemplo, em um loop, então ele  
mantém-se acumulando e seu espaço de memória recebe você sabe, fica usado e seu programa então  
irá travar. Por isso, portanto, isso é um problema de vazamento de memória.  
O outro problema é o ponteiro dangling como você tem um ponteiro para o qual a memória foi  
de alocado, mas você tem em seu programa, você começa a usar esse ponteiro para referenciamento  
algo com esse ponteiro e então você tem um problema de exceção de ponteiro nulo. Portanto, portanto,  
as pessoas estão bastante preocupadas em usar ponteiros. Por isso, na moderna C + +, há uma estrutura de dados inteligente  
chamados de ponteiros compartilhados.  
Os ponteiros compartilhados realmente são o que chamamos de ponteiros de contagem de referência, o que significa que ele mantém a faixa  
de se está em uso se a memória alocada para ela é subutilizada ou não. E baseado em  
que ele desaloque automaticamente como programador uma vez que você tenha criado o ponteiro, você não  
ter que se preocupar em desalocar o ponteiro, ou, você sabe, preocupar-se com exceção de ponteiro nulo,  
porque assim que o ponteiro fica fora de escopo, ou não sendo usado, ele é dealocado.  
Então, é por isso que neste programa, os ponteiros compartilhados estão sendo usados. Então a única vantagem aqui para  
você no uso de ponteiro compartilhado é que quando você está olhando para você não tinha que se preocupar com  
dealocar.  
(Consulte O Tempo De Deslizamento: 27 :25)  
Então, essa é a outra coisa. Portanto, é um, como eu disse, é um ponteiro contado de referência. Então, quando você define  
um ponteiro, você é, indo para realmente definirá-lo assim. Por isso, é um ponteiro compartilhado, que aponta para um  
bloco, no nosso caso, o bloco que definimos, e então você tem que definirá-lo assim para exclusão. Você  
não tinha que fazer nada. Ele é excluído automático quando fora de escopo. Então, essa é a razão para usar  
pointer compartilhado.  
E o uso é como um nome de membro de seta do ponteiro direito do ponteiro vai dar acesso a isso  
membro dessa estrutura que é um ponteiro é apontado para assim, se a estrutura tiver 3 membros,  
Membro 1, membro 2, membro 3 então você precisa saber o nome do ponteiro que está apontando  
para isso e então você os referencia como membro 1, membro 2, e membro 3. Então, esse é o uso de  
ponteiros inteligentes e você também pode copiar um ponteiro para outro ponteiro a ponto de apontar para a mesma coisa e  
assim em diante.  
(Consulte O Tempo De Deslizamento: 28 :24)  
Então, agora, a questão é, como você validar um blockchain Então, qual é o blockchain validado  
você tem transações etc em um bloco e você tem o próximo bloco apontando para ele com  
transações neles, próximo bloco apontando para ele com transação para eles. E então quando eu digo  
válido, eu tenho que primeiro verificar que em cada um dos blocos, suas transações são válidas. E quando eu digo  
As transações são válidas, eu só defini o que significa para uma transação ser válida parcialmente como  
versão 1.  
Então, portanto, esse código de validação também é versão 1. Então, primeiro eu vou e validar todas as transações em um  
bloco e, em seguida, declaramos que este bloco é válido. Da mesma forma, eu faço isso por isso e então eu declaro  
este bloco é válido. Da mesma forma, eu faço por isso e declarei este bloco como válido. E suponha que isso seja  
o primeiro bloco ou o bloco gênesis. Nesse caso, isso não está apontando para qualquer outra coisa. Então,  
Por isso, declarei que toda a cadeia é válida no sentido da cadeia que definimos neste  
programa.  
Então, vamos ver como o código funciona. Então, antes de mais nada, neste caso, nós realmente usamos uma tabela de saldos,  
direita tão balanceada tabela como eu argumentei anteriormente, é que eu posso criar a tabela de saldos a partir do  
ledger da transação. Agora, por que eu então recriar a tabela de saldos dentro do programa? O  
razão é que para validar que uma transação é válida, eu tenho que verificar se o saldo do remetente  
é maior do que a quantidade que ele ou ela está tentando enviar. Por isso, preciso calcular rapidamente o saldo  
do remetente.  
Agora se eu tiver que calcular o saldo do remetente, toda vez que eu validar uma transação, então você  
estará refazendo o mesmo trabalho de novo e de novo, tenho que passar por todas as transações e adicionar e  
adicionar e subtrair, ou quaisquer transações, quaisquer montantes que ele recebeu e subtrair aqueles que ele  
transferiu-se para outra pessoa. Por isso, portanto, é como um tipo real de como uma técnica de caching.  
Assim, mantemos nossos saldos estáveis no site.  
E, portanto, primeiro o que fazemos é que criamos uma tabela de saldos. E então o que você faz é que  
passaremos pela transação e verificamos se há um remetente real ou se é um depósito inicial. Se  
é um depósito inicial, então tudo o que você precisa fazer é que você tenha que adicionar essa quantia aos receptores  
saldo se não for depósito inicial, o que significa alguém enviando dinheiro, de modo que o remetente  
saldo deve ser maior do que a quantidade de transação.  
E esse montante de transação deve ser subtraído dos saldos do remetente e adicionado ao  
saldos de receptores. E se esta transação for, nem o depósito inicial ou o saldo do remetente for  
maior do que igual a quantidade de transação, então retornamos falso. Isso significa que este código é para  
validando transações. Por isso, estamos basicamente olhando para todas as transações. Então aqui você vê que nós  
estão fazendo um blockchain auto blk em transações de ponto do bloco de auto tx.  
Então eu estou escolhem um bloco, e estou passando por todas essas transações. Então eu estou escolhem o  
próximo bloco. Passando por toda a sua transação estou a escolher o próximo bloco e estou a passar  
todas as transações de cada transação e para cada transação estou verificando se é um depósito inicial ou o  
saldo do remetente é maior do que a quantidade então eu faço as devidas alterações nos saldos  
e então eu retorno falso.  
Então, neste eu tenho para um efeito colaterais que é a tabela de saldos no nessa condição atual de  
o blockchain o blockchain é uma estrutura crescente, mas em qualquer ponto quando o blockchain está em  
esta etapa, talvez mais tarde haja mais aqui, mas neste momento, eu tenho até aqui. Então, a esta  
ponto, se eu validar ou não apenas eu validar todas as transações, mas também eu construí o  
tabela de saldos. Então, no início desta chamada de validação, eu limpei os saldos se havia  
quaisquer outras informações anteriores e então iniciamos a reconstrução do campo de saldos. Então, isso é  
como isso é feito.  
(Consulte O Tempo De Deslizamento: 32 :49)  
Agora, como estamos mantendo a tabela de saldos? Então, o que nós fizemos foi que criamos o que é  
chamada de tabela hash. Então, e o que é uma mesa de hash? A tabela Hash é uma tabela, que é indexada por hash.  
Então, digamos que é uma tabela com 2 colunas. Em uma coluna, você tem algum elemento. Na segunda  
coluna, você tem o outro elemento. E então para acessar o segundo elemento, como, vamos dizer, Bob,  
esta, Alice esta assim para saber o que está aí para Alice.  
Eu tenho que indexar diretamente ao nome de Alice. E então eu deveria ser capaz de ler o que Alice tem assim em  
este caso, se for uma mesa de equilíbrio, será a Alice e seu saldo, será Bob e seu saldo.  
Então, é assim que a tabela hash é formada. Então, neste caso, chamado de mapa desordenado, e tem 2  
tipos diferentes. Então k é o tipo do primeiro elemento ou primeira coluna e v é o tipo da segunda  
coluna. Portanto, se a primeira coluna for uma string, e segunda coluna for um inteiro.  
Como Bob e sua quantia, então teremos número inteiro e teremos a string e o inteiro. Se  
esta é uma estrutura mais complexa, então vamos dizer um endereço, então ele estará nessa estrutura, e ele  
será quantia. É assim que vamos definir. Agora a maneira como mapeamos é acessada é por  
indexando o mapa com esses elementos. Assim, você pode pensar nesse tipo de matriz, onde o índice é  
usado para acessar o elemento aqui, em vez de índice de array, podemos ter nossa coisa de tipo k para indexar o  
matriz. Então, essa é a ideia.  
Então aqui também novamente, para inserir algo, é preciso apenas dizer qual a chave e qual o elemento que  
você está inserindo o tamanho pode ser obtido por esta chamada. Você pode limpar o mapa sobre a tabela para  
faça-o reajuste. E você pode iterar através dele como se você quisesse ir dos primeiros elementos do  
tabela, a primeira linha da tabela para o todo o caminho até o final. Você tem que fazer algo como este  
como um ponto depois que começa aqui, estes são chamados de iteradores.  
Na verdade, eles não são realmente não necessariamente ponteiros, e então você faz essa iteração ou você pode  
também pesquisar chamando uma função encontrar. Por isso, a busca vai permitir que você diga, o que está aí para Alice, então  
geralmente encontra Alice como uma string, e então deve dizer qual a quantidade de Alice tem.  
(Consulte O Tempo De Deslizamento: 35 :22)  
E também temos um conjunto de estrutura de dados ou um modelo C++ de template. Portanto, configurado como você sabe, é um conjunto de  
elementos. Então, se você quiser representá-lo em uma estrutura de dados, é preciso ter uma maneira de inserir um  
elemento que você tem para saber o tamanho que é quantos elementos existem no conjunto, você pode zerar  
o conjunto para que não tenha mais nada. E você pode iterar sobre este conjunto para ir a partir da uma  
elemento para o próximo para o próximo e assim por diante. E você também pode pesquisar no set. Então, que C set data  
estrutura.  
(Consulte O Tempo De Deslizamento: 35 :54)  
Agora, blockchain é um ledger de transações. Isso é verificável e permanente. Então agora, nós só  
focou na parte verificável que as transações têm alguma validade. Mas a permanência é  
algo que temos que nos preocupar agora.  
(Consulte O Tempo De Deslizamento: 36 :14)