terça-feira, 7 de novembro de 2017

Como ocorre o registro de transações Bitcoin no Blockchain

 transações Bitcoin Blockchain

As transações são a parte mais importante do sistema bitcoin. Todo o restante no bitcoin é projetado para garantir que as transações possam ser criadas, propagadas na rede, validades e por mim adicionadas ao registro global das transações (a blockchain). As transações são estruturas de dados que codificam a transferência de valor entre os participantes no sistema bitcoin. 

Cada transação é uma entrada pública na blockchain do bitcoin, o registro geral de dupla-entrada. Neste capítulo, nós iremos examinar as várias formas de transações, o que elas contêm, como criá-las, como elas são verificadas e como elas se tornam parte do registro permanente de todas as transações. 


Ciclo de Vida da Transação 


O ciclo de vida de uma transação começa com a criação da transação, também conhecido como originação. A transação é então assinada com uma ou mais assinaturas indicando a autorização para gastar os fundos que são indicados pela transação. 

A transação é então transmitida na rede bitcoin, onde cada nodo (participante) da rede a valida e a propaga até que ela atinja (quase) todos os nodos na rede. Por fim, a transação é verificada por um nodo minerador e é incluída em um bloco de transações que é registrado na blockchain. 

Ao ser registrada na blockchain e confirmada por um número subsequente suficiente de blocos (confirmações), a transação é uma parte permanente do registro do bitcoin e é aceita como válida por todos os participantes. Os fundos alocados para um novo dono através da transação agora podem ser gastos em uma nova transação, estendendo a cadeia de possa e iniciando novamente o ciclo de vida de uma transação. 


Criando Transações 


Pode ser útil pensar em uma transação da mesma maneira que um cheque de papel. Como um cheque, a transação é um instrumento que expressa a intenção de se transferir dinheiro e ela não é visível ao sistema financeiro até que seja enviada para execução/depósito. Como um cheque, quem origina a transaçõa não tem a obrigação de ser aquele que assina a transação. 

As transações podem ser criadas online ou offline por qualquer pessoa, mesmo se a pessoa que estiver criando a transação não seja a pessoa que assinará a autorização para gastar os fundos. Por exemplos, um funcionário de contabilidade poderá processar cheques pagáveis pela assinatura do CEO. 

De maneira similar, um funcionário de contabilidade pode criar transações bitcoin e então fornecê-las para que o CEO aplique suas assinaturas digitais para torná-las válidas. Enquanto um cheque tradicional refere-se a uma conta bancária específica como a fonte para os fundos, uma transação bitcoin refere-se a uma transação prévia como sua fonte, ao invés de uma conta bancária. 

Assim que a transação for criada, ela é assinada pelo dono (ou donos) dos fundos de origem. Ela é 1 propriamente formada e assinada, a transação assinada agora é válida e contém toda a informação necessária para executar a transferência dos fundos. Finalmente, a transação válida tem que atingir a rede bitcoin para que ela possa ser propagada até atingir um minerador para incluí-la no registro público (a blockchain). 


Transmitindo Transações para a Rede Bitcoin 


Primeiro, uma transação precisa chegar à rede bitcoin para que ela seja propagada e incluída na blockchain. Basicamente, uma transação bitcoin é simplesmente 300 a 400 bytes de dados e precisa atingir qualquer um das dezenas de milhares de nodos bitcoin. 

Aqueles que enviam não precisam confiar nos nodos que eles usam para transmitir a transação, contanto que eles usem mais de um para garantir a sua propagação. Os nodos não precisam confiar em quem envia, nem precisam saber a "identidade" de quem envia. 

Como a transação é assinada e não contém informações confidenciais, chaves privadas ou credenciais, ela pode ser transmitida publicamente usando qualquer transporte de rede que seja conveniente. Ao contrário das transações de cartões de crédito, por exemplo, que contém informações sensíveis e só podem ser transmitidas em redes criptografadas, uma transação bitcoin pode ser enviada em qualquer rede. 

Contanto que a transação possa atingir um nodo bitcoin que a propague para rede bitcoin, não interessa a maneira como ela será transportada para o primeiro nodo. Portanto, as transações bitcoin podem ser transmitidas para a rede bitcoin através de redes inseguras como WiFi, Bluetooth, NFC, Chirp, códigos de barras ou ao copiar-se e colar a partir de um formulário na internet. 

Em casos extremos, uma transação bitcoin poderia ser transmitida através de um pacote de rádio, relay satélite ou em ondas curtas usando transmissão burst, espectro amplo ou pulando frequências para evitar detecção e interferências. Uma transação bitcoin poderia ser codificada até mesmo como smileys (emoticons) e postada em um fórum público ou enviada como uma mensagem de texto ou uma mensagem de chat Skype. 

O Bitcoin transformou o dinheiro em uma estrutura de dados, tornando praticamente impossível que alguém seja impedido de criar e executar uma transação bitcoin. 


Propagando Transações na Rede Bitcoin 


Assim que a transação é enviada para qualquer nodo conectado à rede bitcoin, a transação será validada por aquele nodo. Se for válida, o nodo irá propagá-la para outros nodos com os quais ele está conectado, e uma mensagem de sucesso irá retornar na mesma hora para quem originou a transação. 

Se a transação for inválida, o nodo irá rejeitá-la e retornará na mesma hora uma mensagem de rejeição para quem originou a transação. A rede bitcoin é uma rede par-a-par, o que significa que cada nó bitcoin está conectado a alguns outros nós bitcoin que ele descobre durante a inicialização através do protocolo par-a-par. 

Toda a rede forma uma emaranhado frouxamente conectado sem uma topologia fixa ou qualuqer estrutura, tornando todos os nós pares iguais. As mensagens, incluindo transações e blocos, são propagadas a de cada nó a todos os pares aos quais ele está conectado, um processo chamado "flooding" (inundação). 

Uma transação recém validada e injetada em qualquer nó da rede será enviada a todos os nós conectados a ele (vizinhos), cada um dos quais enviará a transação a todos os seus vizinhos, e assim por diante. Dessa maneira, dentro de alguns segundos uma transação válida será propagada numa onda 2 exponencialmente expandida através da rede até que todos os nós da rede a recebam. 

A rede bitcoin é projetada para propagar transações e blocos para todos os nodos de uma maneira eficiente e flexível que seja resistente a ataques. Para prevenir spam, ataques DOS ou outros ataques maliciosos contra o sistema bitcoin, cada nodo valida independentemente cada transação antes de propagá-la adiante. Uma transação mal formada não irá passar por um nodo sequer. As regras através das quais as transações são validadas serão explicadas em maiores detalhes em [tx_verification]. 


Estrutura da Transação 


Uma transação é uma estrutura de dados que codifica uma transferência de valor a partir de uma fonte de fundos, chamada de input, para um destino, chamado de output. Os inputs e outputs de transação não são relacionados a contas ou identidades. Ao invés disso, você deveria imaginá-los como quantidades de bitcoin—pedaços de bitcoin—que são bloqueados com uma senha secreta específica que somente o dono, ou a pessoa que conhece a senha, pode desbloqueá-los. Uma transação contém vários campos, como demonstrado em A estrutura de uma transação.


Estrutura transação bitcoin

Locktime da Transação Locktime (tempo de travamento), também conhecido como nLockTime, devido à variável com este nome utilizada no cliente de referência, define o tempo mais precoce que uma transação é valida e pode ser transmitida na rede ou adicionada à cadeia de blocos (blockchain). 

Ele é definido como zero na maioria das transações, indicando uma propagação e execução imediatas. Se o locktime é diferente de zero e abaixo de 500 milhões, ele é interpretado como uma altura de bloco, significando que a transação não é válida e que ela não será transmitida ou incluída na cadeia de blocos antes que a altura de bloco especificada seja atingida. 

Se ele for acima de 500 milhões, ele é interpretado como uma timestamp Unix Epoch (segundos desde 1-Jan-1970) e a transação não é valida até que tal tempo seja antingido. As transação com locktime especificando um bloco ou um tempo no futuro precisam ser mantidas pelo sistema de origem e transmitidas à rede blockchain apenas após elas se tornarem válidas. O uso do locktime é o equivalente a assinar um cheque pré-datado.


Inputs e Outputs das Transações 


A matéria-prima principal de uma transação bitcoin é um output de transação não-gasto, ou UTXO. Os UTXOs são pedaços indivisíveis da moeda bitcoin vinculados a um dono específico, registrados na blockchain, e reconhecidos como unidades de moeda pela rede. A rede bitcoin rastreia todos os UTXOs disponíveis (não-gastos), que atualmente são milhões. 

Quando um usuário recebe um bitcoin, a quantia é registrada na blockchain como um UTXO. Portanto, o bitcoin de um usuário pode estar disperso como UTXOs entre centenas de transações e centenas de blocos. Como efeito, não existe algo como um armazenamento do saldo de um endereço ou conta bitcoin; existem apenas UTXOs dispersos, vinculados a seus respectivos donos. 

O conceito de saldo de um usuário de bitcoin é algo criado pelos aplicativos de carteira. A carteira calcula o saldo do usuário ao escanear a blockchain e ao somar todos os UTXOs que pertecem àquele usuário. 


Não há contas correntes ou saldos no bitcoin; existem apenas outputs de transações não gastos (UTXO) espalhados na blockchain. 

Um UTXO pode ter um valor arbitrário denominado como um múltiplo de satoshis. Assim como os dólares podem ser divididos para duas casas decimais (os centavos), os bitcoin podem ser dividos até oito casas decimais (os satoshis). Embora o UTXO possa ser qualquer valor arbitrário, uma vez criado ele é indivisível assim como uma moeda que não pode ser cortada pela metade. 

Se um UTXO é maior do que o valor desejado de uma transação, ele precisa ser totalmente consumido e um troco deve ser gerado na transação. Em outras palavras, se você possui 20 UTXOs de bitcoin, e você quer pagar 1 bitcoin, a sua transação precisa consumir todos os 20 UTXOs de bitcoin e produzir duas saídas (outputs): uma que paga 1 bitcoin para o recipiente e outra que paga 19 bitcoins em troco de volta para a sua carteira. 

Como consequência disso, a maioria das transações de bitcoins irão gerar troco. 

O QUE É O BLOCKCHAIN


Palestra com especialista Carlos Baldove


Imagine um consumidora comprando uma bebida de $1,50, pegando sua carteira e tentando achar uma combinação de moedas e notas para atingir o valor de $1,50. A consumidora poderá escolher o 4 troco exato se disponível (uma nota de um dólar e duas moedas de 25 centavos), ou uma combinação de pequenas denominações (6 moedas de 25 centavos), ou, se necessário, uma unidade maior como uma nota de 5 dólares. 

Se ela der dinheiro demais, digamos $5, ao dono da loja, ela esperará um troco de $3,50, o qual ela irá colocar em sua carteira e o terá disponível para transações futuras. De maneira semelhante, uma transação bitcoin precisa ser criada a partir de um UTXO do usuário em quaisquer denominações que o usuário tenha disponível. 

Os usuários não podem dividir um UTXO pela metade, da mesma maneira que eles não podem cortar uma nota de um dólar pela metade e usá- la no mercado. O aplicativo de carteira do usuário tipicamente irá selecionar entre os UTXOs disponíveis do usuário várias unidades para compor uma quantia maior ou igual ao valor de transação desejado. 

Assim como na vida real, a aplicação bitcoin possui várias estratégias para satisfazer a quantia de compra: combinar várias unidades menores, procurar pelo troco exato ou usar uma unidade única maior que o valor da transação e receber o troco. 

Toda essa administração completa dos UTXOs gastáveis é feita de maneira automática pela carteira do usuário, e os usuários sequer tomam conhecimento dela. A administração das UTXOs só é relevante se você for um programador construindo transações cruas (raw) a partir de UTXOs. Os UTXOs consumidos por uma transação são chamados de entradas (inputs) de transação, e os UTXOs criados por uma transação são chamados de saídas (outputs) de transação. 

Dessa maneira, partes de valor do bitcoin movem adiante de dono para dono em uma cadeia de transações que consome e cria UTXOs. As transações consomem UTXOs quando os desbloqueiam com a assinatura do dono atual, e criam UTXOs quando os vinculam ao endereço bitcoin do novo dono. A exceção para a cadeia de output e input é um tipo especial de transação chamada transação coinbase, que é a primeira transação em cada bloco. 

Essa transação é inserida no bloco pelo minerador "vencedor" e cria novos bitcoins que serão pagos para o minerador como uma recompensa por ter conseguido minerar o bloco. É assim que a oferta monetária do bitcoin é criada durante o processo de mineração, como veremos no [ch8]. 

E o que vem primeiro? Inputs ou outputs, a galinha ou o ovo? Falando estritamente, os outputs vem primeiro porque as transações coinbase, que geram os novos bitcoins, não tem inputs e criam outputs a partir do nada. 


Outputs de Transações 


Toda transação bitcoin cria saídas (outputs), que são gravadas no registro do bitcoin (a cadeia de blocos). Quase todas essas saídas (outputs), com uma exceção (ver Output de dados (OP_RETURN)) criam partes de bitcoin gastáveis chamadas _outputs de transação não-gastos ou UTXO (do inglês Unspent Transaction Outputs), que são então reconhecidas por toda a rede e se tornam disponíveis para que o dono gaste em uma transação futura. 

Quando se envia um bitcoin para alguém, na verdade se está criando uma output de transação não-gasto (UTXO) registrado para o endereço dessa pessoa e tornando-o disponível para ser gasto. Os UTXOs são monitorados por todos os nodos completos de bitcoin como um conjunto de dados 5 chamado de conjunto UTXO ("UXTO set") ou pool UTXO, que é armazenado em um banco de dados. 

As novas transações consomem (gastam) um ou mais desses outputs que estão no conjunto UTXO. Os outputs de transações consistem de duas partes: 

• Uma quantidade de bitcoin, denominados em satoshis, a menor unidade bitcoin 

• Um script de travamento, também conhecido como uma "oneração" que "trava" essa quantia ao especificar os requisitos que precisam ser preenchidos para poder se gastar o output. 

A linguagem de script da transação, usada no script de travamento mencionado anteriormente, é discutida em detalhes em Scripts de Transação e Linguagem de Script. A estrutura de um output de transação demonstra a estrutura de um output de transação.

FONTE - Esse é um trecho do livro 'Mastering Bitcoin


EmoticonEmoticon