Bitcoin Transactions Bitcoin Transactions A transação também contém uma prova de propriedade para cada quantia de bitcoins (inputs), na forma de uma assinatura digital do dono. Essa assinatura digital pode ser validada por qualquer participante da rede. “Gastar” significa assinar digitalmente uma transação que transfere valores de uma transação prévia para um novo usuário, identificado por um endereço. Transações movem valor de transactions inputs para transaction outputs. Input = de onde os valores estão vindo, geralmente de um prévio transaction output Output = atribui um novo dono ao valor, associando este valor com uma chave Encumbrance: associação de um output ao novo dono dos bitcoins da transação Bitcoin Transactions Uma cadeia de transações Common Transaction Forms 1/3 Forma mais comum: pagamento simples de um endereço para outro, que frequentemente inclui um “troco” retornado ao dono original. Contém um input e dois outputs Common Transaction Forms 2/3 Outra forma comum é uma transação que agrega diferentes inputs em um único output. Este tipo representa o equivalente a realizar um pagamento com um conjunto de notas e moedas. Transações como esta geralmente são geradas por aplicativos carteiras para limpar quantias pequenas que foram recebidas como troco de outros pagamentos. Common Transaction Forms 3/3 Finalmente, este tipo é usualmente gerado por entidades comerciais para distribuir fundos, assim como um pagamento mensal a múltiplos funcionários. Constructing a Transaction A aplicação carteira de Alice contém toda a lógica para selecionar apropriados inputs e outputs para construir uma transação. Alice somente precisa especificar um endereço destino. O resto acontece na aplicação sem ela precisar saber os detalhes. Uma aplicação carteira pode construir uma transação até estando offline. Ela pode ser construída e enviada para a rede assim que a aplicação estiver conectada com a Internet. Getting the right inputs A aplicação carteira de Alice primeiro tem que achar inputs que podem pagar pela quantia que ela quer enviar a Bob. A maioria das carteiras mantém uma lista de UTXOs (unspent transaction outputs) que estão trancadas (encumbered) com as chaves da carteira. A carteira de Alice contém uma cópia da transaction output da transação na qual Joe lhe enviou seus primeiros bitcoins. Uma carteira cliente full-index contém uma cópia de todas as UTXOs A maioria dos usuários, no entanto, rodam um cliente lightweigth, que rastreia somente as UTXO do próprio usuário. Getting the right inputs Se uma carteira não mantém uma cópia de outras UTXOs, ela pode requisitar a rede bitcoin por essa informação, usando APIs disponíveis ou perguntando a algum cliente full-index. https://www.blockchain.com/btc/tx/7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18 Creating the outputs Uma transaction ouput é criada na forma de um script que diz algo como “Este output é de propriedade de quem apresentar uma assinatura correspondente à chave pública de Bob” Como somente Bob tem a devida chave privada, somente ele pode gastar essa quantia. O segundo output da transação de pagamento de café de Alice para Bob é um troco de 0.0845 BTC para Alice. Sua carteira quebra então seus fundos em dois pagamentos: um para Bob e outro de volta para ela mesma. Para a transação ser processada pela rede, ela inclui uma taxa de 0.0005 BTC , que é coletada pelo minerador que inclui a transação em um bloco. Creating the outputs https://www.blockchain.com/btc/tx/0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 Adding the transaction to the ledger A transação criada pela carteira de Alice tem um tamanho de 258 bytes e contém tudo o que é necessário para que se confirme a propriedade dos fundos transferidos. Agora a transação deve ser transmitida para a rede Bitcoin, onde irá se propagar e se tornar parte do registro distribuído, chamado blockchain. Transmitting the transaction Já que a transação contém toda a informação necessária para processamento, não importa como ou onde será transmitida para a rede bitcoin. A rede bitcoin é uma rede peer-to-peer, onde cada participante está conectado a vários outros clientes. O propósito da rede é propagar transações e blocos para todos os participantes. How it propagates A carteira de Alice pode transmitir a transação a outros clientes a que está conectada, seja através de rede cabeada, WiFi ou mobile. A aplicação não necessita estar conectada diretamente à carteira de Bob. Qualquer cliente bitcoin que receber a transação imediatamente a transmitirá a outros clientes a que está conectado. Assim, em segundos, a transação rapidamente se propaga pela rede peer-to-peer, chegando na aplicação carteira de Bob, que pode ver que a transação foi criada. Bob’s view Caso a carteira de Bob esteja diretamente conectada à de Alice, ele pode ser o primeiro nó da rede a receber a transação. Caso contrário, a transação chegará à carteira de Bob em segundos. Esta carteira imediatamente identifica a transação de Alice como um pagamento chegando porque contém outputs relativos às chaves de Bob. A carteira de Bob também pode verificar independentemente que a transação é bem formada, usa inputs prévios não gastos e contém uma taxa suficiente para ser incluída no próximo bloco. Bob pode então assumir que, com pouco risco, a transação será em breve incluída em um bloco e confirmada. Bitcoin Mining A transação de Alice agora foi propagada e agora vive na rede bitcoin. Somente fará parte do registro distribuído (blockchain) quando for verificada e incluída em um processo chamado mineração. Transações são empacotadas em blocos, que requerem um enorme poder computacional para provar, mas apenas um pequeno poder computacional para serem verificadas como válidas. Esse processo é chamado mineração e serve dois propósitos na rede: - Criar novos bitcoins em cada bloco. A quantia de bitcoins criada em cada bloco é fixa e diminui com o tempo (halving). - Criar confiança na rede ao assegurar que transações somente são confirmadas caso suficiente poder computacional foi gasto com o bloco. Mais blocos significam mais computação, que significa mais confiança. Bitcoin Mining Analogia: jogo de Sudoku. Em um jogo completo é fácil verificar sua corretude, mas difícil se completar um jogo do zero. A dificuldade pode ser aumentada com o número de linhas e colunas. Jing, o engenheiro que participa da rede bitcoin como um minerador, se junta a dezenas de milhares de outros mineradores em uma corrida global para achar uma solução para um bloco de transações. Achar uma solução, a chamada “Proof-of-Work” requer diversas operações de hashing por segundo. O algoritmo envolve realizar repetidamente um hash sobre o cabeçalho de um bloco + um número aleatório com o algoritmo SHA256 até que uma solução corresponda a um padrão previamente acordado. O primeiro minerador que achar uma solução válida para o problema ganha o round de competição e publica seu bloco na blockchain. Bitcoin Mining Jing começou a minerar em 2010 usando um potente computador desktop. Assim que mais mineradores se juntam à competição, a dificuldade de mineração aumenta rapidamente. Assim, Jing e mais mineradores realizam um upgrade para um hardware mais potente, como Graphical Processing Units (GPUs), usados em jogos desktop ou consoles. Em 2014 (quando o livro foi escrito) a dificuldade é tão alta que somente é lucrativo minerar com Application Specific Integrated Circuits (ASICs), essencialmente centenas de algoritmos de mineração imprimidos em hardware, rodando em paralelo em um único chip de computador. Jing também se juntou a uma “mining pool”, rodando duas máquinas ASIC conectadas, minerando bitcoins 24h/dia. Ele paga os custos de eletricidade vendendo alguns dos bitcoins gerados com a mineração, gerando uma renda dos lucros. Seu computador roda uma cópia do bitcoind, o cliente referência, como o back-end para seu software especializado de mineração. Mining transactions in blocks A cada 10 minutos (em média) mineradores geram um novo bloco contendo transações geradas desde o último bloco. Novas transações estão constantemente sendo propagadas pela rede e assim que são visualizadas por nós são adicionadas a uma “pool” temporária de transações ainda não verificadas. Na criação de um novo bloco, mineradores adicionam transações não verificadas e tentam construir uma solução para este bloco. Transações com taxas maiores são priorizadas. Mineradores geram a coinbase, a primeiria transação de cada bloco, onde adicionam os bitcoins minerados para si mesmos. Atualmente, 12.5 BTC Bloco que incluiu a transação de Alice: https://www.blockchain.com/btc/block-height/277316 Mining transactions in blocks Spending the transaction Bob, agora em posse dos bitcoins transferidos por Alice, pode gastá-los, gerando novas transações. Assim que realizar novos pagamentos/transferências, ele expande a cadeia de transações, que são adicionadas à blockchain. Todos podem verificar essas novas transações. Bob então contrata um web designer indiano, chamado Gopesh, para desenvolver um site para seu negócio. Spending the transaction
Enter the password to open this PDF file:
-
-
-
-
-
-
-
-
-
-
-
-