Convidados desta edição Daniel Martins Narcélio Filho Mastering Bitcoin 1. Introduction 2. How Bitcoin Works 3. The Bitcoin Client 4. Keys, Addresses, Wallets 5. Transactions 6. The Bitcoin Network 7. The Blockchain 8. Mining and Consensus 9. Alternative Chains, Currencies, and Applications 10. Bitcoin Security Transactions, Blocks, Mining, and the Blockchain O sistema Bitcoin, diferentemente de sistemas de banco e pagamento tradicionais, é baseado em confiança descentralizada. Neste capítulo: análise de uma transação única, se tornando de confiança e aceita pelo mecanismo de consenso distribuído e finalmente registrada na blockchain. Uso de um blockchain explorer para visualizar cada passo: aplicação web que opera como um mecanismo de busca que permite a pesquisa por endereços, transações e blocos e a visualização de relacionamentos entre eles. Blockchain explorers populares: - blockchain.info - blockexplorer.com - insight.bitpay.com - blockr.io Buying a cup of coffee Exemplo do capítulo anterior: - Alice comprou 0.10 BTC de seu amigo Joe - Ela fará sua primeira transação, comprando café na cafeteria de Bob Na cafeteria clientes tem a opção de pagar em dólares ou em bitcoins. O PoS (point of sale) converte o preço do café para o preço equivalente em bitcoins. Um QR code contendo uma requisição de pagamento é então mostrado para Alice escanear e realizar a transação. Buying a cup of coffee bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQ A?amount=0.015&label=Bob%27s%20Cafe&messa ge=Purchase%20at%20Bob%27s%20Cafe Exibido no PoS do Bob: Buying a cup of coffee A requisição de pagamento codifica a URL abaixo, definida no BIP0021: QR code: contém somente um endereço Requisição de pagamento: URL codificada que contém: - endereço destino - quantia - descrição Buying a cup of coffee 1. Alice usa seu smartphone para escanear o QR code na tela do PoS 2. É mostrada em seu aplicativo a quantia de 0.0150 BTC para Bob’s Cafe 3. Ela seleciona a opção Send para autorizar o pagamento 4. Em alguns segundos Bob pode ver a transação no PoS A rede Bitcoin pode realizar transações em valores fracionários, e.g. de milibitcoins (1/1.000 de um bitcoin) até 1/100.000.000 de um bitcoin, conhecido como Satoshi O livro usa o termo “bitcoins” para se referir a qualquer quantidade da moeda bitcoin, da menor unidade (1 Satoshi) até o número total (21.000.000) de todos os bitcoins que serão minerados. Bitcoin Transactions Em termos simples, uma transação diz à rede que o dono de um certo número de bitcoins autorizou a transferência de alguns bitcoins a outro usuário. O novo usuário pode então gastar esses bitcoins, criando outra transação que autoriza a transferência a outro usuário, em uma cadeia de posse. Cada transação contém um ou mais “inputs” = débitos em uma conta bitcoin. No outro lado da transação, há um ou mais “outputs”, que são créditos em outra conta. Débitos e créditos não necessariamente somam a mesma quantia. Outputs somam uma quantia inferior aos inputs, pois há uma taxa ( transaction fee ) a ser paga pela transação. 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